URI: 
       tutil: Satoshis and Fiat should not be namedtuples - electrum - Electrum Bitcoin wallet
  HTML git clone https://git.parazyd.org/electrum
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
       ---
   DIR commit 923a9c36cbf4b47e5942e80ebb478dcc063e5611
   DIR parent 960855d0aace0417db1e0bedcaa6bcaad1f79e1d
  HTML Author: SomberNight <somber.night@protonmail.com>
       Date:   Tue,  4 Dec 2018 16:44:50 +0100
       
       util: Satoshis and Fiat should not be namedtuples
       
       undo part of 37b009a342b7a815bb31c63d3d496e019d9b1efa
       due to json encoding problems
       
       Diffstat:
         M electrum/util.py                    |      32 ++++++++++++++++++++++++++-----
       
       1 file changed, 27 insertions(+), 5 deletions(-)
       ---
   DIR diff --git a/electrum/util.py b/electrum/util.py
       t@@ -130,15 +130,35 @@ class UserCancelled(Exception):
            '''An exception that is suppressed from the user'''
            pass
        
       -class Satoshis(NamedTuple):
       -    value: int
       +
       +# note: this is not a NamedTuple as then its json encoding cannot be customized
       +class Satoshis(object):
       +    __slots__ = ('value',)
       +
       +    def __new__(cls, value):
       +        self = super(Satoshis, cls).__new__(cls)
       +        self.value = value
       +        return self
       +
       +    def __repr__(self):
       +        return 'Satoshis(%d)'%self.value
        
            def __str__(self):
                return format_satoshis(self.value) + " BTC"
        
       -class Fiat(NamedTuple):
       -    value: Optional[Decimal]
       -    ccy: str
       +
       +# note: this is not a NamedTuple as then its json encoding cannot be customized
       +class Fiat(object):
       +    __slots__ = ('value', 'ccy')
       +
       +    def __new__(cls, value, ccy):
       +        self = super(Fiat, cls).__new__(cls)
       +        self.ccy = ccy
       +        self.value = value
       +        return self
       +
       +    def __repr__(self):
       +        return 'Fiat(%s)'% self.__str__()
        
            def __str__(self):
                if self.value is None or self.value.is_nan():
       t@@ -146,8 +166,10 @@ class Fiat(NamedTuple):
                else:
                    return "{:.2f}".format(self.value) + ' ' + self.ccy
        
       +
        class MyEncoder(json.JSONEncoder):
            def default(self, obj):
       +        # note: this does not get called for namedtuples :(  https://bugs.python.org/issue30343
                from .transaction import Transaction
                if isinstance(obj, Transaction):
                    return obj.as_dict()