Merge branch 'optmgr-parse-unknown-default-values' into 'master'

Set configuration file-provided values via ArgumentParser.set_defaults()

See merge request pycqa/flake8!349
This commit is contained in:
Eric N. Vander Weele 2019-08-30 19:18:16 +00:00
commit ca62d9333e
2 changed files with 23 additions and 2 deletions

View file

@ -426,12 +426,18 @@ class OptionManager(object):
)
def parse_args(self, args=None, values=None):
# type: (Optional[List[str]], Optional[argparse.Namespace]) -> Tuple[argparse.Namespace, List[str]] # noqa: E501
"""Proxy to calling the OptionParser's parse_args method."""
self.generate_epilog()
self.update_version_string()
args = self.parser.parse_args(args, values)
assert isinstance( # nosec (for bandit)
self.parser, argparse.ArgumentParser
), self.parser
if values:
self.parser.set_defaults(**vars(values))
parsed_args = self.parser.parse_args(args)
# TODO: refactor callers to not need this
return args, args.filenames
return parsed_args, parsed_args.filenames
def parse_known_args(self, args=None):
# type: (Optional[List[str]]) -> Tuple[argparse.Namespace, List[str]]

View file

@ -22,6 +22,21 @@ def test_option_manager_creates_option_parser(optmanager):
assert isinstance(optmanager.parser, argparse.ArgumentParser)
def test_parse_args_forwarding_default_values(optmanager):
"""Verify default provided values are present in the final result."""
namespace = argparse.Namespace(foo='bar')
options, args = optmanager.parse_args([], namespace)
assert options.foo == 'bar'
def test_parse_args_forwarding_type_coercion(optmanager):
"""Verify default provided values are type converted from add_option."""
optmanager.add_option('--foo', type=int)
namespace = argparse.Namespace(foo='5')
options, args = optmanager.parse_args([], namespace)
assert options.foo == 5
def test_add_option_short_option_only(optmanager):
"""Verify the behaviour of adding a short-option only."""
assert optmanager.options == []