diff --git a/duniterpy/documents/identity.py b/duniterpy/documents/identity.py index d952a527eb7ed2d7fc25af69884befd2df4611ce..85f0fdcbca0e73a5da0aba939adb325b0ac28eed 100644 --- a/duniterpy/documents/identity.py +++ b/duniterpy/documents/identity.py @@ -257,3 +257,36 @@ Timestamp: {timestamp} identity.signatures = [signature] return identity + + @classmethod + def from_lookup_response( + cls: Type[IdentityType], version: int, currency: str, lookup_response: dict + ) -> IdentityType: + """ + Return Identity instance from bma.lookup request response + + :param version: Document version + :param currency: Currency codename + :param lookup_response: Lookup request response + :return: + """ + # parse results + pubkey = lookup_response["results"][0]["pubkey"] + uids = lookup_response["results"][0]["uids"] + uid_data = uids[0] + # capture data + timestamp = BlockUID.from_str(uid_data["meta"]["timestamp"]) + uid = uid_data["uid"] # type: str + signature = uid_data["self"] # type: str + + # return self-certification document + identity = cls( + version=version, + currency=currency, + pubkey=pubkey, + uid=uid, + timestamp=timestamp, + ) + identity.signatures = [signature] + + return identity diff --git a/examples/save_revoke_document.py b/examples/save_revoke_document.py index 9c4596ad61ad19a653c8b5cee1f64f09d40ecd60..511ac6e465403c9fd8d943683fb12610fa7f21a1 100644 --- a/examples/save_revoke_document.py +++ b/examples/save_revoke_document.py @@ -19,7 +19,7 @@ from typing import Optional from duniterpy.api import bma from duniterpy.api.client import Client -from duniterpy.documents import BlockUID, Identity, Revocation +from duniterpy.documents import Identity, Revocation from duniterpy.key import SigningKey if "XDG_CONFIG_HOME" in os.environ: @@ -66,30 +66,10 @@ def get_identity_document( """ # Here we request for the path wot/lookup/pubkey lookup_data = client(bma.wot.lookup, pubkey) - identity = None - - # parse results - for result in lookup_data["results"]: - if result["pubkey"] == pubkey: - uids = result["uids"] - uid_data = uids[0] - # capture data - timestamp = BlockUID.from_str(uid_data["meta"]["timestamp"]) - uid = uid_data["uid"] # type: str - signature = uid_data["self"] # type: str - - # return self-certification document - identity = Identity( - version=10, - currency=current_block["currency"], - pubkey=pubkey, - uid=uid, - timestamp=timestamp, - ) - identity.signatures = [signature] - break - - return identity + + return Identity.from_lookup_response( + PROTOCOL_VERSION, current_block["currency"], lookup_data + ) def get_signed_raw_revocation_document( diff --git a/examples/send_certification.py b/examples/send_certification.py index a14db4c970fdf39e6292ca5dafe69d16be4d98c2..c51c1f550374ab741f4de2ad5abaf55435edc520 100644 --- a/examples/send_certification.py +++ b/examples/send_certification.py @@ -29,6 +29,9 @@ from duniterpy.key import SigningKey # Here we use the secure BASIC_MERKLED_API (BMAS) BMAS_ENDPOINT = "BMAS g1-test.duniter.org 443" +# Current protocol version +PROTOCOL_VERSION = 10 + ################################################ @@ -47,30 +50,10 @@ def get_identity_document( """ # Here we request for the path wot/lookup/pubkey lookup_data = client(bma.wot.lookup, pubkey) - identity = None - - # parse results - for result in lookup_data["results"]: - if result["pubkey"] == pubkey: - uids = result["uids"] - uid_data = uids[0] - # capture data - timestamp = BlockUID.from_str(uid_data["meta"]["timestamp"]) - uid = uid_data["uid"] # type: str - signature = uid_data["self"] # type: str - - # return self-certification document - identity = Identity( - version=10, - currency=current_block["currency"], - pubkey=pubkey, - uid=uid, - timestamp=timestamp, - ) - identity.signatures = [signature] - break - - return identity + + return Identity.from_lookup_response( + PROTOCOL_VERSION, current_block["currency"], lookup_data + ) def get_certification_document( @@ -117,7 +100,7 @@ def send_certification(): pubkey_from = key.pubkey # prompt entry - pubkey_to = input("Enter certified pubkey: ") + pubkey_to = input("Enter pubkey to certify: ") # capture current block to get version and currency and blockstamp current_block = client(bma.blockchain.current)