Browse Source

`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
The MMGen Project 2 years ago
parent
commit
5eab2a5a66
3 changed files with 30 additions and 13 deletions
  1. 1 1
      mmgen/data/release_date
  2. 1 1
      mmgen/data/version
  3. 28 11
      mmgen/opts.py

+ 1 - 1
mmgen/data/release_date

@@ -1 +1 @@
-July 2022
+August 2022

+ 1 - 1
mmgen/data/version

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

+ 28 - 11
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