aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTim Harder <radhermit@gmail.com>2020-01-20 04:13:41 -0700
committerTim Harder <radhermit@gmail.com>2020-01-20 04:13:41 -0700
commita48edc4afb5d184aacff7f8430f0458fe55c8518 (patch)
treec60eff28fbd4544f37a9bc12b3a491bd10a42f24 /src/snakeoil/cli
parentbump version (diff)
downloadsnakeoil-a48edc4afb5d184aacff7f8430f0458fe55c8518.tar.gz
snakeoil-a48edc4afb5d184aacff7f8430f0458fe55c8518.tar.bz2
snakeoil-a48edc4afb5d184aacff7f8430f0458fe55c8518.zip
cli.arghparse: ArgumentParser: separate pre-parse phase into it's own method
Diffstat (limited to 'src/snakeoil/cli')
-rw-r--r--src/snakeoil/cli/arghparse.py15
1 files changed, 12 insertions, 3 deletions
diff --git a/src/snakeoil/cli/arghparse.py b/src/snakeoil/cli/arghparse.py
index 7e914a1..7edf3f3 100644
--- a/src/snakeoil/cli/arghparse.py
+++ b/src/snakeoil/cli/arghparse.py
@@ -1078,8 +1078,13 @@ class ArgumentParser(OptionalsParser, CsvActionsParser):
parsers.update(x._name_parser_map)
return ImmutableDict(parsers)
- def _parse_known_args(self, arg_strings, namespace):
- """Add support for using a specified, default subparser."""
+ def pre_parse(self, arg_strings=None, namespace=None):
+ """Reset registered defaults and pre-parse functions."""
+ if arg_strings is None:
+ arg_strings = []
+ if namespace is None:
+ namespace = Namespace()
+
# reset any flagged defaults
for functor, parser in self.__reset_defaults:
functor(parser, namespace)
@@ -1093,7 +1098,11 @@ class ArgumentParser(OptionalsParser, CsvActionsParser):
# wipe pre-parse functions so they only run once
del self.__pre_parse[:]
- # parse the remaining args
+ return namespace, arg_strings
+
+ def _parse_known_args(self, arg_strings, namespace):
+ """Add support for running registered pre-parse functions."""
+ namespace, arg_strings = self.pre_parse(arg_strings, namespace)
return super()._parse_known_args(arg_strings, namespace)
def parse_args(self, args=None, namespace=None):