tledger: suppress traceback during device enumeration for locked device - electrum - Electrum Bitcoin wallet HTML git clone https://git.parazyd.org/electrum DIR Log DIR Files DIR Refs DIR Submodules --- DIR commit 3f04520d0f0f5be690075cfa0030375ac2e1b5c6 DIR parent b78cbcffd11364ed4651af1886d507b36bc1b013 HTML Author: SomberNight <somber.night@protonmail.com> Date: Wed, 18 Nov 2020 15:34:47 +0100 ledger: suppress traceback during device enumeration for locked device ledger now gives an error if querying xpub while device is not (unlocked and in bitcoin app). we do query the xpub however, to calc root fingerprint to be used as soft device id. ttrace: I | plugin.DeviceMgr | scanning devices... D | util.profiler | DeviceMgr.scan_devices 3.4463 I | plugin.DeviceMgr | Registering <electrum.plugins.ledger.ledger.Ledger_Client object at 0x0000029DF6B08520> E | gui.qt.installwizard.InstallWizard | Traceback (most recent call last): File "...\electrum\electrum\plugins\ledger\ledger.py", line 225, in checkDevice self.perform_hw1_preflight() File "...\electrum\electrum\plugin.py", line 362, in wrapper return run_in_hwd_thread(partial(func, *args, **kwargs)) File "...\electrum\electrum\plugin.py", line 352, in run_in_hwd_thread return func() File "...\electrum\electrum\plugins\ledger\ledger.py", line 219, in perform_hw1_preflight raise e File "...\electrum\electrum\plugins\ledger\ledger.py", line 179, in perform_hw1_preflight firmwareInfo = self.dongleObject.getFirmwareVersion() File "...\Python38\site-packages\btchip\btchip.py", line 563, in getFirmwareVersion response = self.dongle.exchange(bytearray(apdu)) File "...\Python38\site-packages\btchip\btchipComm.py", line 127, in exchange raise BTChipException("Invalid status %04x" % sw, sw) btchip.btchipException.BTChipException: Exception : Invalid status 6700 The above exception was the direct cause of the following exception: Traceback (most recent call last): File "...\electrum\electrum\base_wizard.py", line 317, in _choose_hw_device device_infos = devmgr.unpaired_device_infos(None, plugin, devices=scanned_devices, File "...\electrum\electrum\plugin.py", line 612, in unpaired_device_infos soft_device_id=client.get_soft_device_id(), File "...\electrum\electrum\plugin.py", line 362, in wrapper return run_in_hwd_thread(partial(func, *args, **kwargs)) File "...\electrum\electrum\plugin.py", line 355, in run_in_hwd_thread return fut.result() File "...\Python38\lib\concurrent\futures\_base.py", line 439, in result return self.__get_result() File "...\Python38\lib\concurrent\futures\_base.py", line 388, in __get_result raise self._exception File "...\Python38\lib\concurrent\futures\thread.py", line 57, in run result = self.fn(*self.args, **self.kwargs) File "...\electrum\electrum\plugins\ledger\ledger.py", line 91, in get_soft_device_id self._soft_device_id = self.request_root_fingerprint_from_device() File "...\electrum\electrum\plugin.py", line 362, in wrapper return run_in_hwd_thread(partial(func, *args, **kwargs)) File "...\electrum\electrum\plugin.py", line 352, in run_in_hwd_thread return func() File "...\electrum\electrum\plugins\hw_wallet\plugin.py", line 259, in request_root_fingerprint_from_device child_of_root_xpub = self.get_xpub("m/0'", xtype='standard') File "...\electrum\electrum\plugin.py", line 362, in wrapper return run_in_hwd_thread(partial(func, *args, **kwargs)) File "...\electrum\electrum\plugin.py", line 352, in run_in_hwd_thread return func() File "...\electrum\electrum\plugins\ledger\ledger.py", line 57, in catch_exception return func(self, *args, **kwargs) File "...\electrum\electrum\plugins\ledger\ledger.py", line 111, in get_xpub self.checkDevice() File "...\electrum\electrum\plugin.py", line 362, in wrapper return run_in_hwd_thread(partial(func, *args, **kwargs)) File "...\electrum\electrum\plugin.py", line 352, in run_in_hwd_thread return func() File "...\electrum\electrum\plugins\ledger\ledger.py", line 228, in checkDevice raise UserFacingException(_("Device not in Bitcoin mode")) from e electrum.util.UserFacingException: Device not in Bitcoin mode W | gui.qt.installwizard.InstallWizard | error getting device infos for ledger: Device not in Bitcoin mode Diffstat: M electrum/plugin.py | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) --- DIR diff --git a/electrum/plugin.py b/electrum/plugin.py t@@ -598,6 +598,10 @@ class DeviceMgr(ThreadJob): continue try: client = self.create_client(device, handler, plugin) + label = client.label() + is_initialized = client.is_initialized() + soft_device_id = client.get_soft_device_id() + model_name = client.device_model_name() except Exception as e: self.logger.error(f'failed to create client for {plugin.name} at {device.path}: {repr(e)}') if include_failing_clients: t@@ -606,11 +610,11 @@ class DeviceMgr(ThreadJob): if not client: continue infos.append(DeviceInfo(device=device, - label=client.label(), - initialized=client.is_initialized(), + label=label, + initialized=is_initialized, plugin_name=plugin.name, - soft_device_id=client.get_soft_device_id(), - model_name=client.device_model_name())) + soft_device_id=soft_device_id, + model_name=model_name)) return infos