Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
45 changes: 43 additions & 2 deletions configargparse.py
Original file line number Diff line number Diff line change
Expand Up @@ -911,19 +911,60 @@ def __init__(self, *args, **kwargs):
"given path, then exits",
)

self._config_file_open_func = kwargs.pop("config_file_open_func", open)
config_file_open_func = kwargs.pop("config_file_open_func", open)

# Validate args before proceeding
for name, value in [
("default_config_files", default_config_files),
("args_for_setting_config_path", args_for_setting_config_path),
("args_for_writing_out_config_file", args_for_writing_out_config_file),
]:
if not isinstance(value, (list, tuple)):
hint = " (e.g. ['%s'])" % value if isinstance(value, str) else ""
raise TypeError("%s must be a list%s. Got: %r" % (name, hint, value))

if not callable(config_file_open_func):
raise TypeError(
"config_file_open_func must be callable. Got: %r"
% (config_file_open_func,)
)

self._config_file_open_func = config_file_open_func

self._add_config_file_help = add_config_file_help
self._add_env_var_help = add_env_var_help
self._auto_env_var_prefix = auto_env_var_prefix

if "formatter_class" in kwargs:
fc = kwargs["formatter_class"]
if isinstance(fc, type) and not issubclass(fc, argparse.HelpFormatter):
msg = (
"formatter_class must be a subclass of "
"argparse.HelpFormatter. Got: %r." % (fc,)
)
if issubclass(fc, ConfigFileParser):
msg += " Perhaps you meant to use config_file_parser_class?"
raise TypeError(msg)

argparse.ArgumentParser.__init__(self, *args, **kwargs)

# parse the additional args
if config_file_parser_class is None:
self._config_file_parser = DefaultConfigFileParser()
else:
elif isinstance(config_file_parser_class, ConfigFileParser):
self._config_file_parser = config_file_parser_class
elif isinstance(config_file_parser_class, type) and issubclass(
config_file_parser_class, ConfigFileParser
):
self._config_file_parser = config_file_parser_class()
else:
raise TypeError(
"config_file_parser_class must be a subclass of "
"ConfigFileParser (such as DefaultConfigFileParser, "
"YAMLConfigFileParser, etc.). "
"Got: %r. Perhaps you meant to use formatter_class?"
% (config_file_parser_class,)
)

self._default_config_files = default_config_files
self._ignore_unknown_config_file_keys = ignore_unknown_config_file_keys
Expand Down