Browse Source

Do not use side-effects of import to initialize hardware plugins

Call HidTransport in the context of a function
master
ThomasV 9 years ago
parent
commit
55aa29917d
  1. 26
      plugins/keepkey/keepkey.py
  2. 4
      plugins/trezor/plugin.py
  3. 28
      plugins/trezor/trezor.py

26
plugins/keepkey/keepkey.py

@ -11,11 +11,25 @@ class KeepKeyPlugin(TrezorCompatiblePlugin):
libraries_URL = 'https://github.com/keepkey/python-keepkey' libraries_URL = 'https://github.com/keepkey/python-keepkey'
minimum_firmware = (1, 0, 0) minimum_firmware = (1, 0, 0)
keystore_class = KeepKey_KeyStore keystore_class = KeepKey_KeyStore
def __init__(self, *args):
try: try:
from .client import KeepKeyClient as client_class import client
import keepkeylib.ckd_public as ckd_public import keepkeylib
from keepkeylib.client import types import keepkeylib.ckd_public
from keepkeylib.transport_hid import HidTransport, DEVICE_IDS import keepkeylib.transport_hid
libraries_available = True 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: except ImportError:
libraries_available = False 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('')

4
plugins/trezor/plugin.py

@ -99,7 +99,7 @@ class TrezorCompatiblePlugin(HW_PluginBase):
pair = [device.path, None] pair = [device.path, None]
try: try:
return self.HidTransport(pair) return self.hid_transport(pair)
except BaseException as e: except BaseException as e:
raise raise
self.print_error("cannot connect at", device.path, str(e)) 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...") self.print_error("Trying to connect over Trezor Bridge...")
try: try:
return self.BridgeTransport({'path': hexlify(device.path)}) return self.bridge_transport({'path': hexlify(device.path)})
except BaseException as e: except BaseException as e:
self.print_error("cannot connect to bridge", str(e)) self.print_error("cannot connect to bridge", str(e))
return None return None

28
plugins/trezor/trezor.py

@ -10,12 +10,26 @@ class TrezorPlugin(TrezorCompatiblePlugin):
libraries_URL = 'https://github.com/trezor/python-trezor' libraries_URL = 'https://github.com/trezor/python-trezor'
minimum_firmware = (1, 3, 3) minimum_firmware = (1, 3, 3)
keystore_class = TrezorKeyStore keystore_class = TrezorKeyStore
def __init__(self, *args):
try: try:
from .client import TrezorClient as client_class import client
import trezorlib.ckd_public as ckd_public import trezorlib
from trezorlib.client import types import trezorlib.ckd_public
from trezorlib.transport_hid import HidTransport, DEVICE_IDS import trezorlib.transport_hid
from trezorlib.transport_bridge import BridgeTransport self.client_class = client.TrezorClient
libraries_available = True 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: except ImportError:
libraries_available = False 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
return BridgeTransport(d)

Loading…
Cancel
Save