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:
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)