summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric N. Vander Weele <ericvw@gmail.com>2019-10-25 15:01:30 -0400
committerEric N. Vander Weele <ericvw@gmail.com>2019-10-25 17:07:43 -0400
commit1d7558f7da77d67272352d6ab8ca8a476cf80411 (patch)
tree4ce306cb5c0e5f359dfdc6b833290d478656e84d
parent2a5c2bb6969046b607bbb44bf5c7d2c774768d7c (diff)
downloadflake8-1d7558f7da77d67272352d6ab8ca8a476cf80411.tar.gz
optmanager: Inherit options from parent argument parsers
Allow for including options from parent `argparse.ArgumentParser` objects in preparation of splitting out the handling of preliminary options from the `OptionManager`.
-rw-r--r--src/flake8/options/manager.py16
-rw-r--r--tests/unit/test_option_manager.py17
2 files changed, 30 insertions, 3 deletions
diff --git a/src/flake8/options/manager.py b/src/flake8/options/manager.py
index a7f678d..def4c96 100644
--- a/src/flake8/options/manager.py
+++ b/src/flake8/options/manager.py
@@ -338,8 +338,12 @@ class OptionManager(object):
"""Manage Options and OptionParser while adding post-processing."""
def __init__(
- self, prog, version, usage="%(prog)s [options] file file ..."
- ): # type: (str, str, str) -> None
+ self,
+ prog,
+ version,
+ usage="%(prog)s [options] file file ...",
+ parents=None,
+ ): # type: (str, str, str, Optional[List[argparse.ArgumentParser]]) -> None # noqa: E501
"""Initialize an instance of an OptionManager.
:param str prog:
@@ -348,9 +352,15 @@ class OptionManager(object):
Version string for the program.
:param str usage:
Basic usage string used by the OptionParser.
+ :param argparse.ArgumentParser parents:
+ A list of ArgumentParser objects whose arguments should also be
+ included.
"""
+ if parents is None:
+ parents = []
+
self.parser = argparse.ArgumentParser(
- prog=prog, usage=usage
+ prog=prog, usage=usage, parents=parents
) # type: argparse.ArgumentParser
self._current_group = None # type: Optional[argparse._ArgumentGroup]
self.version_action = cast(
diff --git a/tests/unit/test_option_manager.py b/tests/unit/test_option_manager.py
index b384a31..b97a9a6 100644
--- a/tests/unit/test_option_manager.py
+++ b/tests/unit/test_option_manager.py
@@ -22,6 +22,23 @@ def test_option_manager_creates_option_parser(optmanager):
assert isinstance(optmanager.parser, argparse.ArgumentParser)
+def test_option_manager_including_parent_options():
+ """Verify parent options are included in the parsed options."""
+ # GIVEN
+ parent_parser = argparse.ArgumentParser(add_help=False)
+ parent_parser.add_argument('--parent')
+
+ # WHEN
+ optmanager = manager.OptionManager(
+ prog='flake8',
+ version=TEST_VERSION,
+ parents=[parent_parser])
+ option, _ = optmanager.parse_args(['--parent', 'foo'])
+
+ # THEN
+ assert option.parent == 'foo'
+
+
def test_parse_args_forwarding_default_values(optmanager):
"""Verify default provided values are present in the final result."""
namespace = argparse.Namespace(foo='bar')