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'{program_name} uses config.py ({__file__}) for global, cross-module configuration setup and parsing.'
)
# Keep track of if we've been called and prevent being called more
# than once.
config_parse_called = False
+
# A global configuration dictionary that will contain parsed arguments.
# It is also this variable that modules use to access parsed arguments.
# This is the data that is most interesting to our callers; it will hold
# the configuration result.
-config: Dict[str, Any] = {}
+config = {}
+# It would be really nice if this shit worked from interactive python
def add_commandline_args(title: str, description: str = ""):
default=None,
help='Populate config file compatible with --config_loadfile to save global config for later use.',
)
+group.add_argument(
+ '--config_rejects_unrecognized_arguments',
+ default=False,
+ action='store_true',
+ help=(
+ 'If present, config will raise an exception if it doesn\'t recognize an argument. The ' +
+ 'default behavior is to ignore this so as to allow interoperability with programs that ' +
+ 'want to use their own argparse calls to parse their own, separate commandline args.'
+ )
+)
def is_flag_already_in_argv(var: str):
# 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.
+ if len(unknown) > 0:
+ if config['config_rejects_unrecognized_arguments']:
+ raise Exception(
+ f'Encountered unrecognized config argument(s) {unknown} with --config_rejects_unrecognized_arguments enabled; halting.'
+ )
+ saved_messages.append(f'Config encountered unrecognized commandline arguments: {unknown}')
sys.argv = sys.argv[:1] + unknown
# Check for savefile and populate it if requested.