URI: 
       tDo not use side-effects of import to initialize hardware plugins Call HidTransport in the context of a function - electrum - Electrum Bitcoin wallet
  HTML git clone https://git.parazyd.org/electrum
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
       ---
   DIR commit 55aa29917debfab8d332eb311bb783bd37e809ee
   DIR parent d9021788fae1244cde1374358a91b3cfd55ea548
  HTML Author: ThomasV <thomasv@electrum.org>
       Date:   Mon, 15 Aug 2016 12:28:31 +0200
       
       Do not use side-effects of import to initialize hardware plugins
       Call HidTransport in the context of a function
       
       Diffstat:
         M plugins/keepkey/keepkey.py          |      30 ++++++++++++++++++++++--------
         M plugins/trezor/plugin.py            |       4 ++--
         M plugins/trezor/trezor.py            |      30 ++++++++++++++++++++++--------
       
       3 files changed, 46 insertions(+), 18 deletions(-)
       ---
   DIR diff --git a/plugins/keepkey/keepkey.py b/plugins/keepkey/keepkey.py
       t@@ -11,11 +11,25 @@ class KeepKeyPlugin(TrezorCompatiblePlugin):
            libraries_URL = 'https://github.com/keepkey/python-keepkey'
            minimum_firmware = (1, 0, 0)
            keystore_class = KeepKey_KeyStore
       -    try:
       -        from .client import KeepKeyClient as client_class
       -        import keepkeylib.ckd_public as ckd_public
       -        from keepkeylib.client import types
       -        from keepkeylib.transport_hid import HidTransport, DEVICE_IDS
       -        libraries_available = True
       -    except ImportError:
       -        libraries_available = False
       +
       +    def __init__(self, *args):
       +        try:
       +            import client
       +            import keepkeylib
       +            import keepkeylib.ckd_public
       +            import keepkeylib.transport_hid
       +            self.client_class = client.KeepKeyClient
       +            self.ckd_public = keepkeylib.ckd_public
       +            self.types = keepkeylib.client.types
       +            self.DEVICE_IDS = keepkeylib.transport_hid.DEVICE_IDS
       +            self.libraries_available = True
       +        except ImportError:
       +            self.libraries_available = False
       +        TrezorCompatiblePlugin.__init__(self, *args)
       +
       +    def hid_transport(self, pair):
       +        from keepkeylib.transport_hid import HidTransport
       +        return HidTransport(pair)
       +
       +    def bridge_transport(self, d):
       +        raise NotImplementedError('')
   DIR diff --git a/plugins/trezor/plugin.py b/plugins/trezor/plugin.py
       t@@ -99,7 +99,7 @@ class TrezorCompatiblePlugin(HW_PluginBase):
                    pair = [device.path, None]
        
                try:
       -            return self.HidTransport(pair)
       +            return self.hid_transport(pair)
                except BaseException as e:
                    raise
                    self.print_error("cannot connect at", device.path, str(e))
       t@@ -109,7 +109,7 @@ class TrezorCompatiblePlugin(HW_PluginBase):
                self.print_error("Trying to connect over Trezor Bridge...")
        
                try:
       -            return self.BridgeTransport({'path': hexlify(device.path)})
       +            return self.bridge_transport({'path': hexlify(device.path)})
                except BaseException as e:
                    self.print_error("cannot connect to bridge", str(e))
                    return None
   DIR diff --git a/plugins/trezor/trezor.py b/plugins/trezor/trezor.py
       t@@ -10,12 +10,26 @@ class TrezorPlugin(TrezorCompatiblePlugin):
            libraries_URL = 'https://github.com/trezor/python-trezor'
            minimum_firmware = (1, 3, 3)
            keystore_class = TrezorKeyStore
       -    try:
       -        from .client import TrezorClient as client_class
       -        import trezorlib.ckd_public as ckd_public
       -        from trezorlib.client import types
       -        from trezorlib.transport_hid import HidTransport, DEVICE_IDS
       +
       +    def __init__(self, *args):
       +        try:
       +            import client
       +            import trezorlib
       +            import trezorlib.ckd_public
       +            import trezorlib.transport_hid
       +            self.client_class = client.TrezorClient
       +            self.ckd_public = trezorlib.ckd_public
       +            self.types = trezorlib.client.types
       +            self.DEVICE_IDS = trezorlib.transport_hid.DEVICE_IDS
       +            self.libraries_available = True
       +        except ImportError:
       +            self.libraries_available = False
       +        TrezorCompatiblePlugin.__init__(self, *args)
       +
       +    def hid_transport(self, pair):
       +        from trezorlib.transport_hid import HidTransport
       +        return HidTransport(pair)
       +
       +    def bridge_transport(self, d):
                from trezorlib.transport_bridge import BridgeTransport
       -        libraries_available = True
       -    except ImportError:
       -        libraries_available = False
       +        return BridgeTransport(d)