tImproved error handling for exchange requests - electrum - Electrum Bitcoin wallet (HTM) git clone https://git.parazyd.org/electrum (DIR) Log (DIR) Files (DIR) Refs (DIR) Submodules --- (DIR) commit 154cdd1697cfa89254eaac0bed73b2634393751a (DIR) parent c0b93c83abc2d6f3077e93fe81cf9ea1cdf051b3 (HTM) Author: Neil Booth <kyuupichan@gmail.com> Date: Mon, 7 Sep 2015 00:23:59 +0900 Improved error handling for exchange requests Diffstat: M plugins/exchange_rate.py | 40 ++++++++++++++++++------------- 1 file changed, 23 insertions(+), 17 deletions(-) --- (DIR) diff --git a/plugins/exchange_rate.py b/plugins/exchange_rate.py t@@ -46,34 +46,40 @@ class ExchangeBase(PrintError): def name(self): return self.__class__.__name__ - def update(self, ccy): - self.print_error("getting fx quotes for", ccy) + def update_safe(self, ccy): try: + self.print_error("getting fx quotes for", ccy) self.quotes = self.get_rates(ccy) self.print_error("received fx quotes") self.sig.emit(SIGNAL('fx_quotes')) - except: - traceback.print_exc(file=sys.stderr) - self.print_error("failed to get fx quotes") + except Exception, e: + self.print_error("failed fx quotes:", e) - def history_ccys(self): - return [] + def update(self, ccy): + t = Thread(target=self.update_safe, args=(ccy,)) + t.setDaemon(True) + t.start() - def set_history(self, ccy, history): - '''History is a map of "%Y-%m-%d" strings to values''' - self.history[ccy] = history - self.print_error("received fx history for", ccy) - self.sig.emit(SIGNAL("fx_history")) + def get_historical_rates_safe(self, ccy): + try: + self.print_error("requesting fx history for", ccy) + self.history[ccy] = self.historical_rates(ccy) + self.print_error("received fx history for", ccy) + self.sig.emit(SIGNAL("fx_history")) + except Exception, e: + self.print_error("failed fx history:", e) def get_historical_rates(self, ccy): result = self.history.get(ccy) if not result and ccy in self.history_ccys(): - self.print_error("requesting historical rates for", ccy) - t = Thread(target=self.historical_rates, args=(ccy,)) + t = Thread(target=self.get_historical_rates_safe, args=(ccy,)) t.setDaemon(True) t.start() return result + def history_ccys(self): + return [] + def historical_rate(self, ccy, d_t): return self.history.get(ccy, {}).get(d_t.strftime('%Y-%m-%d')) t@@ -173,7 +179,7 @@ class CoinDesk(ExchangeBase): query = ('/v1/bpi/historical/close.json?start=%s&end=%s' % (start, end)) json = self.get_json('api.coindesk.com', query) - self.set_history(ccy, json['bpi']) + return json['bpi'] class itBit(ExchangeBase): def get_rates(self, ccy): t@@ -201,8 +207,8 @@ class Winkdex(ExchangeBase): json = self.get_json('winkdex.com', "/api/v0/series?start_time=1342915200") history = json['series'][0]['results'] - self.set_history(ccy, dict([(h['timestamp'][:10], h['price'] / 100.0) - for h in history])) + return dict([(h['timestamp'][:10], h['price'] / 100.0) + for h in history]) class Plugin(BasePlugin, ThreadJob):