From 9e691bb5d93dcbc5973c65204cd69e41bf639844 Mon Sep 17 00:00:00 2001 From: Vincent Texier <vit@free.fr> Date: Mon, 14 Jun 2021 23:49:18 +0200 Subject: [PATCH] [enh] #95 add Identity.from_lookup_response() to simplify examples --- duniterpy/documents/identity.py | 33 ++++++++++++++++++++++++++++++++ examples/save_revoke_document.py | 30 +++++------------------------ examples/send_certification.py | 33 ++++++++------------------------ 3 files changed, 46 insertions(+), 50 deletions(-) diff --git a/duniterpy/documents/identity.py b/duniterpy/documents/identity.py index d952a527..85f0fdcb 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 9c4596ad..511ac6e4 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 a14db4c9..c51c1f55 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) -- GitLab