Merge "parseractions: Make key validation reusable"
This commit is contained in:
commit
78d276e722
|
@ -114,6 +114,37 @@ class MultiKeyValueAction(argparse.Action):
|
|||
raise TypeError(msg)
|
||||
self.optional_keys = set(optional_keys or [])
|
||||
|
||||
def validate_keys(self, keys):
|
||||
"""Validate the provided keys.
|
||||
|
||||
:param keys: A list of keys to validate.
|
||||
"""
|
||||
# Check key validation
|
||||
valid_keys = self.required_keys | self.optional_keys
|
||||
if valid_keys:
|
||||
invalid_keys = [k for k in keys if k not in valid_keys]
|
||||
if invalid_keys:
|
||||
msg = _(
|
||||
"Invalid keys %(invalid_keys)s specified.\n"
|
||||
"Valid keys are: %(valid_keys)s"
|
||||
)
|
||||
raise argparse.ArgumentTypeError(msg % {
|
||||
'invalid_keys': ', '.join(invalid_keys),
|
||||
'valid_keys': ', '.join(valid_keys),
|
||||
})
|
||||
|
||||
if self.required_keys:
|
||||
missing_keys = [k for k in self.required_keys if k not in keys]
|
||||
if missing_keys:
|
||||
msg = _(
|
||||
"Missing required keys %(missing_keys)s.\n"
|
||||
"Required keys are: %(required_keys)s"
|
||||
)
|
||||
raise argparse.ArgumentTypeError(msg % {
|
||||
'missing_keys': ', '.join(missing_keys),
|
||||
'required_keys': ', '.join(self.required_keys),
|
||||
})
|
||||
|
||||
def __call__(self, parser, namespace, values, metavar=None):
|
||||
# Make sure we have an empty list rather than None
|
||||
if getattr(namespace, self.dest, None) is None:
|
||||
|
@ -137,30 +168,7 @@ class MultiKeyValueAction(argparse.Action):
|
|||
raise argparse.ArgumentTypeError(msg % str(kv))
|
||||
|
||||
# Check key validation
|
||||
valid_keys = self.required_keys | self.optional_keys
|
||||
if valid_keys:
|
||||
invalid_keys = [k for k in params if k not in valid_keys]
|
||||
if invalid_keys:
|
||||
msg = _(
|
||||
"Invalid keys %(invalid_keys)s specified.\n"
|
||||
"Valid keys are: %(valid_keys)s"
|
||||
)
|
||||
raise argparse.ArgumentTypeError(msg % {
|
||||
'invalid_keys': ', '.join(invalid_keys),
|
||||
'valid_keys': ', '.join(valid_keys),
|
||||
})
|
||||
|
||||
if self.required_keys:
|
||||
missing_keys = [k for k in self.required_keys if k not in params]
|
||||
if missing_keys:
|
||||
msg = _(
|
||||
"Missing required keys %(missing_keys)s.\n"
|
||||
"Required keys are: %(required_keys)s"
|
||||
)
|
||||
raise argparse.ArgumentTypeError(msg % {
|
||||
'missing_keys': ', '.join(missing_keys),
|
||||
'required_keys': ', '.join(self.required_keys),
|
||||
})
|
||||
self.validate_keys(list(params))
|
||||
|
||||
# Update the dest dict
|
||||
getattr(namespace, self.dest, []).append(params)
|
||||
|
@ -208,30 +216,7 @@ class MultiKeyValueCommaAction(MultiKeyValueAction):
|
|||
raise argparse.ArgumentTypeError(msg % str(kv))
|
||||
|
||||
# Check key validation
|
||||
valid_keys = self.required_keys | self.optional_keys
|
||||
if valid_keys:
|
||||
invalid_keys = [k for k in params if k not in valid_keys]
|
||||
if invalid_keys:
|
||||
msg = _(
|
||||
"Invalid keys %(invalid_keys)s specified.\n"
|
||||
"Valid keys are: %(valid_keys)s"
|
||||
)
|
||||
raise argparse.ArgumentTypeError(msg % {
|
||||
'invalid_keys': ', '.join(invalid_keys),
|
||||
'valid_keys': ', '.join(valid_keys),
|
||||
})
|
||||
|
||||
if self.required_keys:
|
||||
missing_keys = [k for k in self.required_keys if k not in params]
|
||||
if missing_keys:
|
||||
msg = _(
|
||||
"Missing required keys %(missing_keys)s.\n"
|
||||
"Required keys are: %(required_keys)s"
|
||||
)
|
||||
raise argparse.ArgumentTypeError(msg % {
|
||||
'missing_keys': ', '.join(missing_keys),
|
||||
'required_keys': ', '.join(self.required_keys),
|
||||
})
|
||||
self.validate_keys(list(params))
|
||||
|
||||
# Update the dest dict
|
||||
getattr(namespace, self.dest, []).append(params)
|
||||
|
|
Loading…
Reference in New Issue