mirror of
https://github.com/linux-system-roles/network.git
synced 2026-01-23 02:15:17 +00:00
arg_validator: support generating default value for ArgValidatorDict
Some dictionaries may wish to have a default value that is a dictionary with the default of all keys. Add a method to generate this. This returns a callable instead of a plain dictionary. In practice, the generated default value should always be the same. However, we also expect that ArgValidator validation gives a result that is owned by the caller. In case of mutable values (like a dictionary), we want a deep clone. Signed-off-by: Thomas Haller <thaller@redhat.com>
This commit is contained in:
parent
e0a1b6af68
commit
e01e550c59
1 changed files with 18 additions and 3 deletions
|
|
@ -337,11 +337,14 @@ class ArgValidatorDict(ArgValidator):
|
|||
default_value=None,
|
||||
all_missing_during_validate=False,
|
||||
):
|
||||
ArgValidator.__init__(self, name, required, default_value)
|
||||
if nested is not None:
|
||||
self.nested = dict([(v.name, v) for v in nested])
|
||||
nested = dict([(v.name, v) for v in nested])
|
||||
else:
|
||||
self.nested = {}
|
||||
nested = {}
|
||||
if default_value is ArgValidator.DEFAULT:
|
||||
default_value = self.generate_default
|
||||
ArgValidator.__init__(self, name, required, default_value)
|
||||
self.nested = nested
|
||||
self.all_missing_during_validate = all_missing_during_validate
|
||||
|
||||
def _validate_impl(self, value, name):
|
||||
|
|
@ -378,6 +381,18 @@ class ArgValidatorDict(ArgValidator):
|
|||
result[setting] = default
|
||||
return result
|
||||
|
||||
@staticmethod
|
||||
def generate_default_from_nested(nested):
|
||||
result = {}
|
||||
for name, validator in nested.items():
|
||||
default = validator.get_default_value()
|
||||
if default is not ArgValidator.MISSING:
|
||||
result[name] = default
|
||||
return result
|
||||
|
||||
def generate_default(self):
|
||||
return ArgValidatorDict.generate_default_from_nested(self.nested)
|
||||
|
||||
|
||||
class ArgValidatorList(ArgValidator):
|
||||
def __init__(self, name, nested, default_value=None):
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue