opts.py: remove module-level import of .util

- required to prevent circular import, as .util imports .opts at module level
This commit is contained in:
The MMGen Project 2022-01-21 11:23:45 +00:00
commit fbd15ee55d
Signed by: mmgen
GPG key ID: 3F8B1861E32B7DA2

View file

@ -34,13 +34,12 @@ class UserOpts(Lockable):
opt = UserOpts()
from .util import *
def usage():
from mmgen.share import Opts
Die(1,Opts.make_usage_str(g.prog_name,'user',usage_data))
from .util import Die
Die(1,mmgen.share.Opts.make_usage_str(g.prog_name,'user',usage_data))
def version():
from .util import Die
Die(0,fmt(f"""
{g.prog_name.upper()} version {g.version}
Part of the {g.proj_name} suite, an online/offline cryptocurrency wallet for the
@ -78,10 +77,12 @@ def die_on_incompatible_opts(incompat_list):
for group in incompat_list:
bad = [k for k in opt.__dict__ if k in group and getattr(opt,k) != None]
if len(bad) > 1:
from .util import die
die(1,'Conflicting options: {}'.format(', '.join(map(fmt_opt,bad))))
def _show_hash_presets():
fs = ' {:<7} {:<6} {:<3} {}'
from .util import msg
msg('Available parameters for scrypt.hash():')
msg(fs.format('Preset','N','r','p'))
for i in sorted(g.hash_presets.keys()):
@ -187,6 +188,7 @@ def show_common_opts_diff():
yield l.split()[1].split('=')[0][2:].replace('-','_')
def do_fmt(set_data):
from .util import fmt_list
return fmt_list(['--'+s.replace('_','-') for s in set_data],fmt='col',indent=' ')
a = g.common_opts
@ -195,6 +197,7 @@ def show_common_opts_diff():
b_minus_a = [e for e in b if e not in a]
a_and_b = [e for e in a if e in b]
from .util import msg
msg(f'g.common_opts - common_opts_data:\n {do_fmt(a_minus_b) if a_minus_b else "None"}\n')
msg(f'common_opts_data - g.common_opts (these do not set global var):\n{do_fmt(b_minus_a)}\n')
msg(f'common_opts_data ^ g.common_opts (these set global var):\n{do_fmt(a_and_b)}\n')
@ -304,6 +307,7 @@ def init(opts_data=None,add_opts=None,init_opts=None,opt_filter=None,parse_only=
else:
g.data_dir_root = os.path.join(g.home_dir,'.'+g.proj_name.lower())
from .util import check_or_create_dir
check_or_create_dir(g.data_dir_root)
from .term import init_term
@ -369,6 +373,7 @@ def init(opts_data=None,add_opts=None,init_opts=None,opt_filter=None,parse_only=
if getattr(opt,'help',None) or getattr(opt,'longhelp',None):
print_help(po,opts_data,opt_filter) # exits
from .util import warn_altcoins
warn_altcoins(g.coin,altcoin_trust_level)
die_on_incompatible_opts(g.incompatible_opts)
@ -476,6 +481,7 @@ def check_usr_opts(usr_opts): # Raises an exception if any check fails
raise UserOptError(f'{val!r}: unrecognized {desc} for option {fmt_opt(key)!r}')
def opt_display(key,val='',beg='For selected',end=':\n'):
from .util import msg_r
msg_r('{} option {!r}{}'.format(
beg,
f'{fmt_opt(key)}={val}' if val else fmt_opt(key),
@ -510,6 +516,7 @@ def check_usr_opts(usr_opts): # Raises an exception if any check fails
fn,offset = a
opt_is_int(offset,desc)
from .util import check_infile,check_outdir,check_outfile
if key == 'hidden_incog_input_params':
check_infile(fn,blkdev_ok=True)
key2 = 'in_fmt'
@ -571,6 +578,7 @@ def check_usr_opts(usr_opts): # Raises an exception if any check fails
def chk_vsize_adj(key,val,desc):
opt_is_float(val,desc)
from .util import ymsg
ymsg(f'Adjusting transaction vsize by a factor of {float(val):1.2f}')
def chk_coin(key,val,desc):
@ -606,6 +614,8 @@ def check_usr_opts(usr_opts): # Raises an exception if any check fails
# if len(val) > 20 or not all(s.isalnum() for s in val):
# raise UserOptError(f'{val!r}: invalid parameter for --token option')
from .util import is_int
cfuncs = { k:v for k,v in locals().items() if k.startswith('chk_') }
for key in usr_opts:
@ -613,8 +623,10 @@ def check_usr_opts(usr_opts): # Raises an exception if any check fails
desc = f'parameter for {fmt_opt(key)!r} option'
if key in g.infile_opts:
from .util import check_infile
check_infile(val) # file exists and is readable - dies on error
elif key == 'outdir':
from .util import check_outdir
check_outdir(val) # dies on error
elif 'chk_'+key in cfuncs:
cfuncs['chk_'+key](key,val,desc)
@ -651,6 +663,7 @@ def check_and_set_autoset_opts(): # Raises exception if any check fails
else:
ret = locals()[asd.type](key,val,asd)
if type(ret) is str:
from .util import fmt_list
raise UserOptError(
'{!r}: invalid parameter for option --{} (not {}: {})'.format(
val,