Browse Source

tx.__init__: clean up initialization code

The MMGen Project 6 months ago
parent
commit
8ffd86c209
2 changed files with 25 additions and 35 deletions
  1. 24 34
      mmgen/tx/__init__.py
  2. 1 1
      mmgen/tx/online.py

+ 24 - 34
mmgen/tx/__init__.py

@@ -12,7 +12,8 @@
 tx.__init__: transaction class initializer
 """
 
-def _base_proto_subclass(clsname, modname, proto):
+def _base_proto_subclass(clsname, modname, kwargs):
+	proto = kwargs['proto']
 	if proto:
 		clsname = ('Token' if proto.tokensym else '') + clsname
 		modname = f'mmgen.proto.{proto.base_proto_coin.lower()}.tx.{modname}'
@@ -22,7 +23,9 @@ def _base_proto_subclass(clsname, modname, proto):
 	return getattr(importlib.import_module(modname), clsname)
 
 def _get_cls_info(clsname, modname, kwargs):
-
+	"""
+	determine cls/mod/proto and pass them to _base_proto_subclass() to get a TX instance
+	"""
 	if 'proto' in kwargs:
 		proto = kwargs['proto']
 	elif 'data' in kwargs:
@@ -58,24 +61,12 @@ def _get_cls_info(clsname, modname, kwargs):
 
 	return (clsname, modname, kwargs)
 
-
-def _get_obj(_clsname, _modname, **kwargs):
-	"""
-	determine cls/mod/proto and pass them to _base_proto_subclass() to get a transaction instance
-	"""
-	clsname, modname, kwargs = _get_cls_info(_clsname, _modname, kwargs)
-
-	return _base_proto_subclass(clsname, modname, kwargs['proto'])(**kwargs)
-
-async def _get_obj_async(_clsname, _modname, **kwargs):
-
-	clsname, modname, kwargs = _get_cls_info(_clsname, _modname, kwargs)
+async def _add_twctl(clsname, modname, kwargs):
 	proto = kwargs['proto']
-
-	# NB: tracking wallet needed to retrieve the 'symbol' and 'decimals' parameters of token addr
-	# (see twctl:import_token()).
-	# No twctl required for the Unsigned and Signed(data=unsigned.__dict__) classes used during
-	# signing.
+	# TwCtl instance required to retrieve the 'symbol' and 'decimals' parameters
+	# of token contract (see twctl:import_token()).
+	# No twctl required by the Unsigned and Signed classes used during signing,
+	# or by the New and Bump classes, which already have a twctl.
 	if proto and proto.tokensym and clsname in (
 			'OnlineSigned',
 			'AutomountOnlineSigned',
@@ -83,22 +74,21 @@ async def _get_obj_async(_clsname, _modname, **kwargs):
 			'AutomountSent'):
 		from ..tw.ctl import TwCtl
 		kwargs['twctl'] = await TwCtl(kwargs['cfg'], proto, no_rpc=True)
+	return (clsname, modname, kwargs)
 
-	return _base_proto_subclass(clsname, modname, proto)(**kwargs)
-
-def _get(clsname, modname):
-	return lambda **kwargs: _get_obj(clsname, modname, **kwargs)
+def _get(clsname, modname, kwargs):
+	return _base_proto_subclass(*_get_cls_info(clsname, modname, kwargs))(**kwargs)
 
-def _get_async(clsname, modname):
-	return lambda **kwargs: _get_obj_async(clsname, modname, **kwargs)
+async def _get_async(clsname, modname, kwargs):
+	return _base_proto_subclass(*(await _add_twctl(*_get_cls_info(clsname, modname, kwargs))))(**kwargs)
 
-BaseTX         = _get('Base',     'base')
-NewTX          = _get('New',      'new')
-NewSwapTX      = _get('NewSwap',  'new_swap')
-BumpTX         = _get('Bump',     'bump')
-UnsignedTX     = _get('Unsigned', 'unsigned')
-SignedTX       = _get('Signed',   'signed')
+BaseTX         = lambda **kwargs: _get('Base',     'base',     kwargs)
+NewTX          = lambda **kwargs: _get('New',      'new',      kwargs)
+NewSwapTX      = lambda **kwargs: _get('NewSwap',  'new_swap', kwargs)
+BumpTX         = lambda **kwargs: _get('Bump',     'bump',     kwargs)
+UnsignedTX     = lambda **kwargs: _get('Unsigned', 'unsigned', kwargs)
+SignedTX       = lambda **kwargs: _get('Signed',   'signed',   kwargs)
 
-CompletedTX    = _get_async('Completed',    'completed')
-OnlineSignedTX = _get_async('OnlineSigned', 'online')
-SentTX         = _get_async('Sent',         'online')
+CompletedTX    = lambda **kwargs: _get_async('Completed',    'completed', kwargs)
+OnlineSignedTX = lambda **kwargs: _get_async('OnlineSigned', 'online',    kwargs)
+SentTX         = lambda **kwargs: _get_async('Sent',         'online',    kwargs)

+ 1 - 1
mmgen/tx/online.py

@@ -24,7 +24,7 @@ class OnlineSigned(Signed):
 	@property
 	def status(self):
 		from . import _base_proto_subclass
-		return _base_proto_subclass('Status', 'status', self.proto)(self)
+		return _base_proto_subclass('Status', 'status', {'proto': self.proto})(self)
 
 	def check_swap_expiry(self):
 		from ..util2 import format_elapsed_hr