summaryrefslogtreecommitdiffstats
path: root/ipalib/public.py
diff options
context:
space:
mode:
authorJason Gerard DeRose <jderose@redhat.com>2008-08-29 03:17:26 +0000
committerJason Gerard DeRose <jderose@redhat.com>2008-08-29 03:17:26 +0000
commit61b5b7a8488c2e3392905df3f6e7e02b7302fdd8 (patch)
tree7309e41a5b84da936c5598e9ceea4861ab666cde /ipalib/public.py
parente1b13a7117559e75eb4559b14a34c33a5cb646d7 (diff)
downloadfreeipa.git-61b5b7a8488c2e3392905df3f6e7e02b7302fdd8.tar.gz
freeipa.git-61b5b7a8488c2e3392905df3f6e7e02b7302fdd8.tar.xz
freeipa.git-61b5b7a8488c2e3392905df3f6e7e02b7302fdd8.zip
220: Renamed Option2.validate_scalar() to Option2.__validate_scalar(); added Option2.normalize() method; added corresponding unit tests
Diffstat (limited to 'ipalib/public.py')
-rw-r--r--ipalib/public.py39
1 files changed, 30 insertions, 9 deletions
diff --git a/ipalib/public.py b/ipalib/public.py
index e0d9e6d2..147596e1 100644
--- a/ipalib/public.py
+++ b/ipalib/public.py
@@ -86,9 +86,7 @@ class DefaultFrom(plugable.ReadOnly):
class Option2(plugable.ReadOnly):
def __init__(self, name, doc, type_, required=False, multivalue=False,
- default=None, default_from=None, normalize=None, rules=tuple()
- ):
-
+ default=None, default_from=None, rules=tuple(), normalize=None):
self.name = name
self.doc = doc
self.type = type_
@@ -100,7 +98,32 @@ class Option2(plugable.ReadOnly):
self.rules = (type_.validate,) + rules
lock(self)
- def validate_scalar(self, value):
+ def convert(self, value):
+ if self.multivalue:
+ if type(value) in (tuple, list):
+ return tuple(self.type(v) for v in value)
+ return (self.type(value),)
+ return self.type(value)
+
+ def __normalize_scalar(self, value):
+ if value is None:
+ return None
+ if type(value) is not self.type.type:
+ raise TypeError('need a %r; got %r' % (self.type.type, value))
+ return self.__normalize(value)
+
+ def normalize(self, value):
+ if self.__normalize is None:
+ return value
+ if self.multivalue:
+ if value is None:
+ return None
+ if type(value) is not tuple:
+ raise TypeError('multivalue must be a tuple; got %r' % value)
+ return tuple(self.__normalize_scalar(v) for v in value)
+ return self.__normalize_scalar(value)
+
+ def __validate_scalar(self, value):
for rule in self.rules:
error = rule(value)
if error is not None:
@@ -109,13 +132,11 @@ class Option2(plugable.ReadOnly):
def validate(self, value):
if self.multivalue:
if type(value) is not tuple:
- raise TypeError(
- 'when multivalue, value must be tuple; got %r' % value
- )
+ raise TypeError('multivalue must be a tuple; got %r' % value)
for v in value:
- self.validate_scalar(v)
+ self.__validate_scalar(v)
else:
- self.validate_scalar(value)
+ self.__validate_scalar(value)
class Option(plugable.Plugin):