@ -39,7 +39,7 @@ from .simple_config import SimpleConfig
from . logging import get_logger , Logger
if TYPE_CHECKING :
from . plugins . hw_wallet import HW_PluginBase , HardwareClientBase
from . plugins . hw_wallet import HW_PluginBase , HardwareClientBase , HardwareHandlerBase
from . keystore import Hardware_KeyStore
@ -386,7 +386,8 @@ class DeviceMgr(ThreadJob):
def register_enumerate_func ( self , func ) :
self . enumerate_func . add ( func )
def create_client ( self , device : ' Device ' , handler , plugin : ' HW_PluginBase ' ) - > Optional [ ' HardwareClientBase ' ] :
def create_client ( self , device : ' Device ' , handler : Optional [ ' HardwareHandlerBase ' ] ,
plugin : ' HW_PluginBase ' ) - > Optional [ ' HardwareClientBase ' ] :
# Get from cache first
client = self . client_lookup ( device . id_ )
if client :
@ -447,7 +448,8 @@ class DeviceMgr(ThreadJob):
self . scan_devices ( )
return self . client_lookup ( id_ )
def client_for_keystore ( self , plugin : ' HW_PluginBase ' , handler , keystore : ' Hardware_KeyStore ' ,
def client_for_keystore ( self , plugin : ' HW_PluginBase ' , handler : Optional [ ' HardwareHandlerBase ' ] ,
keystore : ' Hardware_KeyStore ' ,
force_pair : bool ) - > Optional [ ' HardwareClientBase ' ] :
self . logger . info ( " getting client for keystore " )
if handler is None :
@ -468,7 +470,7 @@ class DeviceMgr(ThreadJob):
self . logger . info ( " end client for keystore " )
return client
def client_by_xpub ( self , plugin : ' HW_PluginBase ' , xpub , handler ,
def client_by_xpub ( self , plugin : ' HW_PluginBase ' , xpub , handler : ' HardwareHandlerBase ' ,
devices : Iterable [ ' Device ' ] ) - > Optional [ ' HardwareClientBase ' ] :
_id = self . xpub_id ( xpub )
client = self . client_lookup ( _id )
@ -482,7 +484,7 @@ class DeviceMgr(ThreadJob):
if device . id_ == _id :
return self . create_client ( device , handler , plugin )
def force_pair_xpub ( self , plugin : ' HW_PluginBase ' , handler ,
def force_pair_xpub ( self , plugin : ' HW_PluginBase ' , handler : ' HardwareHandlerBase ' ,
info : ' DeviceInfo ' , xpub , derivation ) - > Optional [ ' HardwareClientBase ' ] :
# The wallet has not been previously paired, so let the user
# choose an unpaired device and compare its first address.
@ -510,7 +512,8 @@ class DeviceMgr(ThreadJob):
' its seed (and passphrase, if any). Otherwise all bitcoins you '
' receive will be unspendable. ' ) . format ( plugin . device ) )
def unpaired_device_infos ( self , handler , plugin : ' HW_PluginBase ' , devices : List [ ' Device ' ] = None ,
def unpaired_device_infos ( self , handler : Optional [ ' HardwareHandlerBase ' ] , plugin : ' HW_PluginBase ' ,
devices : List [ ' Device ' ] = None ,
include_failing_clients = False ) - > List [ ' DeviceInfo ' ] :
''' Returns a list of DeviceInfo objects: one for each connected,
unpaired device accepted by the plugin . '''
@ -539,7 +542,7 @@ class DeviceMgr(ThreadJob):
return infos
def select_device ( self , plugin : ' HW_PluginBase ' , handler ,
def select_device ( self , plugin : ' HW_PluginBase ' , handler : ' HardwareHandlerBase ' ,
keystore : ' Hardware_KeyStore ' , devices : List [ ' Device ' ] = None ) - > ' DeviceInfo ' :
''' Ask the user to select a device to use if there is more than one,
and return the DeviceInfo for the device . '''
@ -581,8 +584,9 @@ class DeviceMgr(ThreadJob):
info = infos [ c ]
# save new label
keystore . set_label ( info . label )
if handler . win . wallet is not None :
handler . win . wallet . save_keystore ( )
wallet = handler . get_wallet ( )
if wallet is not None :
wallet . save_keystore ( )
return info
def _scan_devices_with_hid ( self ) - > List [ ' Device ' ] :