Skip to content
Snippets Groups Projects
Commit 03d04fa2 authored by matograine's avatar matograine
Browse files

[enh] #416 modify wot_lookup error handling

- remove wot_lookup error handling
- create exit_on_http_error helper function to nicely display error messages
- use try/catch statements instead of wot_lookup()
parent a4e2f3d8
No related branches found
No related tags found
No related merge requests found
......@@ -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)
......
......@@ -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)
......@@ -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": []}
......
......@@ -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):
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment