opts.init() -> Config()

This commit is contained in:
The MMGen Project 2023-04-04 16:04:10 +00:00
commit 9e1935ad19
Signed by: mmgen
GPG key ID: 3F8B1861E32B7DA2
44 changed files with 126 additions and 93 deletions

View file

@ -14,7 +14,7 @@ examples.halving-calculator.py: Demonstrate use of the MMGen asyncio/aiohttp JSO
import time
import mmgen.opts as opts
from mmgen.cfg import Config
from mmgen.util import async_run
opts_data = {
@ -39,7 +39,7 @@ mmgen-node-tools repository.
}
}
cfg = opts.init(opts_data)
cfg = Config(opts_data=opts_data)
def date(t):
return '{}-{:02}-{:02} {:02}:{:02}:{:02}'.format(*time.gmtime(t)[:6])

View file

@ -791,8 +791,7 @@ if __name__ == '__main__':
}
}
from mmgen.opts import init
cfg = init( opts_data, need_amt=False )
cfg = Config( opts_data=opts_data, need_amt=False )
msg('Checking CoinInfo WIF/P2PKH/P2SH version numbers and trust levels against protocol.py')
CoinInfo.verify_core_coin_data( cfg, cfg.quiet, cfg.verbose )

View file

@ -402,3 +402,38 @@ class Config(Lockable):
'mainnet': (self.data_dir_root,),
}[self.network] ))
return self._data_dir
def __init__(
self,
cfg = None,
opts_data = None,
add_opts = None,
init_opts = None,
opt_filter = None,
parse_only = False,
parsed_opts = None,
need_proto = True,
need_amt = True,
do_post_init = False,
process_opts = False ):
if opts_data or parsed_opts or process_opts:
import mmgen.opts as opts
self._opts = opts
opts.init(
cfg = self,
opts_data = opts_data,
add_opts = add_opts,
init_opts = init_opts,
opt_filter = opt_filter,
parse_only = parse_only,
parsed_opts = parsed_opts,
need_proto = need_proto,
need_amt = need_amt,
do_post_init = do_post_init )
if do_post_init:
self._post_init = opts.post_init

View file

@ -20,7 +20,7 @@
contrib.license: Copyright notice and text of GPLv3
"""
from ..globalvars import gc
from ..cfg import gc
warning = f"""
{gc.proj_name} Copyright (C) {gc.Cdates} by {gc.author} {gc.email}. This

View file

@ -123,13 +123,12 @@ def get_seed_file(cfg,nargs,wallets=None,invoked_as=None):
wd_from_opt = bool(cfg.hidden_incog_input_params or cfg.in_fmt) # have wallet data from opt?
import mmgen.opts as opts
if len(wallets) + (wd_from_opt or bool(wf)) < nargs:
if not wf:
msg('No default wallet found, and no other seed source was specified')
opts.usage()
cfg._opts.usage()
elif len(wallets) > nargs:
opts.usage()
cfg._opts.usage()
elif len(wallets) == nargs and wf and invoked_as != 'gen':
cfg._util.qmsg('Warning: overriding default wallet with user-supplied wallet')

View file

@ -126,7 +126,7 @@ FMT CODES:
}
}
cfg = opts.init(opts_data,opt_filter=opt_filter,need_amt=False)
cfg = Config( opts_data=opts_data, opt_filter=opt_filter, need_amt=False )
proto = cfg._proto
@ -136,7 +136,7 @@ addr_type = MMGenAddrType(
errmsg = f'{cfg.type!r}: invalid parameter for --type option' )
if len(cfg._args) < 1:
opts.usage()
cfg._opts.usage()
if cfg.keygen_backend:
from .keygen import check_backend

View file

@ -186,7 +186,7 @@ async def main():
del twctl
cfg = opts.init(opts_data,need_amt=False)
cfg = Config( opts_data=opts_data, need_amt=False )
proto = cfg._proto

View file

@ -25,7 +25,7 @@ from subprocess import run,PIPE,DEVNULL
from collections import namedtuple
from stat import *
import mmgen.opts as opts
from .cfg import Config
from .util import msg,msg_r,ymsg,rmsg,gmsg,bmsg,die,suf,fmt_list,async_run,exit_if_mswin
from .color import yellow,red,orange
@ -120,8 +120,8 @@ This command is currently available only on Linux-based platforms.
}
}
cfg = opts.init(
opts_data,
cfg = Config(
opts_data = opts_data,
add_opts = ['outdir','passwd_file'], # in _set_ok, so must be set
init_opts = {
'quiet': True,
@ -433,7 +433,7 @@ async def do_loop():
n += 1
if len(cmd_args) not in (0,1):
opts.usage()
cfg._opts.usage()
if len(cmd_args) == 1:
cmd = cmd_args[0]

View file

@ -14,6 +14,7 @@ mmgen-msg: Message signing operations for the MMGen suite
import sys
import mmgen.opts as opts
from .cfg import Config
from .base_obj import AsyncInit
from .util import msg,suf,async_run
from .msg import (
@ -203,12 +204,12 @@ $ mmgen-msg verify signatures.json
}
}
cfg = opts.init(opts_data,need_amt=False)
cfg = Config( opts_data=opts_data, need_amt=False )
cmd_args = cfg._args
if len(cmd_args) < 2:
opts.usage()
cfg._opts.usage()
op = cmd_args.pop(0)
@ -218,15 +219,15 @@ if cfg.msghash_type and op != 'create':
async def main():
if op == 'create':
if len(cmd_args) < 2:
opts.usage()
cfg._opts.usage()
MsgOps.create( cmd_args[0], ' '.join(cmd_args[1:]) )
elif op == 'sign':
if len(cmd_args) < 1:
opts.usage()
cfg._opts.usage()
await MsgOps.sign( cmd_args[0], cmd_args[1:] )
elif op in ('verify','export'):
if len(cmd_args) not in (1,2):
opts.usage()
cfg._opts.usage()
await getattr(MsgOps,op)( cmd_args[0], cmd_args[1] if len(cmd_args) == 2 else None )
else:
die(1,f'{op!r}: unrecognized operation')

View file

@ -134,9 +134,10 @@ FMT CODES:
}
}
cfg = opts.init(opts_data)
cfg = Config(opts_data=opts_data)
if len(cfg._args) < 2: opts.usage()
if len(cfg._args) < 2:
cfg._opts.usage()
pw_idxs = AddrIdxList(fmt_str=cfg._args.pop())

View file

@ -57,7 +57,7 @@ opts_data = {
}
}
cfg = opts.init(opts_data)
cfg = Config(opts_data=opts_data)
cmd_args = cfg._args
@ -77,7 +77,7 @@ def check_num_args():
die(1,m.format(args,'many','more',amax))
if not cmd_args:
opts.usage()
cfg._opts.usage()
elif cmd_args[0] not in MMGenRegtest.usr_cmds:
die(1,f'{cmd_args[0]!r}: invalid command')
elif cmd_args[0] not in ('cli','wallet_cli','balances'):

View file

@ -110,10 +110,10 @@ def print_shares_info():
out += f'{n:3}: {s.sid}\n'
cfg._util.qmsg(out)
cfg = opts.init(opts_data)
cfg = Config(opts_data=opts_data)
if len(cfg._args) + bool(cfg.hidden_incog_input_params) < 2:
opts.usage()
cfg._opts.usage()
if cfg.master_share:
master_idx = MasterShareIdx(cfg.master_share)

View file

@ -86,7 +86,7 @@ transaction reconfirmed before the timelock expires. Use at your own risk.
}
}
cfg = opts.init(opts_data,need_amt=False)
cfg = Config( opts_data=opts_data, need_amt=False )
proto = cfg._proto

View file

@ -347,7 +347,8 @@ def get_mod_cls(modname):
if gc.prog_name == 'mmgen-tool':
po = opts.init( opts_data, parse_only=True )
cfg = Config( opts_data=opts_data, parse_only=True )
po = cfg._parsed_opts
if po.user_opts.get('list'):
def gen():
@ -362,7 +363,7 @@ if gc.prog_name == 'mmgen-tool':
sys.exit(0)
if len(po.cmd_args) < 1:
opts.usage()
cfg._opts.usage()
cmd = po.cmd_args[0]
@ -371,11 +372,12 @@ if gc.prog_name == 'mmgen-tool':
if not cls:
die(1,f'{cmd!r}: no such command')
cfg = opts.init(
cfg = Config(
opts_data,
parsed_opts = po,
need_proto = cls.need_proto,
init_opts = {'rpc_backend':'aiohttp'} if cmd == 'twimport' else None )
init_opts = {'rpc_backend':'aiohttp'} if cmd == 'twimport' else None,
process_opts = True )
cmd,*args = cfg._args

View file

@ -103,7 +103,7 @@ FMT CODES:
}
}
cfg = opts.init(opts_data)
cfg = Config(opts_data=opts_data)
tx_file = cfg._args.pop(0)

View file

@ -79,7 +79,7 @@ opts_data = {
}
}
cfg = opts.init(opts_data)
cfg = Config(opts_data=opts_data)
async def main():

View file

@ -123,7 +123,7 @@ FMT CODES:
}
}
cfg = opts.init(opts_data)
cfg = Config(opts_data=opts_data)
from .tx import NewTX,OnlineSignedTX
from .tx.sign import txsign,get_seed_files,get_keyaddrlist,get_keylist

View file

@ -42,14 +42,14 @@ opts_data = {
}
}
cfg = opts.init(opts_data)
cfg = Config(opts_data=opts_data)
if len(cfg._args) == 1:
infile = cfg._args[0]
from .fileutil import check_infile
check_infile(infile)
else:
opts.usage()
cfg._opts.usage()
if not cfg.status:
from .ui import do_license_msg

View file

@ -99,12 +99,12 @@ FMT CODES:
}
}
cfg = opts.init(opts_data)
cfg = Config(opts_data=opts_data)
infiles = cfg._args
if not infiles:
opts.usage()
cfg._opts.usage()
from .fileutil import check_infile
for i in infiles:

View file

@ -145,7 +145,7 @@ FMT CODES:
}
}
cfg = opts.init(opts_data,opt_filter=opt_filter,need_proto=False)
cfg = Config( opts_data=opts_data, opt_filter=opt_filter, need_proto=False )
cmd_args = cfg._args
@ -166,17 +166,17 @@ elif invoked_as == 'seedsplit':
m2 = 'To generate a master share, omit the seed split specifier.'
die(1,m1+' '+m2)
elif not sss:
opts.usage()
cfg._opts.usage()
elif master_share:
sss = SeedSplitSpecifier('1:2')
else:
opts.usage()
cfg._opts.usage()
from .fileutil import check_infile,get_seed_file
if cmd_args:
if invoked_as == 'gen' or len(cmd_args) > 1:
opts.usage()
cfg._opts.usage()
check_infile(cmd_args[0])
sf = get_seed_file(cfg,nargs,invoked_as=invoked_as)

View file

@ -225,12 +225,12 @@ $ mmgen-xmrwallet --pager txview *XMR*.sigtx
}
}
cfg = opts.init(opts_data)
cfg = Config(opts_data=opts_data)
cmd_args = cfg._args
if len(cmd_args) < 2:
opts.usage()
cfg._opts.usage()
op = cmd_args.pop(0)
infile = cmd_args.pop(0)
@ -242,17 +242,17 @@ wallets = spec = ''
if op == 'relay':
if len(cmd_args) != 0:
opts.usage()
cfg._opts.usage()
elif op == 'txview':
infile = [infile] + cmd_args
elif op in ('create','sync','list'):
if len(cmd_args) not in (0,1):
opts.usage()
cfg._opts.usage()
if cmd_args:
wallets = cmd_args[0]
elif op in ('new','transfer','sweep','label'):
if len(cmd_args) != 1:
opts.usage()
cfg._opts.usage()
spec = cmd_args[0]
ua = namedtuple('uargs',[ 'op', 'infile', 'wallets', 'spec' ])

View file

@ -281,6 +281,7 @@ opts_data_dfl = {
}
def init(
cfg,
opts_data = None,
add_opts = None,
init_opts = None,
@ -309,9 +310,8 @@ def init(
po.user_opts[uopt] = val
if parse_only and not any(k in po.user_opts for k in ('version','help','longhelp')):
return po
cfg = Config()
cfg._parsed_opts = po
return
if cfg.debug_opts: # TODO: this does nothing
opt_preproc_debug(po)
@ -444,8 +444,6 @@ def init(
else:
delete_data(opts_data)
return cfg
def check_usr_opts(cfg,usr_opts): # Raises an exception if any check fails
def opt_splits(val,sep,n,desc):

View file

@ -35,10 +35,10 @@ class tool_api(
Example:
from mmgen.tool.api import tool_api
from mmgen.opts import init
from mmgen.cfg import Config
# Initialize a tool API instance:
tool = tool_api(init())
tool = tool_api(Config())
# Set the coin and network:
tool.init_coin('btc','mainnet')
@ -71,10 +71,7 @@ class tool_api(
Initializer - takes no arguments
"""
type(cfg)._reset_ok += ('usr_randchars',)
if not cfg._lock:
import mmgen.opts as opts
opts.init()
super().__init__(cfg)
super().__init__(cfg=cfg)
def init_coin(self,coinsym,network):
"""

View file

@ -17,7 +17,7 @@ opts_data = {
}
}
cfg = opts.init(opts_data)
cfg = Config(opts_data=opts_data)
from mmgen.fileutil import get_lines_from_file
lines = get_lines_from_file( cfg, cfg._args[0] )

View file

@ -256,7 +256,7 @@ def compile_code(cfg,code):
if __name__ == '__main__':
cfg = opts.init(opts_data)
cfg = Config(opts_data=opts_data)
if cfg.check_solc_version:
sys.exit(0 if check_solc_version() else 1)
@ -265,7 +265,7 @@ if __name__ == '__main__':
die(1,'--coin option must be ETH or ETC')
if not len(cfg._args) == 1:
opts.usage()
cfg._opts.usage()
code = create_src( cfg, solidity_code_template, token_data )

View file

@ -22,13 +22,13 @@ opts_data = {
}
}
cfg = opts.init(opts_data)
cfg = Config(opts_data=opts_data)
import asyncio
from mmgen.tx import CompletedTX
if len(cfg._args) != 1:
opts.usage()
cfg._opts.usage()
tx = asyncio.run(CompletedTX(cfg._args[0],quiet_open=True))
tx.file.write(ask_tty=False,ask_overwrite=not cfg.quiet,ask_write=not cfg.quiet)

View file

@ -51,13 +51,13 @@ opts_data = {
}
}
cfg = opts.init(opts_data)
cfg = Config(opts_data=opts_data)
if gc.platform == 'linux' and os.getenv('USER') != 'root':
die(1,'This program must be run as root')
if len(cfg._args):
opts.usage()
cfg._opts.usage()
mod_dir = os.path.split(normalize_path(modpath_save))[0]
mod_pardir = os.path.split(mod_dir)[0]

View file

@ -462,7 +462,7 @@ def get_protos(proto,addr_type,toolname):
def parse_args():
if len(cfg._args) != 2:
opts.usage()
cfg._opts.usage()
arg1,arg2 = cfg._args
gen1,gen2,rounds = (0,0,0)
@ -553,7 +553,7 @@ sd = namedtuple('saved_data_item',['reduced','wif','addr','viewkey'])
sys.argv = [sys.argv[0]] + ['--skip-cfg-file'] + sys.argv[1:]
cfg = opts.init(opts_data)
cfg = Config(opts_data=opts_data)
set_globals(cfg)
qmsg = cfg._util.qmsg

View file

@ -49,7 +49,7 @@ Valid network IDs: {nid}, all, or no_xmr
}
}
cfg = opts.init(opts_data)
cfg = Config(opts_data=opts_data)
from mmgen.daemon import *
@ -114,7 +114,7 @@ else:
ids = cfg._args
network_ids = CoinDaemon.get_network_ids(cfg)
if not ids:
opts.usage()
cfg._opts.usage()
for i in ids:
if i not in network_ids:
die(1,f'{i!r}: invalid network ID')

View file

@ -2,7 +2,7 @@
from mmgen.common import *
cfg = opts.init()
cfg = Config(process_opts=True)
cmd_args = cfg._args

View file

@ -21,7 +21,7 @@ opts_data = {
}
}
cfg = opts.init( opts_data, init_opts={'color':True} )
cfg = Config( opts_data=opts_data, init_opts={'color':True} )
def crypto():
desc = 'test data'

View file

@ -15,7 +15,7 @@ opts_data = {
}
}
cfg = opts.init(opts_data)
cfg = Config(opts_data=opts_data)
cmd_args = cfg._args

View file

@ -2,7 +2,7 @@
from mmgen.common import *
cfg = opts.init()
cfg = Config()
class foo(oneshot_warning):

View file

@ -45,7 +45,7 @@ sample note: {nn}
}
}
cfg = opts.init(opts_data)
cfg = Config(opts_data=opts_data)
if cfg._args == ['show_common_opts_diff']:
from mmgen.opts import show_common_opts_diff

View file

@ -44,7 +44,7 @@ available commands for platform {gc.platform!r}:
}
}
cfg = opts.init(opts_data)
cfg = Config(opts_data=opts_data)
from mmgen.term import get_char,get_char_raw,get_terminal_size,get_term
from mmgen.ui import line_input,keypress_confirm,do_license_msg

View file

@ -4,16 +4,17 @@ import sys,os
os.chdir(os.path.dirname(os.path.dirname(os.path.abspath(os.path.dirname(sys.argv[0])))))
sys.path[0] = os.curdir
from mmgen.common import *
from mmgen.cfg import Config
cfg = Config()
cfg = opts.init()
from mmgen.term import get_term,get_char_raw
from mmgen.term import init_term,get_term
init_term(cfg)
term = get_term()
if cfg._args[0] == 'echo':
if sys.argv[1] == 'echo':
from mmgen.ui import line_input
from mmgen.term import get_char_raw
term.init(noecho=True)
line_input( cfg, 'noecho> ' )
@ -26,7 +27,7 @@ if cfg._args[0] == 'echo':
line_input( cfg, 'noecho> ' )
get_char_raw()
elif cfg._args[0] == 'cleanup':
elif sys.argv[1] == 'cleanup':
term.register_cleanup()

View file

@ -109,8 +109,8 @@ def run_test():
'SKxuS56e99jpCeD9mMQ5o63zoGPakNdM9HCvt4Vt2cypvRjCdvGJ',
'zchFELwBxqsAubsLQ8yZgPCDDGukjXJssgCbiTPwFNmFwn9haLnDatzfhLdZzJT4PcU4o2yr92B52UFirUzEdF6ZYM2gBkM' )
from mmgen.opts import init
from mmgen.cfg import Config
cfg = init()
cfg = Config(process_opts=True)
run_test()

View file

@ -54,7 +54,7 @@ opts_data = {
}
}
cfg = opts.init(opts_data)
cfg = Config(opts_data=opts_data)
from test.include.common import set_globals
set_globals(cfg)

View file

@ -60,7 +60,7 @@ opts_data = {
}
}
cfg = opts.init(opts_data)
cfg = Config(opts_data=opts_data)
from test.include.common import set_globals
set_globals(cfg)

View file

@ -50,7 +50,7 @@ If no command is given, the whole suite of tests is run.
}
}
cfg = opts.init(opts_data)
cfg = Config(opts_data=opts_data)
from test.include.common import set_globals,end_msg,green

View file

@ -65,7 +65,7 @@ def create_shm_dir(data_dir,trash_dir):
os.symlink(dest,trash_dir)
dest = os.path.join(shm_dir,os.path.basename(data_dir))
shutil.move(data_dir,dest) # data_dir was created by opts.init()
shutil.move(data_dir,dest) # data_dir was created by Config()
os.symlink(dest,data_dir)
return shm_dir
@ -167,7 +167,7 @@ environment var
}
# we need some opt values before running opts.init, so parse without initializing:
po = opts.init(opts_data,parse_only=True)
po = Config(opts_data=opts_data,parse_only=True)._parsed_opts
from test.include.common import set_globals,get_test_data_dir
@ -179,7 +179,7 @@ if not po.user_opts.get('skipping_deps'):
except: pass
# step 2: opts.init will create new data_dir in ./test (if not cfg.skipping_deps)
cfg = opts.init(opts_data)
cfg = Config(opts_data=opts_data)
set_globals(cfg)

View file

@ -55,7 +55,7 @@ If no command is given, the whole suite of tests is run.
sys.argv = [sys.argv[0]] + ['--skip-cfg-file'] + sys.argv[1:]
cfg = opts.init(opts_data)
cfg = Config(opts_data=opts_data)
set_globals(cfg)

View file

@ -91,8 +91,8 @@ If no command is given, the whole suite of tests is run.
sys.argv = [sys.argv[0]] + ['--skip-cfg-file'] + sys.argv[1:]
cfg = opts.init(
opts_data,
cfg = Config(
opts_data = opts_data,
init_opts = {
'usr_randchars': 0,
'hash_preset': '1',

View file

@ -54,7 +54,7 @@ If no test is specified, all available tests are run
sys.argv.insert(1,'--skip-cfg-file')
cfg = opts.init(opts_data)
cfg = Config(opts_data=opts_data)
type(cfg)._reset_ok += ('use_internal_keccak_module','debug_addrlist')