diff options
author | Jason Gerard DeRose <jderose@redhat.com> | 2009-01-12 16:14:46 -0700 |
---|---|---|
committer | Jason Gerard DeRose <jderose@redhat.com> | 2009-01-12 16:14:46 -0700 |
commit | 5c7c0b35bb2484efad2a8776b42fbf4066618706 (patch) | |
tree | c47c304de26396dbe611556a48aaba7119490f53 /ipalib/parameter.py | |
parent | 5e6ea11178f3a784c9cd589e958ef752890f8a21 (diff) | |
download | freeipa.git-5c7c0b35bb2484efad2a8776b42fbf4066618706.tar.gz freeipa.git-5c7c0b35bb2484efad2a8776b42fbf4066618706.tar.xz freeipa.git-5c7c0b35bb2484efad2a8776b42fbf4066618706.zip |
New Param: added Param.validate() and Param._validate_scalar() methods; added corresponding unit tests
Diffstat (limited to 'ipalib/parameter.py')
-rw-r--r-- | ipalib/parameter.py | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/ipalib/parameter.py b/ipalib/parameter.py index 204fda66..0890160a 100644 --- a/ipalib/parameter.py +++ b/ipalib/parameter.py @@ -25,6 +25,7 @@ from types import NoneType from util import make_repr from request import ugettext from plugable import ReadOnly, lock, check_name +from errors2 import RequirementError, ValidationError from constants import NULLS, TYPE_ERROR, CALLABLE_ERROR @@ -207,6 +208,7 @@ class Param(ReadOnly): ('primary_key', bool, False), ('normalizer', callable, None), ('default_from', callable, None), + ('create_default', callable, None), ('flags', frozenset, frozenset()), # The 'default' kwarg gets appended in Param.__init__(): @@ -432,6 +434,39 @@ class Param(ReadOnly): :param value: A proposed value for this parameter. """ + if value is None: + if self.required: + raise RequirementError(name=self.name) + return + if self.multivalue: + if type(value) is not tuple: + raise TypeError( + TYPE_ERROR % ('value', tuple, value, type(value)) + ) + if len(value) < 1: + raise ValueError('value: empty tuple must be converted to None') + for (i, v) in enumerate(value): + self._validate_scalar(v, i) + else: + self._validate_scalar(value) + + def _validate_scalar(self, value, index=None): + if type(value) is not self.type: + if index is None: + name = 'value' + else: + name = 'value[%d]' % index + raise TypeError( + TYPE_ERROR % (name, self.type, value, type(value)) + ) + if index is not None and type(index) is not int: + raise TypeError( + TYPE_ERROR % ('index', int, index, type(index)) + ) + for rule in self.all_rules: + error = rule(ugettext, value) + if error is not None: + raise ValidationError(name=self.name, error=error, index=index) class Bool(Param): |