diff options
| author | Scott Gasch <[email protected]> | 2021-07-12 20:52:49 -0700 |
|---|---|---|
| committer | Scott Gasch <[email protected]> | 2021-07-12 20:52:49 -0700 |
| commit | 97fbe845e5dfdbda22521117c1783e1fd8515952 (patch) | |
| tree | 8b0ac61be1d670621abc994beef84e249f0ad95a /config.py | |
| parent | a838c154135b2420d9047a101caf24a2c9f593c2 (diff) | |
Random changes.
Diffstat (limited to 'config.py')
| -rw-r--r-- | config.py | 33 |
1 files changed, 25 insertions, 8 deletions
@@ -100,10 +100,12 @@ class LoadFromFile(argparse.Action): # A global parser that we will collect arguments into. +prog = os.path.basename(sys.argv[0]) args = argparse.ArgumentParser( - description=f"This program uses config.py ({__file__}) for global, cross-module configuration.", + description=None, formatter_class=argparse.ArgumentDefaultsHelpFormatter, fromfile_prefix_chars="@", + epilog=f'-----------------------------------------------------------------------------\n{prog} uses config.py ({__file__}) for global, cross-module configuration setup and parsing.\n-----------------------------------------------------------------------------' ) config_parse_called = False @@ -155,9 +157,7 @@ def is_flag_already_in_argv(var: str): return False -def parse() -> Dict[str, Any]: - import string_utils - +def parse(entry_module: str) -> Dict[str, Any]: """Main program should call this early in main()""" global config_parse_called if config_parse_called: @@ -165,8 +165,23 @@ def parse() -> Dict[str, Any]: config_parse_called = True global saved_messages + # If we're about to do the usage message dump, put the main module's + # argument group first in the list, please. + reordered_action_groups = [] + prog = sys.argv[0] + for arg in sys.argv: + if arg == '--help' or arg == '-h': + print(entry_module) + for group in args._action_groups: + if entry_module in group.title or prog in group.title: + reordered_action_groups.insert(0, group) + else: + reordered_action_groups.append(group) + args._action_groups = reordered_action_groups + # Examine the environment variables to settings that match - # known flags. + # known flags. For a flag called --example_flag the corresponding + # environment variable would be called EXAMPLE_FLAG. usage_message = args.format_usage() optional = False var = '' @@ -193,7 +208,8 @@ def parse() -> Dict[str, Any]: saved_messages.append( f'Initialized from environment: {var} = {value}' ) - if len(chunks) == 1 and string_utils.to_bool(value): + from string_utils import to_bool + if len(chunks) == 1 and to_bool(value): sys.argv.append(var) elif len(chunks) > 1: sys.argv.append(var) @@ -204,12 +220,13 @@ def parse() -> Dict[str, Any]: next # Parse (possibly augmented) commandline args with argparse normally. - #config.update(vars(args.parse_args())) known, unknown = args.parse_known_args() config.update(vars(known)) # Reconstruct the argv with unrecognized flags for the benefit of - # future argument parsers. + # future argument parsers. For example, unittest_main in python + # has some of its own flags. If we didn't recognize it, maybe + # someone else will. sys.argv = sys.argv[:1] + unknown if config['config_savefile']: |
