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
This commit is contained in:
The MMGen Project 2022-08-04 13:44:32 +00:00
commit 5eab2a5a66
Signed by: mmgen
GPG key ID: 3F8B1861E32B7DA2
3 changed files with 30 additions and 13 deletions

View file

@ -1 +1 @@
July 2022
August 2022

View file

@ -1 +1 @@
13.2.dev11
13.2.dev12

View file

@ -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