use return value of parse_args directly

This commit is contained in:
Anthony Sottile 2021-11-14 15:39:14 -08:00
parent d582affb2c
commit 8d3afe40e1
5 changed files with 21 additions and 26 deletions

View file

@ -80,9 +80,6 @@ class Application:
#: The user-supplied options parsed into an instance of #: The user-supplied options parsed into an instance of
#: :class:`argparse.Namespace` #: :class:`argparse.Namespace`
self.options: Optional[argparse.Namespace] = None self.options: Optional[argparse.Namespace] = None
#: The left over arguments that were not parsed by
#: :attr:`option_manager`
self.args: Optional[List[str]] = None
#: The number of errors, warnings, and other messages after running #: The number of errors, warnings, and other messages after running
#: flake8 and taking into account ignored errors and lines. #: flake8 and taking into account ignored errors and lines.
self.result_count = 0 self.result_count = 0
@ -183,7 +180,7 @@ class Application:
:param list argv: :param list argv:
Command-line arguments passed in directly. Command-line arguments passed in directly.
""" """
self.options, self.args = aggregator.aggregate_options( self.options = aggregator.aggregate_options(
self.option_manager, self.option_manager,
config_finder, config_finder,
argv, argv,
@ -201,11 +198,11 @@ class Application:
assert self.check_plugins is not None assert self.check_plugins is not None
self.check_plugins.provide_options( self.check_plugins.provide_options(
self.option_manager, self.options, self.args self.option_manager, self.options, self.options.filenames
) )
assert self.formatting_plugins is not None assert self.formatting_plugins is not None
self.formatting_plugins.provide_options( self.formatting_plugins.provide_options(
self.option_manager, self.options, self.args self.option_manager, self.options, self.options.filenames
) )
def formatter_for(self, formatter_plugin_name): def formatter_for(self, formatter_plugin_name):
@ -251,9 +248,10 @@ class Application:
def make_file_checker_manager(self) -> None: def make_file_checker_manager(self) -> None:
"""Initialize our FileChecker Manager.""" """Initialize our FileChecker Manager."""
assert self.options is not None
self.file_checker_manager = checker.Manager( self.file_checker_manager = checker.Manager(
style_guide=self.guide, style_guide=self.guide,
arguments=self.args, arguments=self.options.filenames,
checker_plugins=self.check_plugins, checker_plugins=self.check_plugins,
) )

View file

@ -6,7 +6,6 @@ applies the user-specified command-line configuration on top of it.
import argparse import argparse
import logging import logging
from typing import List from typing import List
from typing import Tuple
from flake8.options import config from flake8.options import config
from flake8.options.manager import OptionManager from flake8.options.manager import OptionManager
@ -18,7 +17,7 @@ def aggregate_options(
manager: OptionManager, manager: OptionManager,
config_finder: config.ConfigFileFinder, config_finder: config.ConfigFileFinder,
argv: List[str], argv: List[str],
) -> Tuple[argparse.Namespace, List[str]]: ) -> argparse.Namespace:
"""Aggregate and merge CLI and config file options. """Aggregate and merge CLI and config file options.
:param flake8.options.manager.OptionManager manager: :param flake8.options.manager.OptionManager manager:
@ -35,7 +34,7 @@ def aggregate_options(
tuple(argparse.Namespace, list) tuple(argparse.Namespace, list)
""" """
# Get defaults from the option parser # Get defaults from the option parser
default_values, _ = manager.parse_args([]) default_values = manager.parse_args([])
# Make our new configuration file mergerator # Make our new configuration file mergerator
config_parser = config.ConfigParser( config_parser = config.ConfigParser(

View file

@ -459,15 +459,13 @@ class OptionManager:
self, self,
args: Optional[List[str]] = None, args: Optional[List[str]] = None,
values: Optional[argparse.Namespace] = None, values: Optional[argparse.Namespace] = None,
) -> Tuple[argparse.Namespace, List[str]]: ) -> argparse.Namespace:
"""Proxy to calling the OptionParser's parse_args method.""" """Proxy to calling the OptionParser's parse_args method."""
self.generate_epilog() self.generate_epilog()
self.update_version_string() self.update_version_string()
if values: if values:
self.parser.set_defaults(**vars(values)) self.parser.set_defaults(**vars(values))
parsed_args = self.parser.parse_args(args) return self.parser.parse_args(args)
# TODO: refactor callers to not need this
return parsed_args, parsed_args.filenames
def parse_known_args( def parse_known_args(
self, args: Optional[List[str]] = None self, args: Optional[List[str]] = None

View file

@ -38,7 +38,7 @@ def test_aggregate_options_with_config(optmanager):
config_finder = config.ConfigFileFinder( config_finder = config.ConfigFileFinder(
"flake8", config_file=CLI_SPECIFIED_CONFIG "flake8", config_file=CLI_SPECIFIED_CONFIG
) )
options, args = aggregator.aggregate_options( options = aggregator.aggregate_options(
optmanager, config_finder, arguments optmanager, config_finder, arguments
) )
@ -58,7 +58,7 @@ def test_aggregate_options_when_isolated(optmanager):
] ]
config_finder = config.ConfigFileFinder("flake8", ignore_config_files=True) config_finder = config.ConfigFileFinder("flake8", ignore_config_files=True)
optmanager.extend_default_ignore(["E8"]) optmanager.extend_default_ignore(["E8"])
options, args = aggregator.aggregate_options( options = aggregator.aggregate_options(
optmanager, config_finder, arguments optmanager, config_finder, arguments
) )

View file

@ -33,16 +33,16 @@ def test_option_manager_including_parent_options():
optmanager = manager.OptionManager( optmanager = manager.OptionManager(
prog="flake8", version=TEST_VERSION, parents=[parent_parser] prog="flake8", version=TEST_VERSION, parents=[parent_parser]
) )
option, _ = optmanager.parse_args(["--parent", "foo"]) options = optmanager.parse_args(["--parent", "foo"])
# THEN # THEN
assert option.parent == "foo" assert options.parent == "foo"
def test_parse_args_forwarding_default_values(optmanager): def test_parse_args_forwarding_default_values(optmanager):
"""Verify default provided values are present in the final result.""" """Verify default provided values are present in the final result."""
namespace = argparse.Namespace(foo="bar") namespace = argparse.Namespace(foo="bar")
options, args = optmanager.parse_args([], namespace) options = optmanager.parse_args([], namespace)
assert options.foo == "bar" assert options.foo == "bar"
@ -50,7 +50,7 @@ def test_parse_args_forwarding_type_coercion(optmanager):
"""Verify default provided values are type converted from add_option.""" """Verify default provided values are type converted from add_option."""
optmanager.add_option("--foo", type=int) optmanager.add_option("--foo", type=int)
namespace = argparse.Namespace(foo="5") namespace = argparse.Namespace(foo="5")
options, args = optmanager.parse_args([], namespace) options = optmanager.parse_args([], namespace)
assert options.foo == 5 assert options.foo == 5
@ -104,7 +104,7 @@ def test_parse_args_normalize_path(optmanager):
optmanager.add_option("--config", normalize_paths=True) optmanager.add_option("--config", normalize_paths=True)
options, args = optmanager.parse_args(["--config", "../config.ini"]) options = optmanager.parse_args(["--config", "../config.ini"])
assert options.config == os.path.abspath("../config.ini") assert options.config == os.path.abspath("../config.ini")
@ -117,7 +117,7 @@ def test_parse_args_handles_comma_separated_defaults(optmanager):
"--exclude", default="E123,W234", comma_separated_list=True "--exclude", default="E123,W234", comma_separated_list=True
) )
options, args = optmanager.parse_args([]) options = optmanager.parse_args([])
assert options.exclude == ["E123", "W234"] assert options.exclude == ["E123", "W234"]
@ -130,7 +130,7 @@ def test_parse_args_handles_comma_separated_lists(optmanager):
"--exclude", default="E123,W234", comma_separated_list=True "--exclude", default="E123,W234", comma_separated_list=True
) )
options, args = optmanager.parse_args(["--exclude", "E201,W111,F280"]) options = optmanager.parse_args(["--exclude", "E201,W111,F280"])
assert options.exclude == ["E201", "W111", "F280"] assert options.exclude == ["E201", "W111", "F280"]
@ -143,7 +143,7 @@ def test_parse_args_normalize_paths(optmanager):
"--extra-config", normalize_paths=True, comma_separated_list=True "--extra-config", normalize_paths=True, comma_separated_list=True
) )
options, args = optmanager.parse_args( options = optmanager.parse_args(
["--extra-config", "../config.ini,tox.ini,flake8/some-other.cfg"] ["--extra-config", "../config.ini,tox.ini,flake8/some-other.cfg"]
) )
assert options.extra_config == [ assert options.extra_config == [
@ -319,14 +319,14 @@ def test_optparse_normalize_callback_option_legacy(optmanager):
def test_optparse_normalize_types(optmanager, type_s, input_val, expected): def test_optparse_normalize_types(optmanager, type_s, input_val, expected):
"""Test the optparse shim for type="typename".""" """Test the optparse shim for type="typename"."""
optmanager.add_option("--foo", type=type_s) optmanager.add_option("--foo", type=type_s)
opts, args = optmanager.parse_args(["--foo", input_val]) opts = optmanager.parse_args(["--foo", input_val])
assert opts.foo == expected assert opts.foo == expected
def test_optparse_normalize_choice_type(optmanager): def test_optparse_normalize_choice_type(optmanager):
"""Test the optparse shim for type="choice".""" """Test the optparse shim for type="choice"."""
optmanager.add_option("--foo", type="choice", choices=("1", "2", "3")) optmanager.add_option("--foo", type="choice", choices=("1", "2", "3"))
opts, args = optmanager.parse_args(["--foo", "1"]) opts = optmanager.parse_args(["--foo", "1"])
assert opts.foo == "1" assert opts.foo == "1"
# fails to parse # fails to parse
with pytest.raises(SystemExit): with pytest.raises(SystemExit):