# This module is commonly used by others in here and should avoid
# taking any unnecessary dependencies back on them.
-# Note: at this point in time, logging hasn't been configured and
-# anything we log will come out the root logger.
-logger = logging.getLogger(__name__)
-
# Defer logging messages until later when logging has been initialized.
saved_messages: List[str] = []
program_name = os.path.basename(sys.argv[0])
original_argv = [arg for arg in sys.argv]
+
# A global parser that we will collect arguments into.
args = argparse.ArgumentParser(
description=None,
formatter_class=argparse.ArgumentDefaultsHelpFormatter,
fromfile_prefix_chars="@",
- epilog=f'-----------------------------------------------------------------------------\n{program_name} uses config.py ({__file__}) for global, cross-module configuration setup and parsing.\n-----------------------------------------------------------------------------'
+ epilog=f'------------------------------------------------------------------------------\n{program_name} uses config.py ({__file__}) for global, cross-module configuration setup and parsing.\n------------------------------------------------------------------------------'
)
# Keep track of if we've been called and prevent being called more
'--config_loadfile',
metavar='FILENAME',
default=None,
- help='Config file from which to read args in lieu or in addition to commandline.',
+ help='Config file (populated via --config_savefile) from which to read args in lieu or in addition to commandline.',
)
group.add_argument(
'--config_dump',
type=str,
metavar='FILENAME',
default=None,
- help='Populate config file compatible --config_loadfile to save config for later use.',
+ help='Populate config file compatible with --config_loadfile to save config for later use.',
)
"""Main program should call this early in main()"""
global config_parse_called
if config_parse_called:
- logger.warning('config.parse has already been called; ignoring spurious invocation')
return config
global saved_messages
if loadfile is not None:
if saw_other_args:
- print(
- 'WARNING: ignoring some commandline arguments; only args in --config_loadfile be parsed.',
- file=sys.stderr
- )
+ msg = f'Augmenting commandline arguments with those from {loadfile}.'
+ print(msg, file=sys.stderr)
+ saved_messages.append(msg)
if not os.path.exists(loadfile):
- print(f'--config_loadfile argument must be a file, {loadfile} not found.',
+ print(f'ERROR: --config_loadfile argument must be a file, {loadfile} not found.',
file=sys.stderr)
sys.exit(-1)
with open(loadfile, 'r') as rf:
newargs = rf.readlines()
newargs = [arg.strip('\n') for arg in newargs if 'config_savefile' not in arg]
- sys.argv = sys.argv[:1] + newargs
+ sys.argv += newargs
# Parse (possibly augmented, possibly completely overwritten)
# commandline args with argparse normally and populate config.
"""Print the current config to stdout."""
print("Global Configuration:", file=sys.stderr)
pprint.pprint(config, stream=sys.stderr)
+ print()
def late_logging():