diff options
Diffstat (limited to 'alot/utils/argparse.py')
-rw-r--r-- | alot/utils/argparse.py | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/alot/utils/argparse.py b/alot/utils/argparse.py index b8e3d87d..f58b7a75 100644 --- a/alot/utils/argparse.py +++ b/alot/utils/argparse.py @@ -116,7 +116,7 @@ class BooleanAction(argparse.Action): setattr(namespace, self.dest, values) -class ValidatedStoreAction(argparse.Action): +class _ValidatedAction(argparse.Action): """An action that allows a validation function to be specificied. The validator keyword must be a function taking exactly one argument, that @@ -128,6 +128,9 @@ class ValidatedStoreAction(argparse.Action): super().__init__(option_strings, dest, **kwargs) self.validator = validator + def _do_action(self, namespace, values): + raise NotImplementedError + def __call__(self, parser, namespace, values, option_string=None): if self.validator: try: @@ -135,4 +138,15 @@ class ValidatedStoreAction(argparse.Action): except ValidationFailed as e: raise argparse.ArgumentError(self, str(e)) + self._do_action(namespace, values) + +class ValidatedStoreAction(_ValidatedAction): + def _do_action(self, namespace, values): setattr(namespace, self.dest, values) +class ValidatedAppendAction(_ValidatedAction): + def _do_action(self, namespace, values): + items = getattr(namespace, self.dest) + if items is None: + items = [] + items.append(values) + setattr(namespace, self.dest, items) |