opts.py: print help screen only after full initialization of opts

This commit is contained in:
The MMGen Project 2022-11-16 17:56:05 +00:00
commit 015afee89f
Signed by: mmgen
GPG key ID: 3F8B1861E32B7DA2
3 changed files with 18 additions and 20 deletions

View file

@ -20,7 +20,7 @@
help: help notes for MMGen suite commands
"""
def help_notes_func(proto,po,k):
def help_notes_func(proto,opt,k):
from .globalvars import g
def fee_spec_letters(use_quotes=False):
@ -91,7 +91,7 @@ def help_notes_func(proto,po,k):
from .keygen import get_backends
from .addr import MMGenAddrType
backends = get_backends(
MMGenAddrType(proto,po.user_opts.get('type') or proto.dfl_mmtype).pubkey_type
MMGenAddrType(proto,opt.type or proto.dfl_mmtype).pubkey_type
)
return ' '.join( f'{n}:{k}{" [default]" if n==1 else ""}' for n,k in enumerate(backends,1) )

View file

@ -55,14 +55,14 @@ def delete_data(opts_data):
del mmgen.share.Opts.parse_opts
def post_init():
global po_save,opts_data_save,opt_filter_save
if po_save.user_opts.get('help') or po_save.user_opts.get('longhelp'):
print_help(po_save,opts_data_save,opt_filter_save)
global opts_data_save,opt_filter_save
if opt.help or opt.longhelp:
print_help(opt,opts_data_save,opt_filter_save)
else:
delete_data(opts_data_save)
del po_save,opts_data_save,opt_filter_save
del opts_data_save,opt_filter_save
def print_help(po,opts_data,opt_filter):
def print_help(opt,opts_data,opt_filter):
if not 'code' in opts_data:
opts_data['code'] = {}
@ -82,7 +82,7 @@ def print_help(po,opts_data,opt_filter):
do_pager(
mmgen.share.Opts.make_help(
proto,
po,
opt,
opts_data,
opt_filter ))
@ -408,11 +408,6 @@ def init(
# === end global var initialization === #
# print help screen only after global vars are initialized:
if getattr(opt,'help',None) or getattr(opt,'longhelp',None):
if not do_post_init:
print_help(po,opts_data,opt_filter) # exits
if need_proto:
from .protocol import warn_trustlevel
warn_trustlevel(g.coin)
@ -441,9 +436,13 @@ def init(
g.lock()
opt.lock()
# print help screen only after globals and opts initialized and locked:
if opt.help or opt.longhelp:
if not do_post_init:
print_help(opt,opts_data,opt_filter) # exits
if do_post_init:
global po_save,opts_data_save,opt_filter_save
po_save = po
global opts_data_save,opt_filter_save
opts_data_save = opts_data
opt_filter_save = opt_filter
else:

View file

@ -49,7 +49,7 @@ def print_help(*args):
print(make_help(*args))
sys.exit(0)
def make_help(proto,po,opts_data,opt_filter):
def make_help(proto,opt,opts_data,opt_filter):
def parse_lines(text):
filtered = False
@ -62,7 +62,7 @@ def make_help(proto,po,opts_data,opt_filter):
elif not filtered:
yield line
opts_type,fs = ('options','{:<3} --{} {}') if 'help' in po.user_opts else ('long_options','{} --{} {}')
opts_type,fs = ('options','{:<3} --{} {}') if opt.help else ('long_options','{} --{} {}')
t = opts_data['text']
c = opts_data['code']
nl = '\n '
@ -71,7 +71,7 @@ def make_help(proto,po,opts_data,opt_filter):
from mmgen.help import help_notes_func
def help_notes(k):
return help_notes_func(proto,po,k)
return help_notes_func(proto,opt,k)
def gen_arg_tuple(func,text):
d = {'proto': proto,'help_notes':help_notes}
@ -166,8 +166,7 @@ def parse_opts(opts_data,opt_filter=None,parse_only=False):
uopts,uargs = process_uopts(opts_data,short_opts,long_opts)
po = namedtuple('parsed_cmd_opts',['user_opts','cmd_args','opts','skipped_opts'])
return po(
return namedtuple('parsed_cmd_opts',['user_opts','cmd_args','opts','skipped_opts'])(
uopts, # dict
uargs, # list, callers can pop
tuple(o.replace('-','_').rstrip('=') for o in long_opts),