From 015afee89f35ff85c660e1fdeec2ccdefd889b82 Mon Sep 17 00:00:00 2001 From: The MMGen Project Date: Wed, 16 Nov 2022 17:56:05 +0000 Subject: [PATCH] opts.py: print help screen only after full initialization of opts --- mmgen/help.py | 4 ++-- mmgen/opts.py | 25 ++++++++++++------------- mmgen/share/Opts.py | 9 ++++----- 3 files changed, 18 insertions(+), 20 deletions(-) diff --git a/mmgen/help.py b/mmgen/help.py index d9dd2bbd..1caf426d 100755 --- a/mmgen/help.py +++ b/mmgen/help.py @@ -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) ) diff --git a/mmgen/opts.py b/mmgen/opts.py index 49d1c52c..ca77d0ca 100755 --- a/mmgen/opts.py +++ b/mmgen/opts.py @@ -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: diff --git a/mmgen/share/Opts.py b/mmgen/share/Opts.py index 35e6311e..97368a92 100755 --- a/mmgen/share/Opts.py +++ b/mmgen/share/Opts.py @@ -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),