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)