diff options
author | Tim Harder <radhermit@gmail.com> | 2021-03-04 18:00:25 -0700 |
---|---|---|
committer | Tim Harder <radhermit@gmail.com> | 2021-03-04 18:00:25 -0700 |
commit | 6f198c49c7b0cb60d498c2cef80b011f69dfdba2 (patch) | |
tree | 28cec2320bab6a69bdd9fa28b30d3080a19ca994 /src/snakeoil/cli | |
parent | dist.distutils_extensions: drop unnecessary --cov-config setting (diff) | |
download | snakeoil-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.py | 12 |
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 |