URI: 
       tHandy new class PrintError - electrum - Electrum Bitcoin wallet
  HTML git clone https://git.parazyd.org/electrum
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
       ---
   DIR commit 93b99ebded0bb8e297fcfb12a40f4533c819e69c
   DIR parent 735a9e9a2947c3a3c4ba80d467761925e81b114c
  HTML Author: Neil Booth <kyuupichan@gmail.com>
       Date:   Sun,  6 Sep 2015 21:40:00 +0900
       
       Handy new class PrintError
       
       Saves adding "def print_error" to endless classes.
       
       Diffstat:
         M lib/blockchain.py                   |       5 +----
         M lib/interface.py                    |      12 ++++++------
         M lib/plugins.py                      |      15 ++++++---------
         M lib/util.py                         |      25 ++++++++++++-------------
         M plugins/exchange_rate.py            |      12 ++++++------
       
       5 files changed, 31 insertions(+), 38 deletions(-)
       ---
   DIR diff --git a/lib/blockchain.py b/lib/blockchain.py
       t@@ -22,7 +22,7 @@ import util
        from bitcoin import *
        
        
       -class Blockchain():
       +class Blockchain(util.PrintError):
            '''Manages blockchain headers and their verification'''
            def __init__(self, config, network):
                self.config = config
       t@@ -31,9 +31,6 @@ class Blockchain():
                self.local_height = 0
                self.set_local_height()
        
       -    def print_error(self, *msg):
       -        util.print_error("[blockchain]", *msg)
       -
            def height(self):
                return self.local_height
        
   DIR diff --git a/lib/interface.py b/lib/interface.py
       t@@ -49,7 +49,7 @@ def Connection(server, queue, config_path):
            c.start()
            return c
        
       -class TcpConnection(threading.Thread):
       +class TcpConnection(threading.Thread, util.PrintError):
        
            def __init__(self, server, queue, config_path):
                threading.Thread.__init__(self)
       t@@ -62,8 +62,8 @@ class TcpConnection(threading.Thread):
                self.port = int(self.port)
                self.use_ssl = (self.protocol == 's')
        
       -    def print_error(self, *msg):
       -        util.print_error("[%s]" % self.host, *msg)
       +    def diagnostic_name(self):
       +        return self.host
        
            def check_host_name(self, peercert, name):
                """Simple certificate/host name checker.  Returns True if the
       t@@ -203,7 +203,7 @@ class TcpConnection(threading.Thread):
                    self.print_error("connected")
                self.queue.put((self.server, socket))
        
       -class Interface:
       +class Interface(util.PrintError):
            """The Interface class handles a socket connected to a single remote
            electrum server.  It's exposed API is:
        
       t@@ -229,8 +229,8 @@ class Interface:
                self.last_ping = 0
                self.closed_remotely = False
        
       -    def print_error(self, *msg):
       -        util.print_error("[%s]" % self.host, *msg)
       +    def diagnostic_name(self):
       +        return self.host
        
            def fileno(self):
                # Needed for select
   DIR diff --git a/lib/plugins.py b/lib/plugins.py
       t@@ -24,9 +24,9 @@ import pkgutil
        
        from util import *
        from i18n import _
       -from util import print_error, profiler
       +from util import profiler, PrintError
        
       -class Plugins:
       +class Plugins(PrintError):
        
            @profiler
            def __init__(self, config, is_local, gui_name):
       t@@ -52,9 +52,6 @@ class Plugins:
                    if config.get('use_' + name):
                        self.load_plugin(config, name)
        
       -    def print_error(self, *msg):
       -        print_error("[%s]" % self.__class__.__name__, *msg)
       -
            def get(self, name):
                return self.plugins.get(name)
        
       t@@ -184,7 +181,7 @@ def _run_hook(name, always, *args):
                return results[0]
        
        
       -class BasePlugin:
       +class BasePlugin(PrintError):
        
            def __init__(self, parent, config, name):
                self.parent = parent  # The plugins object
       t@@ -198,6 +195,9 @@ class BasePlugin:
                        l.append((self, getattr(self, k)))
                        hooks[k] = l
        
       +    def diagnostic_name(self):
       +        return self.name
       +
            def close(self):
                # remove self from hooks
                for k in dir(self):
       t@@ -207,9 +207,6 @@ class BasePlugin:
                        hooks[k] = l
                self.parent.close_plugin(self)
        
       -    def print_error(self, *msg):
       -        print_error("[%s]"%self.name, *msg)
       -
            def requires_settings(self):
                return False
        
   DIR diff --git a/lib/util.py b/lib/util.py
       t@@ -25,22 +25,27 @@ class MyEncoder(json.JSONEncoder):
                    return obj.as_dict()
                return super(MyEncoder, self).default(obj)
        
       -class ThreadJob:
       -    """A job that is run periodically from a thread's main loop.  run() is
       -    called from that thread's context.
       -    """
       +class PrintError:
       +    '''A handy base class'''
       +    def diagnostic_name(self):
       +        return self.__class__.__name__
        
            def print_error(self, *msg):
       -        print_error("[%s]" % self.__class__.__name__, *msg)
       +        print_error("[%s]" % self.diagnostic_name(), *msg)
        
            def print_msg(self, *msg):
       -        print_msg("[%s]" % self.__class__.__name__, *msg)
       +        print_msg("[%s]" % self.diagnostic_name(), *msg)
       +
       +class ThreadJob(PrintError):
       +    """A job that is run periodically from a thread's main loop.  run() is
       +    called from that thread's context.
       +    """
        
            def run(self):
                """Called periodically from the thread"""
                pass
        
       -class DaemonThread(threading.Thread):
       +class DaemonThread(threading.Thread, PrintError):
            """ daemon thread that terminates cleanly """
        
            def __init__(self):
       t@@ -84,12 +89,6 @@ class DaemonThread(threading.Thread):
                with self.running_lock:
                    self.running = False
        
       -    def print_error(self, *msg):
       -        print_error("[%s]" % self.__class__.__name__, *msg)
       -
       -    def print_msg(self, *msg):
       -        print_msg("[%s]" % self.__class__.__name__, *msg)
       -
        
        
        is_verbose = False
   DIR diff --git a/plugins/exchange_rate.py b/plugins/exchange_rate.py
       t@@ -14,7 +14,7 @@ from functools import partial
        from electrum.bitcoin import COIN
        from electrum.plugins import BasePlugin, hook
        from electrum.i18n import _
       -from electrum.util import print_error, ThreadJob, timestamp_to_datetime
       +from electrum.util import PrintError, ThreadJob, timestamp_to_datetime
        from electrum.util import format_satoshis
        from electrum_gui.qt.util import *
        from electrum_gui.qt.amountedit import AmountEdit
       t@@ -28,7 +28,7 @@ CCY_PRECISIONS = {'BHD': 3, 'BIF': 0, 'BYR': 0, 'CLF': 4, 'CLP': 0,
                          'VUV': 0, 'XAF': 0, 'XAG': 2, 'XAU': 4, 'XOF': 0,
                          'XPF': 0}
        
       -class ExchangeBase:
       +class ExchangeBase(PrintError):
            def __init__(self, sig):
                self.history = {}
                self.quotes = {}
       t@@ -39,9 +39,6 @@ class ExchangeBase:
                                            headers={'User-Agent' : 'Electrum'})
                return response.json()
        
       -    def print_error(self, *msg):
       -        print_error("[%s]" % self.name(), *msg)
       -
            def name(self):
                return self.__class__.__name__
        
       t@@ -114,11 +111,14 @@ class BitPay(ExchangeBase):
                json = self.get_json('bitpay.com', '/api/rates')
                return dict([(r['code'], Decimal(r['rate'])) for r in json])
        
       -class Blockchain(ExchangeBase):
       +class BlockchainInfo(ExchangeBase):
            def get_rates(self, ccy):
                json = self.get_json('blockchain.info', '/ticker')
                return dict([(r, Decimal(json[r]['15m'])) for r in json])
        
       +    def name(self):
       +        return "Blockchain"
       +
        class BTCChina(ExchangeBase):
            def get_rates(self, ccy):
                json = self.get_json('data.btcchina.com', '/data/ticker')