URI: 
       tMerge pull request #4049 from SomberNight/cache_coin_price - electrum - Electrum Bitcoin wallet
  HTML git clone https://git.parazyd.org/electrum
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
       ---
   DIR commit 646044b43122e6523253fabc2702b41101bfc5d7
   DIR parent dc2bb7d81f0da8b290954ba11a27ebeb8f4a07e8
  HTML Author: ThomasV <thomasv@electrum.org>
       Date:   Tue,  6 Mar 2018 18:23:02 +0100
       
       Merge pull request #4049 from SomberNight/cache_coin_price
       
       speed-up wallet.get_full_history: cache coin_price
       Diffstat:
         M lib/wallet.py                       |      11 ++++++++++-
       
       1 file changed, 10 insertions(+), 1 deletion(-)
       ---
   DIR diff --git a/lib/wallet.py b/lib/wallet.py
       t@@ -229,6 +229,8 @@ class Abstract_Wallet(PrintError):
                self.invoices = InvoiceStore(self.storage)
                self.contacts = Contacts(self.storage)
        
       +        self.coin_price_cache = {}
       +
        
            def diagnostic_name(self):
                return self.basename()
       t@@ -1757,8 +1759,14 @@ class Abstract_Wallet(PrintError):
                Acquisition price of a coin.
                This assumes that either all inputs are mine, or no input is mine.
                """
       +        cache_key = "{}:{}:{}".format(str(txid), str(ccy), str(txin_value))
       +        result = self.coin_price_cache.get(cache_key, None)
       +        if result is not None:
       +            return result
                if self.txi.get(txid, {}) != {}:
       -            return self.average_price(txid, price_func, ccy) * txin_value/Decimal(COIN)
       +            result = self.average_price(txid, price_func, ccy) * txin_value/Decimal(COIN)
       +            self.coin_price_cache[cache_key] = result
       +            return result
                else:
                    fiat_value = self.get_fiat_value(txid, ccy)
                    if fiat_value is not None:
       t@@ -1767,6 +1775,7 @@ class Abstract_Wallet(PrintError):
                        p = self.price_at_timestamp(txid, price_func)
                        return p * txin_value/Decimal(COIN)
        
       +
        class Simple_Wallet(Abstract_Wallet):
            # wallet with a single keystore