From 2afddf98149d770f27bff216994763fdea82d7e4 Mon Sep 17 00:00:00 2001 From: Mark Veidemanis Date: Thu, 27 Jan 2022 11:36:17 +0000 Subject: [PATCH] Handle Agora library exceptions properly --- handler/agora.py | 41 +++++++++++++++++++++++++++++------------ 1 file changed, 29 insertions(+), 12 deletions(-) diff --git a/handler/agora.py b/handler/agora.py index 5d1f67a..7393894 100644 --- a/handler/agora.py +++ b/handler/agora.py @@ -15,6 +15,20 @@ from datetime import datetime from settings import settings +def handle_exceptions(func): + def inner_function(*args, **kwargs): + try: + rtrn = func(*args, **kwargs) + except (ReadTimeout, ReadError): + return False + if "success" in rtrn: + if "message" in rtrn: + if not rtrn["success"] and rtrn["message"] == "API ERROR": + return False + + return inner_function + + class Agora(object): """ AgoraDesk API handler. @@ -52,11 +66,9 @@ class Agora(object): self.lc_cheat = LoopingCall(self._update_prices) self.lc_cheat.start(int(settings.Agora.CheatSec)) + @handle_exceptions def wrap_dashboard(self): - try: - dash = self.agora.dashboard_seller() - except ReadTimeout: - return False + dash = self.agora.dashboard_seller() if not dash: return False dash_tmp = {} @@ -79,10 +91,7 @@ class Agora(object): self.dashboard_hook(dash_tmp) # Get recent messages - try: - self.get_recent_messages() - except ReadTimeout: - pass + self.get_recent_messages() return dash_tmp def get_dashboard(self): @@ -150,6 +159,7 @@ class Agora(object): current_trades.append(reference) self.tx.cleanup(current_trades) + @handle_exceptions def dashboard_release_urls(self): """ Get information about our open trades. @@ -183,15 +193,13 @@ class Agora(object): return dash_tmp + @handle_exceptions def get_recent_messages(self, send_irc=True): """ Get recent messages. """ messages_tmp = {} - try: - messages = self.agora.recent_messages() - except ReadError: - return False + messages = self.agora.recent_messages() if not messages["success"]: return False if "data" not in messages["response"]: @@ -230,6 +238,7 @@ class Agora(object): return messages_tmp + @handle_exceptions def enum_ad_ids(self, page=0): ads = self.agora._api_call(api_method="ads", query_values={"page": page}) ads_total = [] @@ -244,6 +253,7 @@ class Agora(object): ads_total.append(ad) return ads_total + @handle_exceptions def enum_ads(self, page=0): ads = self.agora._api_call(api_method="ads", query_values={"page": page}) ads_total = [] @@ -272,6 +282,7 @@ class Agora(object): self.log.debug("Seconds ago date for {date} ^ {now}: {x}", date=date, now=str(now), x=sec_ago_date) return sec_ago_date < 172800 + @handle_exceptions def enum_public_ads(self, coin, currency, page=0): # buy-monero-online, buy-bitcoin-online # Work around Agora weirdness calling it bitcoins @@ -319,6 +330,7 @@ class Agora(object): """ deferToThread(self.update_prices, xmr, btc) + @handle_exceptions def update_prices(self, xmr=True, btc=True): our_ads = self.enum_ads() currencies = [x[3].lower() for x in our_ads] @@ -443,6 +455,7 @@ class Agora(object): self.log.debug("Cheapest ad above our min that is not us: {x}", x=cheapest_ad) return cheapest_ad[3] - 0.001 + @handle_exceptions def nuke_ads(self): """ Delete all of our adverts. @@ -487,6 +500,7 @@ class Agora(object): max_local = max_usd * rates[currency] return (min_local, max_local) + @handle_exceptions def create_ad(self, asset, countrycode, currency): """ Post an ad with the given asset in a country with a given currency. @@ -610,6 +624,7 @@ class Agora(object): # yield False # yield rtrn + @handle_exceptions def strip_duplicate_ads(self): """ Remove duplicate ads. @@ -631,6 +646,7 @@ class Agora(object): actioned.append(rtrn["success"]) return all(actioned) + @handle_exceptions def release_funds(self, contact_id): """ Release funds for a contact_id. @@ -647,6 +663,7 @@ class Agora(object): return rtrn + @handle_exceptions def withdraw_funds(self): """ Withdraw excess funds to our XMR/BTC wallets.