1717from abc import ABCMeta
1818from contextlib import contextmanager
1919from collections import OrderedDict
20- from typing import Tuple , Optional
20+ from typing import Dict , List , Tuple , Optional , Type
2121
2222import bitcointx .core
2323import bitcointx .core .script
@@ -39,8 +39,8 @@ class ChainParamsMeta(ABCMeta):
3939 ('WALLET_DISPATCHER' , issubclass ,
4040 bitcointx .wallet .WalletCoinClassDispatcher ),
4141 )
42- _registered_classes = OrderedDict ()
43- _common_base_cls = None
42+ _registered_classes : Dict [ str , 'ChainParamsBase' ] = OrderedDict ()
43+ _common_base_cls : Optional [ 'ChainParamsBase' ] = None
4444
4545 def __new__ (cls , cls_name , bases , dct , name = None ):
4646 """check that the chainparams class uses unique base class
@@ -94,12 +94,12 @@ def __new__(cls, cls_name, bases, dct, name=None):
9494 return cls_instance
9595
9696
97- def find_chain_params (* , name = None ):
97+ def find_chain_params (* , name = None ) -> Optional [ 'ChainParamsBase' ] :
9898 return ChainParamsMeta ._registered_classes .get (name )
9999
100100
101- def get_registered_chain_params ():
102- result = []
101+ def get_registered_chain_params () -> List [ 'ChainParamsBase' ] :
102+ result : List [ ChainParamsBase ] = []
103103 for param_cls in ChainParamsMeta ._registered_classes .values ():
104104 if param_cls not in result :
105105 result .append (param_cls )
@@ -110,7 +110,11 @@ def get_registered_chain_params():
110110class ChainParamsBase (metaclass = ChainParamsMeta ):
111111 """All chain param classes must be a subclass of this class."""
112112
113- def get_confdir_path (self ):
113+ NAME : str
114+ RPC_PORT : int
115+ WALLET_DISPATCHER : Type [bitcointx .wallet .WalletCoinClassDispatcher ]
116+
117+ def get_confdir_path (self ) -> str :
114118 """Return default location for config directory"""
115119 name = self .NAME .split ('/' )[0 ]
116120
@@ -122,12 +126,12 @@ def get_confdir_path(self):
122126
123127 return os .path .expanduser ('~/.{}' .format (name ))
124128
125- def get_config_path (self ):
129+ def get_config_path (self ) -> str :
126130 """Return default location for config file"""
127131 name = self .NAME .split ('/' )[0 ]
128132 return '{}/{}.conf' .format (self .get_confdir_path (), name )
129133
130- def get_datadir_extra_name (self ):
134+ def get_datadir_extra_name (self ) -> str :
131135 """Return appropriate dir name to find data for the chain,
132136 and .cookie file. For mainnet, it will be an empty string -
133137 because data directory is the same as config directory.
@@ -138,11 +142,11 @@ def get_datadir_extra_name(self):
138142 return name_parts [1 ]
139143
140144 @property
141- def name (self ):
145+ def name (self ) -> str :
142146 return self .NAME
143147
144148 @property
145- def readable_name (self ):
149+ def readable_name (self ) -> str :
146150 name_parts = self .NAME .split ('/' )
147151 name_parts [0 ] = name_parts [0 ].capitalize ()
148152 return ' ' .join (name_parts )
@@ -205,6 +209,7 @@ def select_chain_params(params, **kwargs) -> PrevAndNewParams:
205209 params_cls = find_chain_params (name = params )
206210 if params_cls is None :
207211 raise ValueError ('Unknown chain %r' % params )
212+ assert isinstance (params_cls , type )
208213 params = params_cls (** kwargs )
209214 elif isinstance (params , type ):
210215 params = params (** kwargs )
0 commit comments