summaryrefslogtreecommitdiff
path: root/alot/utils/argparse.py
diff options
context:
space:
mode:
Diffstat (limited to 'alot/utils/argparse.py')
-rw-r--r--alot/utils/argparse.py16
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)