trezor: use TREZOR_PATH environment variable to specify device path

master
matejcik 6 years ago
parent 03e7fc48e9
commit 8708b1e16d

@ -106,13 +106,13 @@ class Trezor(interface.Device):
def connect(self): def connect(self):
"""Enumerate and connect to the first available interface.""" """Enumerate and connect to the first available interface."""
transports = self._defs.enumerate_transports() transport = self._defs.find_device()
if not transports: if not transport:
raise interface.NotFoundError('{} not connected'.format(self)) raise interface.NotFoundError('{} not connected'.format(self))
log.debug('transports: %s', transports) log.debug('using transport: %s', transport)
for _ in range(5): # Retry a few times in case of PIN failures for _ in range(5): # Retry a few times in case of PIN failures
connection = self._defs.Client(transport=transports[0], connection = self._defs.Client(transport=transport,
state=self.__class__.cached_state) state=self.__class__.cached_state)
self._override_pin_handler(connection) self._override_pin_handler(connection)
self._override_passphrase_handler(connection) self._override_passphrase_handler(connection)

@ -1,13 +1,27 @@
"""TREZOR-related definitions.""" """TREZOR-related definitions."""
# pylint: disable=unused-import,import-error # pylint: disable=unused-import,import-error
import os
import logging
from trezorlib.client import CallException, PinException from trezorlib.client import CallException, PinException
from trezorlib.client import TrezorClient as Client from trezorlib.client import TrezorClient as Client
from trezorlib.messages import IdentityType, PassphraseAck, PinMatrixAck, PassphraseStateAck from trezorlib.messages import IdentityType, PassphraseAck, PinMatrixAck, PassphraseStateAck
try:
from trezorlib.transport import get_transport
except ImportError:
from trezorlib.device import TrezorDevice from trezorlib.device import TrezorDevice
get_transport = TrezorDevice.find_by_path
log = logging.getLogger(__name__)
def enumerate_transports(): def find_device():
"""Returns all available transports.""" """Selects a transport based on `TREZOR_PATH` env variable.
return TrezorDevice.enumerate() If unset, picks first connected device.
"""
try:
return get_transport(os.environ.get("TREZOR_PATH"))
except Exception as e:
log.debug("Failed to find a Trezor device: %s", e)

Loading…
Cancel
Save