From 7b1b235a805c79b6ff3ea4c78b02cbca3f5b6877 Mon Sep 17 00:00:00 2001 From: MMGen Date: Sun, 17 Feb 2019 20:00:08 +0000 Subject: [PATCH] tool.py: new MMGenToolCmd class --- mmgen/main_tool.py | 18 +- mmgen/seed.py | 7 +- mmgen/tool.py | 1089 ++++++++++++++++++++++---------------------- test/test.py | 4 +- 4 files changed, 564 insertions(+), 554 deletions(-) diff --git a/mmgen/main_tool.py b/mmgen/main_tool.py index 265317e6..6c9bb253 100755 --- a/mmgen/main_tool.py +++ b/mmgen/main_tool.py @@ -144,18 +144,16 @@ Type '{pn} help for help on a particular command cmd_args = opts.init(opts_data,add_opts=['hidden_incog_input_params','in_fmt','use_old_ed25519']) if len(cmd_args) < 1: opts.usage() - -Command = cmd_args.pop(0).capitalize() +cmd = cmd_args.pop(0) import mmgen.tool as tool +tc = tool.MMGenToolCmd() -if Command == 'Help' and not cmd_args: tool.usage(None) - -if Command not in tool.cmd_data: - die(1,"'{}': no such command".format(Command.lower())) - -args,kwargs = tool.process_args(Command,cmd_args) - -ret = tool.__dict__[Command](*args,**kwargs) +if cmd == 'help' and not cmd_args: + tool._usage(exit_val=0) +if cmd not in dir(tc): + die(1,"'{}': no such command".format(cmd)) +args,kwargs = tool._process_args(cmd,cmd_args) +ret = getattr(tc,cmd)(*args,**kwargs) sys.exit((1,0)[ret in (None,True)]) # some commands die, some return False on failure diff --git a/mmgen/seed.py b/mmgen/seed.py index 8e40d65e..a2c67e86 100755 --- a/mmgen/seed.py +++ b/mmgen/seed.py @@ -25,7 +25,6 @@ from binascii import hexlify,unhexlify from mmgen.common import * from mmgen.obj import * -from mmgen.filename import * from mmgen.crypto import * pnm = g.proj_name @@ -80,6 +79,7 @@ class SeedSource(MMGenObject): me.ss_in = ss me.op = ('conv','pwchg_new')[bool(passchg)] elif fn or opt.hidden_incog_input_params: + from mmgen.filename import Filename if fn: f = Filename(fn) else: @@ -1026,12 +1026,13 @@ harder to find, you're advised to choose a much larger file size than this. if fsize >= min_fsize: break msg('File size must be an integer no less than {}'.format(min_fsize)) - from mmgen.tool import Rand2file # threaded routine - Rand2file(fn,str(fsize)) + from mmgen.tool import MMGenToolCmd + MMGenToolCmd().rand2file(fn,str(fsize)) # threaded routine TODO: check safe check_offset = False else: die(1,'Exiting at user request') + from mmgen.filename import Filename f = Filename(fn,ftype=type(self),write=True) dmsg('{} data len {}, offset {}'.format(capfirst(self.desc),d.target_data_len,d.hincog_offset)) diff --git a/mmgen/tool.py b/mmgen/tool.py index d645c752..d4cb8dac 100755 --- a/mmgen/tool.py +++ b/mmgen/tool.py @@ -30,123 +30,120 @@ from mmgen.tx import * from mmgen.addr import * pnm = g.proj_name - cmd_data = OrderedDict([ - ('Help', [' [str]']), - ('Usage', [' [str]']), - ('Strtob58', [' [str-]','pad [int=0]']), - ('B58tostr', [' [str-]']), - ('Hextob58', [' [str-]','pad [int=0]']), - ('Hextob58chk', [' [str-]']), - ('B58tohex', [' [str-]','pad [int=0]']), - ('B58chktohex', [' [str-]']), - ('B58randenc', []), - ('B32tohex', [' [str-]','pad [int=0]']), - ('Hextob32', [' [str-]','pad [int=0]']), - ('Randhex', ['nbytes [int=32]']), - ('Id8', [' [str]']), - ('Id6', [' [str]']), - ('Hash160', [' [str-]']), - ('Hash256', [' [str]', # TODO handle stdin + ('help', [' [str]']), + ('usage', [' [str]']), + ('strtob58', [' [str-]','pad [int=0]']), + ('b58tostr', [' [str-]']), + ('hextob58', [' [str-]','pad [int=0]']), + ('hextob58chk', [' [str-]']), + ('b58tohex', [' [str-]','pad [int=0]']), + ('b58chktohex', [' [str-]']), + ('b58randenc', []), + ('b32tohex', [' [str-]','pad [int=0]']), + ('hextob32', [' [str-]','pad [int=0]']), + ('randhex', ['nbytes [int=32]']), + ('id8', [' [str]']), + ('id6', [' [str]']), + ('hash160', [' [str-]']), + ('hash256', [' [str]', # TODO handle stdin 'hex_input [bool=False]','file_input [bool=False]']), - ('Str2id6', [' [str-]']), - ('Hexdump', [' [str]', 'cols [int=8]', 'line_nums [bool=True]']), - ('Unhexdump', [' [str]']), - ('Hexreverse', [' [str-]']), - ('Hexlify', [' [str-]']), - ('Rand2file', [' [str]',' [str]','threads [int=4]','silent [bool=False]']), + ('str2id6', [' [str-]']), + ('hexdump', [' [str]', 'cols [int=8]', 'line_nums [bool=True]']), + ('unhexdump', [' [str]']), + ('hexreverse', [' [str-]']), + ('hexlify', [' [str-]']), + ('rand2file', [' [str]',' [str]','threads [int=4]','silent [bool=False]']), - ('Randwif', []), - ('Randpair', []), - ('Hex2wif', [' [str-]']), - ('Wif2hex', [' [str-]']), - ('Wif2addr', [' [str-]']), - ('Wif2segwit_pair',[' [str-]']), - ('Pubhash2addr', [' [str-]']), - ('Addr2hexaddr', [' [str-]']), - ('Privhex2addr', [' [str-]']), - ('Privhex2pubhex',[' [str-]']), - ('Pubhex2addr', [' [str-]']), # new - ('Pubhex2redeem_script',[' [str-]']), # new - ('Wif2redeem_script', [' [str-]']), # new + ('randwif', []), + ('randpair', []), + ('hex2wif', [' [str-]']), + ('wif2hex', [' [str-]']), + ('wif2addr', [' [str-]']), + ('wif2segwit_pair',[' [str-]']), + ('pubhash2addr', [' [str-]']), + ('addr2hexaddr', [' [str-]']), + ('privhex2addr', [' [str-]']), + ('privhex2pubhex',[' [str-]']), + ('pubhex2addr', [' [str-]']), # new + ('pubhex2redeem_script',[' [str-]']), # new + ('wif2redeem_script', [' [str-]']), # new - ('Hex2mn', [' [str-]',"wordlist [str='electrum']"]), - ('Mn2hex', [' [str-]', "wordlist [str='electrum']"]), - ('Mn_rand128', ["wordlist [str='electrum']"]), - ('Mn_rand192', ["wordlist [str='electrum']"]), - ('Mn_rand256', ["wordlist [str='electrum']"]), - ('Mn_stats', ["wordlist [str='electrum']"]), - ('Mn_printlist', ["wordlist [str='electrum']"]), + ('hex2mn', [' [str-]',"wordlist [str='electrum']"]), + ('mn2hex', [' [str-]', "wordlist [str='electrum']"]), + ('mn_rand128', ["wordlist [str='electrum']"]), + ('mn_rand192', ["wordlist [str='electrum']"]), + ('mn_rand256', ["wordlist [str='electrum']"]), + ('mn_stats', ["wordlist [str='electrum']"]), + ('mn_printlist', ["wordlist [str='electrum']"]), - ('Gen_addr', ['<{} ID> [str]'.format(pnm),"wallet [str='']"]), - ('Gen_key', ['<{} ID> [str]'.format(pnm),"wallet [str='']"]), + ('gen_addr', ['<{} ID> [str]'.format(pnm),"wallet [str='']"]), + ('gen_key', ['<{} ID> [str]'.format(pnm),"wallet [str='']"]), - ('Listaddress',['<{} address> [str]'.format(pnm),'minconf [int=1]','pager [bool=False]','showempty [bool=True]','showbtcaddr [bool=True]','show_age [bool=False]','show_days [bool=True]']), - ('Listaddresses',["addrs [str='']",'minconf [int=1]','showempty [bool=False]','pager [bool=False]','showbtcaddrs [bool=True]','all_labels [bool=False]',"sort [str=''] (options: reverse, age)",'show_age [bool=False]','show_days [bool=True]']), - ('Getbalance', ['minconf [int=1]','quiet [bool=False]','pager [bool=False]']), - ('Txview', ['<{} TX file(s)> [str]'.format(pnm),'pager [bool=False]','terse [bool=False]',"sort [str='mtime'] (options: ctime, atime)",'MARGS']), - ('Twview', ["sort [str='age']",'reverse [bool=False]','show_days [bool=True]','show_mmid [bool=True]','minconf [int=1]','wide [bool=False]','pager [bool=False]']), + ('listaddress',['<{} address> [str]'.format(pnm),'minconf [int=1]','pager [bool=False]','showempty [bool=True]','showbtcaddr [bool=True]','show_age [bool=False]','show_days [bool=True]']), + ('listaddresses',["addrs [str='']",'minconf [int=1]','showempty [bool=False]','pager [bool=False]','showbtcaddrs [bool=True]','all_labels [bool=False]',"sort [str=''] (options: reverse, age)",'show_age [bool=False]','show_days [bool=True]']), + ('getbalance', ['minconf [int=1]','quiet [bool=False]','pager [bool=False]']), + ('txview', ['<{} TX file(s)> [str]'.format(pnm),'pager [bool=False]','terse [bool=False]',"sort [str='mtime'] (options: ctime, atime)",'MARGS']), + ('twview', ["sort [str='age']",'reverse [bool=False]','show_days [bool=True]','show_mmid [bool=True]','minconf [int=1]','wide [bool=False]','pager [bool=False]']), - ('Add_label', ['<{} or coin address> [str]'.format(pnm),'