diff options
| author | Eric N. Vander Weele <ericvw@gmail.com> | 2019-10-25 15:01:30 -0400 |
|---|---|---|
| committer | Eric N. Vander Weele <ericvw@gmail.com> | 2019-10-25 17:07:43 -0400 |
| commit | 1d7558f7da77d67272352d6ab8ca8a476cf80411 (patch) | |
| tree | 4ce306cb5c0e5f359dfdc6b833290d478656e84d | |
| parent | 2a5c2bb6969046b607bbb44bf5c7d2c774768d7c (diff) | |
| download | flake8-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.py | 16 | ||||
| -rw-r--r-- | tests/unit/test_option_manager.py | 17 |
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') |
