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
from trezorlib.device import TrezorDevice
try:
from trezorlib.transport import get_transport
except ImportError:
from trezorlib.device import TrezorDevice
get_transport = TrezorDevice.find_by_path
def enumerate_transports(): log = logging.getLogger(__name__)
"""Returns all available transports."""
return TrezorDevice.enumerate()
def find_device():
"""Selects a transport based on `TREZOR_PATH` env variable.
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