aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTim Harder <radhermit@gmail.com>2021-03-04 18:00:25 -0700
committerTim Harder <radhermit@gmail.com>2021-03-04 18:00:25 -0700
commit6f198c49c7b0cb60d498c2cef80b011f69dfdba2 (patch)
tree28cec2320bab6a69bdd9fa28b30d3080a19ca994 /src/snakeoil/cli
parentdist.distutils_extensions: drop unnecessary --cov-config setting (diff)
downloadsnakeoil-6f198c49c7b0cb60d498c2cef80b011f69dfdba2.tar.gz
snakeoil-6f198c49c7b0cb60d498c2cef80b011f69dfdba2.tar.bz2
snakeoil-6f198c49c7b0cb60d498c2cef80b011f69dfdba2.zip
cli.arghparse: add parsers attr for ordered sequence of inherited parsers
Diffstat (limited to 'src/snakeoil/cli')
-rw-r--r--src/snakeoil/cli/arghparse.py12
1 files changed, 8 insertions, 4 deletions
diff --git a/src/snakeoil/cli/arghparse.py b/src/snakeoil/cli/arghparse.py
index be1d4615..cd5c272f 100644
--- a/src/snakeoil/cli/arghparse.py
+++ b/src/snakeoil/cli/arghparse.py
@@ -1021,7 +1021,7 @@ class ArgumentParser(OptionalsParser, CsvActionsParser, CopyableParser):
# usage such as adding conflicting options to both the root command and
# subcommands without causing issues in addition to helping support
# default subparsers.
- self._parents = kwds.get('parents', ())
+ self._parents = tuple(kwds.get('parents', ()))
# extract the description to use and set docs for doc generation
description = self._update_desc(description, docs)
@@ -1132,6 +1132,11 @@ class ArgumentParser(OptionalsParser, CsvActionsParser, CopyableParser):
return description
@klass.cached_property
+ def parsers(self):
+ """Return the ordered sequence of inherited parsers."""
+ return self._parents + (self,)
+
+ @klass.cached_property
def subparsers(self):
"""Return the set of registered subparsers."""
parsers = {}
@@ -1192,9 +1197,8 @@ class ArgumentParser(OptionalsParser, CsvActionsParser, CopyableParser):
setattr(namespace, dest, self._defaults[dest])
try:
- # run registered early parse functions
- early_parse_funcs = (x.__early_parse for x in (*self._parents, self))
- for functor, parser in chain.from_iterable(early_parse_funcs):
+ # run registered early parse functions from all parsers
+ for functor, parser in chain.from_iterable(x.__early_parse for x in self.parsers):
namespace, args = functor(parser, namespace, args)
# parse the arguments and exit if there are any errors