electrum

Electrum Bitcoin wallet
git clone https://git.parazyd.org/electrum
Log | Files | Refs | Submodules

commit 55aa29917debfab8d332eb311bb783bd37e809ee
parent d9021788fae1244cde1374358a91b3cfd55ea548
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:
Mplugins/keepkey/keepkey.py | 30++++++++++++++++++++++--------
Mplugins/trezor/plugin.py | 4++--
Mplugins/trezor/trezor.py | 30++++++++++++++++++++++--------
3 files changed, 46 insertions(+), 18 deletions(-)

diff --git a/plugins/keepkey/keepkey.py b/plugins/keepkey/keepkey.py @@ -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('') diff --git a/plugins/trezor/plugin.py b/plugins/trezor/plugin.py @@ -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)) @@ -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 diff --git a/plugins/trezor/trezor.py b/plugins/trezor/trezor.py @@ -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)