diff --git a/tox.ini b/tox.ini index d50be28..d2578fd 100644 --- a/tox.ini +++ b/tox.ini @@ -1,6 +1,6 @@ [tox] envlist = - py27, + py33, py34, py35, py36, @@ -9,6 +9,7 @@ envlist = deps = -rrequirements.txt pytest + mock commands = python -m compileall trezorlib/ python trezorctl --help diff --git a/trezorlib/tests/unit_tests/test_transport.py b/trezorlib/tests/unit_tests/test_transport.py new file mode 100644 index 0000000..9b5c31a --- /dev/null +++ b/trezorlib/tests/unit_tests/test_transport.py @@ -0,0 +1,13 @@ +import mock + +from trezorlib.transport import all_transports + + +def test_all_transports_without_hid(): + # import all transports, assume this doesn't fail + transports_ref = all_transports() + # also shouldn't fail when bridge transport is missing + with mock.patch.dict('sys.modules', {'trezorlib.transport.bridge': None}): + transports = all_transports() + # there should now be less transports + assert len(transports_ref) > len(transports) diff --git a/trezorlib/transport/__init__.py b/trezorlib/transport/__init__.py index fb6d4aa..b720c2e 100644 --- a/trezorlib/transport/__init__.py +++ b/trezorlib/transport/__init__.py @@ -64,11 +64,32 @@ class Transport(object): def all_transports(): - from .bridge import BridgeTransport - from .hid import HidTransport - from .udp import UdpTransport - from .webusb import WebUsbTransport - return (BridgeTransport, HidTransport, UdpTransport, WebUsbTransport) + transports = [] + try: + from .bridge import BridgeTransport + transports.append(BridgeTransport) + except: + pass + + try: + from .hid import HidTransport + transports.append(HidTransport) + except: + pass + + try: + from .udp import UdpTransport + transports.append(UdpTransport) + except: + pass + + try: + from .webusb import WebUsbTransport + transports.append(WebUsbTransport) + except: + pass + + return transports def enumerate_devices():