diff --git a/silkaj/idty_tools.py b/silkaj/idty_tools.py index e812cea188a2f87093b364e33693753774a4773c..92866a34c2251f30d1d8abb28c14a399fc5bafca 100644 --- a/silkaj/idty_tools.py +++ b/silkaj/idty_tools.py @@ -15,6 +15,7 @@ import shutil import sys +import urllib import click import pendulum @@ -55,12 +56,14 @@ def check_many_identities(idty, doc_type="Identity"): Returns True if the same identity is found, False if not. """ error_no_identical_id = f"{doc_type} document does not match any valid identity." - # if no id, exit is a bit rough... + try: results_pubkey = wt.wot_lookup(idty.pubkey) results_uid = wt.wot_lookup(idty.uid) - except SystemExit as e: - sys.exit(f"{error_no_identical_id} Error: {e}") + except urllib.error.HTTPError as e: + sys.exit( + f"{error_no_identical_id}\nuid: {idty.uid}\npubkey: {display_pubkey_and_checksum(idty.pubkey)}" + ) # get all matching identities lookup_ids = merge_ids_lists(results_pubkey, results_uid, idty.currency) diff --git a/silkaj/network_tools.py b/silkaj/network_tools.py index db1228693e35dc2c526a300d9d422e2bfba5d250..77427a3b27d756b2967dd21e3b4efcc4da1aea11 100644 --- a/silkaj/network_tools.py +++ b/silkaj/network_tools.py @@ -91,3 +91,14 @@ def send_document(bma_path, document): print(f"{doc_name} successfully sent") except urllib.error.HTTPError as e: sys.exit(f"Error while publishing {doc_name.lower()}: {e}") + + +def exit_on_http_error(error, error_codes, message): + """ + Nicely displays a message on an expected error code given in a list. + Else, displays the HTTP error message. + """ + for code in error_codes: + if error.code == code: + sys.exit(message) + sys.exit(error) diff --git a/silkaj/wot.py b/silkaj/wot.py index d66bba6bbd2160db48c15ff10ceafb7e060aaf95..1d1957eaed68d4aa8a8b17c9ab8d5e58d2a83602 100644 --- a/silkaj/wot.py +++ b/silkaj/wot.py @@ -13,6 +13,8 @@ # You should have received a copy of the GNU Affero General Public License # along with Silkaj. If not, see <https://www.gnu.org/licenses/>. +import sys +import urllib from collections import OrderedDict import click @@ -25,7 +27,7 @@ from silkaj import wot_tools as wt from silkaj.blockchain_tools import BlockchainParams from silkaj.constants import DATE from silkaj.crypto_tools import is_pubkey_and_check -from silkaj.network_tools import ClientInstance +from silkaj.network_tools import ClientInstance, exit_on_http_error from silkaj.tools import message_exit from silkaj.tui import display_pubkey_and_checksum @@ -145,7 +147,11 @@ def id_pubkey_correspondence(uid_pubkey): if checked_pubkey: uid_pubkey = checked_pubkey - lookups = wt.wot_lookup(uid_pubkey) + try: + lookups = wt.wot_lookup(uid_pubkey) + except urllib.error.HTTPError as e: + exit_on_http_error(e, [404], f"No identity found for {uid_pubkey}") + content = f"Public keys or user id found matching '{uid_pubkey}':\n" for lookup in lookups: for identity in lookup["uids"]: @@ -161,7 +167,11 @@ def choose_identity(pubkey_uid): If there is one uid, returns it If there is multiple uids, prompt a selector """ - lookups = wt.wot_lookup(pubkey_uid) + + try: + lookups = wt.wot_lookup(pubkey_uid) + except urllib.error.HTTPError as e: + exit_on_http_error(e, [404], f"No identity found for {pubkey_uid}") # Generate table containing the choices identities_choices = {"id": [], "uid": [], "pubkey": [], "timestamp": []} diff --git a/silkaj/wot_tools.py b/silkaj/wot_tools.py index 958e6d8b09ae76c86cd33c571bb6c680dbaec24f..17a54d56bb277fa494888b7b444c77417fbc8282 100644 --- a/silkaj/wot_tools.py +++ b/silkaj/wot_tools.py @@ -14,7 +14,6 @@ # along with Silkaj. If not, see <https://www.gnu.org/licenses/>. import sys -import urllib from duniterpy.api.bma import wot from duniterpy.api.errors import DuniterError @@ -53,13 +52,8 @@ def wot_lookup(identifier): if one identity found """ client = ClientInstance().client - try: - results = client(wot.lookup, identifier) - return results["results"] - except DuniterError as e: - sys.exit(e.message) - except urllib.error.HTTPError as e: - sys.exit(e) + results = client(wot.lookup, identifier) + return results["results"] def identities_from_pubkeys(pubkeys, uids):