@@ -342,7 +342,7 @@ if g.prog_name == 'mmgen-tool' and not opt._lock:
args,kwargs = process_args(cmd,cmd_args,cls)
- ret = getattr(cls(),cmd)(*args,**kwargs)
+ ret = getattr(cls(cmdname=cmd),cmd)(*args,**kwargs)
if type(ret).__name__ == 'coroutine':
ret = run_session(ret)
@@ -60,6 +60,9 @@ class tool_api(
wif,addr = tool.randpair()
"""
+ need_proto = True
+ need_addrtype = True
+
def __init__(self):
Initializer - takes no arguments
@@ -40,22 +40,8 @@ class tool_cmd(tool_cmd_base):
mmgen-tool --coin=zec --type=zcash_z randpair
- def __init__(self,proto=None,mmtype=None):
-
- if proto:
- self.proto = proto
- else:
- from ..protocol import init_proto_from_opts
- self.proto = init_proto_from_opts()
- from ..opts import opt
- self.mmtype = MMGenAddrType(
- self.proto,
- mmtype or opt.type or self.proto.dfl_mmtype )
- from ..globalvars import g
- if g.token:
- self.proto.tokensym = g.token.upper()
def _init_generators(self,arg=None):
return generator_data(
@@ -25,9 +25,28 @@ def options_annot_str(l):
class tool_cmd_base:
- pass
+ need_proto = False
+ need_addrtype = False
+ def __init__(self,cmdname=None,proto=None,mmtype=None):
+ if self.need_proto:
+ if proto:
+ self.proto = proto
+ else:
+ from ..protocol import init_proto_from_opts
+ self.proto = init_proto_from_opts()
+ from ..globalvars import g
+ if g.token:
+ self.proto.tokensym = g.token.upper()
+ if self.need_addrtype:
+ from ..opts import opt
+ from ..addr import MMGenAddrType
+ self.mmtype = MMGenAddrType(
+ self.proto,
+ mmtype or opt.type or self.proto.dfl_mmtype )
@property
def user_commands(self):
- return {k:v for k,v in type(self).__dict__.items() if not k.startswith('_')}
+ return {k:v for k,v in type(self).__dict__.items() if callable(v) and not k.startswith('_')}
@@ -25,12 +25,7 @@ from .common import tool_cmd_base,options_annot_str
class tool_cmd(tool_cmd_base):
"utilities for viewing/checking MMGen address and transaction files"
def _file_chksum(self,mmgen_addrfile,objname):
from ..opts import opt
@@ -26,17 +26,7 @@ from ..tw import TwCommon
"tracking wallet commands using the JSON-RPC interface"
async def daemon_version(self):
"print coin daemon version"
@@ -31,12 +31,10 @@ from ..wallet import Wallet
"key, address or subseed generation from an MMGen wallet"
+ if cmdname in ('gen_key','gen_addr'):
+ self.need_proto = True
+ super().__init__(cmdname=cmdname,proto=proto,mmtype=mmtype)
def get_subseed(self,subseed_idx:str,wallet=''):
"get the Seed ID of a single subseed by Subseed Index for default or specified wallet"
@@ -839,7 +839,7 @@ class TestSuiteEthdev(TestSuiteBase,TestSuiteShared):
sid = dfl_sid
from mmgen.tool.wallet import tool_cmd
usr_mmaddrs = [f'{sid}:E:{i}' for i in (11,21)]
- usr_addrs = [tool_cmd(proto=self.proto).gen_addr(addr,dfl_words_file) for addr in usr_mmaddrs]
+ usr_addrs = [tool_cmd(cmdname='gen_addr',proto=self.proto).gen_addr(addr,dfl_words_file) for addr in usr_mmaddrs]
from mmgen.altcoins.eth.contract import TokenResolve
from mmgen.altcoins.eth.tx import EthereumMMGenTX as etx
@@ -896,7 +896,7 @@ async def run_test(cls,gid,cmd_name):
if stdin_input and g.platform == 'win':
msg('Skipping for MSWin - no os.fork()')
continue
- method = getattr(cls(proto=proto,mmtype=mmtype),cmd_name)
+ method = getattr(cls(cmdname=cmd_name,proto=proto,mmtype=mmtype),cmd_name)
cmd_out = await call_method(cls,method,cmd_name,args,out,opts,mmtype,stdin_input)
try: