diff options
author | Jason Gerard DeRose <jderose@redhat.com> | 2008-08-28 18:31:06 +0000 |
---|---|---|
committer | Jason Gerard DeRose <jderose@redhat.com> | 2008-08-28 18:31:06 +0000 |
commit | a6ec94da601273719e44c69c4d7c23776ab30f3a (patch) | |
tree | 9da8b0eaea911aa7a7aa86e1957feb450e1e5828 /ipalib/public.py | |
parent | 283c6f8fcec6a4687fd2cc99326a7f2b33e4e8bf (diff) | |
download | freeipa.git-a6ec94da601273719e44c69c4d7c23776ab30f3a.tar.gz freeipa.git-a6ec94da601273719e44c69c4d7c23776ab30f3a.tar.xz freeipa.git-a6ec94da601273719e44c69c4d7c23776ab30f3a.zip |
217: Started work on new Option2 class that is more declarative and doesn't require subclassing from Option
Diffstat (limited to 'ipalib/public.py')
-rw-r--r-- | ipalib/public.py | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/ipalib/public.py b/ipalib/public.py index 78d4a7a4..4c2a8dd2 100644 --- a/ipalib/public.py +++ b/ipalib/public.py @@ -27,6 +27,7 @@ import inspect import plugable from plugable import lock import errors +import ipa_types RULE_FLAG = 'validation_rule' @@ -83,6 +84,42 @@ class DefaultFrom(plugable.ReadOnly): return None +class Option2(plugable.ReadOnly): + def __init__(self, name, doc, type_, required=False, multivalue=False, + default=None, default_from=None, normalize=None, rules=tuple() + ): + self.name = name + self.doc = doc + self.type = type_ + self.required = required + self.multivalue = multivalue + self.default = default + self.default_from = default_from + self.__normalize = normalize + self.rules = (type_.validate,) + rules + lock(self) + + def validate_scalar(self, value): + for rule in self.rules: + msg = rule(value) + if msg is not None: + raise errors.RuleError( + self.__class__.__name__, + value, + rule, + msg, + ) + + def validate(self, value): + if self.multivalue: + if type(value) is not tuple: + value = (value,) + for v in value: + self.validate_scalar(v) + else: + self.validate_scalar(value) + + class Option(plugable.Plugin): """ The Option class represents a kw argument from a `Command`. |