URI: 
       texchange_rate: raise for http status so empty hist rate dicts don't get saved - electrum - Electrum Bitcoin wallet
  HTML git clone https://git.parazyd.org/electrum
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
       ---
   DIR commit 7b4bb19b349a6d0b164ef6c5c675bcaecb0eef71
   DIR parent 1f7b56b455142a545386e38fa4ef905a615031e3
  HTML Author: SomberNight <somber.night@protonmail.com>
       Date:   Sun, 10 Mar 2019 07:41:49 +0100
       
       exchange_rate: raise for http status so empty hist rate dicts don't get saved
       
       and if they had already been saved, treat them as if nothing was saved
       
       context: BitcoinAverage started restricting the historical API endpoints.
       tthey now deny unauthenticated requests. :/
       
       Diffstat:
         M electrum/exchange_rate.py           |      38 ++++++++++++++++---------------
       
       1 file changed, 20 insertions(+), 18 deletions(-)
       ---
   DIR diff --git a/electrum/exchange_rate.py b/electrum/exchange_rate.py
       t@@ -9,7 +9,7 @@ import csv
        import decimal
        from decimal import Decimal
        import traceback
       -from typing import Sequence
       +from typing import Sequence, Optional
        
        from aiorpcx.curio import timeout_after, TaskTimeout, TaskGroup
        
       t@@ -45,6 +45,7 @@ class ExchangeBase(PrintError):
                proxy = network.proxy if network else None
                async with make_aiohttp_session(proxy) as session:
                    async with session.get(url) as response:
       +                response.raise_for_status()
                        return await response.text()
        
            async def get_json(self, site, get_string):
       t@@ -54,6 +55,7 @@ class ExchangeBase(PrintError):
                proxy = network.proxy if network else None
                async with make_aiohttp_session(proxy) as session:
                    async with session.get(url) as response:
       +                response.raise_for_status()
                        # set content_type to None to disable checking MIME type
                        return await response.json(content_type=None)
        
       t@@ -76,31 +78,31 @@ class ExchangeBase(PrintError):
                    self.quotes = {}
                self.on_quotes()
        
       -    def read_historical_rates(self, ccy, cache_dir):
       +    def read_historical_rates(self, ccy, cache_dir) -> Optional[dict]:
                filename = os.path.join(cache_dir, self.name() + '_'+ ccy)
       -        if os.path.exists(filename):
       -            timestamp = os.stat(filename).st_mtime
       -            try:
       -                with open(filename, 'r', encoding='utf-8') as f:
       -                    h = json.loads(f.read())
       -                h['timestamp'] = timestamp
       -            except:
       -                h = None
       -        else:
       -            h = None
       -        if h:
       -            self.history[ccy] = h
       -            self.on_history()
       +        if not os.path.exists(filename):
       +            return None
       +        timestamp = os.stat(filename).st_mtime
       +        try:
       +            with open(filename, 'r', encoding='utf-8') as f:
       +                h = json.loads(f.read())
       +        except:
       +            return None
       +        if not h:  # e.g. empty dict
       +            return None
       +        h['timestamp'] = timestamp
       +        self.history[ccy] = h
       +        self.on_history()
                return h
        
            @log_exceptions
            async def get_historical_rates_safe(self, ccy, cache_dir):
                try:
       -            self.print_error("requesting fx history for", ccy)
       +            self.print_error(f"requesting fx history for {ccy}")
                    h = await self.request_history(ccy)
       -            self.print_error("received fx history for", ccy)
       +            self.print_error(f"received fx history for {ccy}")
                except BaseException as e:
       -            self.print_error("failed fx history:", repr(e))
       +            self.print_error(f"failed fx history: {repr(e)}")
                    #traceback.print_exc()
                    return
                filename = os.path.join(cache_dir, self.name() + '_' + ccy)