Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def __call__(self, *args, **kwargs):
"""Parses an argument with the corresponding parser and if valid, sets the parsed value to the corresponding key.
Raises:
TypeError: If the argument is not valid.
"""
if len(args) == 0:
## Runs when within _ActionsContainer super().add_argument call ##
kwargs['_parser'] = self._parser
return ActionParser(**kwargs)
## Runs when parsing a value ##
value = _dict_to_flat_namespace(namespace_to_dict(self._check_type(args[2])))
for key, val in vars(value).items():
setattr(args[1], key, val)
if hasattr(value, '__path__'):
setattr(args[1], self.dest+'.__path__', getattr(value, '__path__'))
def _parse_known_args(self, args=None):
"""Parses known arguments for internal use only."""
if args is None:
args = sys.argv[1:]
else:
args = list(args)
try:
namespace, args = super()._parse_known_args(args, SimpleNamespace())
if len(args) > 0:
for action in self._actions:
if isinstance(action, ActionParser):
ns, args = action._parser._parse_known_args(args)
for key, val in vars(ns).items():
setattr(namespace, key, val)
if len(args) == 0:
break
if hasattr(namespace, _UNRECOGNIZED_ARGS_ATTR):
args.extend(getattr(namespace, _UNRECOGNIZED_ARGS_ATTR))
delattr(namespace, _UNRECOGNIZED_ARGS_ATTR)
return namespace, args
except (ArgumentError, ParserError):
err = sys.exc_info()[1]
self.error(str(err))