From 5eab2a5a665aa93511bc207b8246829b4cb811a3 Mon Sep 17 00:00:00 2001 From: The MMGen Project Date: Thu, 4 Aug 2022 13:44:32 +0000 Subject: [PATCH] `opts.py`: add `post_init()` function Allow scripts to perform their own initializations that affect the help output. For a working example, see: https://github.com/mmgen/mmgen-node-tools/blob/master/mmgen_node_tools/main_ticker.py --- mmgen/data/release_date | 2 +- mmgen/data/version | 2 +- mmgen/opts.py | 39 ++++++++++++++++++++++++++++----------- 3 files changed, 30 insertions(+), 13 deletions(-) diff --git a/mmgen/data/release_date b/mmgen/data/release_date index 514dc607..62af01c2 100644 --- a/mmgen/data/release_date +++ b/mmgen/data/release_date @@ -1 +1 @@ -July 2022 +August 2022 diff --git a/mmgen/data/version b/mmgen/data/version index ba6c1d2f..a0f75a00 100644 --- a/mmgen/data/version +++ b/mmgen/data/version @@ -1 +1 @@ -13.2.dev11 +13.2.dev12 diff --git a/mmgen/opts.py b/mmgen/opts.py index 03018830..0f119d36 100755 --- a/mmgen/opts.py +++ b/mmgen/opts.py @@ -46,6 +46,22 @@ def version(): command line. Copyright (C){g.Cdates} {g.author} {g.email} """,indent=' ').rstrip()) +def delete_data(opts_data): + for k in ('text','notes','code'): + if k in opts_data: + del opts_data[k] + del mmgen.share.Opts.make_help + del mmgen.share.Opts.process_uopts + 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) + else: + delete_data(opts_data_save) + del po_save,opts_data_save,opt_filter_save + def print_help(po,opts_data,opt_filter): if not 'code' in opts_data: opts_data['code'] = {} @@ -268,7 +284,8 @@ def init( opt_filter = None, parse_only = False, parsed_opts = None, - need_proto = True ): + need_proto = True, + do_post_init = False ): if opts_data is None: opts_data = opts_data_dfl @@ -389,11 +406,8 @@ def init( # print help screen only after global vars are initialized: if getattr(opt,'help',None) or getattr(opt,'longhelp',None): - print_help(po,opts_data,opt_filter) # exits - - del mmgen.share.Opts.make_help - del mmgen.share.Opts.process_uopts - del mmgen.share.Opts.parse_opts + if not do_post_init: + print_help(po,opts_data,opt_filter) # exits if need_proto: from .protocol import warn_trustlevel @@ -420,14 +434,17 @@ def init( if g.debug_opts: opt_postproc_debug() - # We don't need this data anymore - for k in ('text','notes','code'): - if k in opts_data: - del opts_data[k] - g.lock() opt.lock() + if do_post_init: + global po_save,opts_data_save,opt_filter_save + po_save = po + opts_data_save = opts_data + opt_filter_save = opt_filter + else: + delete_data(opts_data) + return po.cmd_args def check_usr_opts(usr_opts): # Raises an exception if any check fails