Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
Returns:
types.SimpleNamespace: An object with all parsed values as nested attributes.
Raises:
ParserError: If there is a parsing error and error_handler=None.
"""
if env is None and self._default_env:
env = True
try:
with _suppress_stderr():
cfg, unk = self._parse_known_args(args=args)
if unk:
self.error('Unrecognized arguments: %s' % ' '.join(unk))
ActionSubCommands.handle_subcommands(self, cfg, env=env, defaults=defaults)
ActionParser._fix_conflicts(self, cfg)
cfg_dict = namespace_to_dict(cfg)
if nested:
cfg_dict = _flat_namespace_to_dict(dict_to_namespace(cfg_dict))
if env:
cfg_dict = self._merge_config(cfg_dict, self.parse_env(defaults=defaults, nested=nested, _skip_check=True))
elif defaults:
cfg_dict = self._merge_config(cfg_dict, self.get_defaults(nested=nested))
if not (with_meta or (with_meta is None and self._default_meta)):
cfg_dict = strip_meta(cfg_dict)
def _check_value_key(action:Action, value:Any, key:str, cfg) -> Any:
"""Checks the value for a given action.
Args:
action (Action): The action used for parsing.
value (Any): The value to parse.
key (str): The configuration key.
Raises:
TypeError: If the value is not valid.
"""
if action is None:
raise ValueError('Parser key "'+str(key)+'": received action==None.')
if action.choices is not None:
if isinstance(action, ActionSubCommands):
if key == action.dest:
if value not in action.choices:
raise KeyError('Unknown sub-command '+value+' (choices: '+', '.join(action.choices)+')')
return value
parser = action._name_parser_map[key]
parser.check_config(value) # type: ignore
else:
vals = value if _is_action_value_list(action) else [value]
if not all([v in action.choices for v in vals]):
args = {'value': value,
'choices': ', '.join(map(repr, action.choices))}
msg = 'invalid choice: %(value)r (choose from %(choices)s).'
raise TypeError('Parser key "'+str(key)+'": '+(msg % args))
elif hasattr(action, '_check_type'):
value = action._check_type(value, cfg=cfg) # type: ignore
elif action.type is not None:
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.register('action', 'parsers', ActionSubCommands)