summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJason Gerard DeRose <jderose@redhat.com>2009-01-13 20:27:19 -0700
committerJason Gerard DeRose <jderose@redhat.com>2009-01-13 20:27:19 -0700
commit8cc38e681f9caca838540511664337f964302f56 (patch)
tree57bf2b6dfff4c90e3ac0e46700e24ddf0279283f
parent659bb4c142ee9a987babd38fad93b539e51309f3 (diff)
downloadfreeipa-8cc38e681f9caca838540511664337f964302f56.tar.gz
freeipa-8cc38e681f9caca838540511664337f964302f56.tar.xz
freeipa-8cc38e681f9caca838540511664337f964302f56.zip
New Param: added new Flag param class and its unit test
-rw-r--r--ipalib/parameter.py32
-rw-r--r--tests/test_ipalib/test_parameter.py28
2 files changed, 58 insertions, 2 deletions
diff --git a/ipalib/parameter.py b/ipalib/parameter.py
index 7d70f40a8..31bd9db2b 100644
--- a/ipalib/parameter.py
+++ b/ipalib/parameter.py
@@ -219,6 +219,7 @@ class Param(ReadOnly):
('normalizer', callable, None),
('default_from', DefaultFrom, None),
('create_default', callable, None),
+ ('autofill', bool, False),
('flags', frozenset, frozenset()),
# The 'default' kwarg gets appended in Param.__init__():
@@ -329,6 +330,17 @@ class Param(ReadOnly):
**self.__kw
)
+ def __call__(self, value, **kw):
+ """
+ One stop shopping.
+ """
+ if value in NULLS:
+ value = self.get_default(**kw)
+ else:
+ value = self.convert(self.normalize(value))
+ self.validate(value)
+ return value
+
def clone(self, **overrides):
"""
Return a new `Param` instance similar to this one.
@@ -619,6 +631,20 @@ class Bool(Param):
A parameter for boolean values (stored in the ``bool`` type).
"""
+ type = bool
+
+
+class Flag(Bool):
+ """
+ A boolean parameter that always gets filled in with a default value.
+
+ This `Bool` subclass forces ``autofill=True`` in `Flag.__init__()`.
+ """
+
+ def __init__(self, name, *rules, **kw):
+ kw['autofill'] = True
+ super(Flag, self).__init__(name, *rules, **kw)
+
class Int(Param):
"""
@@ -635,6 +661,7 @@ class Float(Param):
"""
type = float
+ type_error = _('must be a decimal number')
class Bytes(Param):
@@ -648,6 +675,7 @@ class Bytes(Param):
"""
type = str
+ type_error = _('must be binary data')
kwargs = Param.kwargs + (
('minlength', int, None),
@@ -657,8 +685,8 @@ class Bytes(Param):
)
- def __init__(self, name, **kw):
- super(Bytes, self).__init__(name, **kw)
+ def __init__(self, name, *rules, **kw):
+ super(Bytes, self).__init__(name, *rules, **kw)
if not (
self.length is None or
diff --git a/tests/test_ipalib/test_parameter.py b/tests/test_ipalib/test_parameter.py
index 8c4a93ab4..4a6fee55e 100644
--- a/tests/test_ipalib/test_parameter.py
+++ b/tests/test_ipalib/test_parameter.py
@@ -163,6 +163,7 @@ class test_Param(ClassChecker):
assert o.default_from is None
assert o.create_default is None
assert o._get_default is None
+ assert o.autofill is False
assert o.flags == frozenset()
# Test that ValueError is raised when a kwarg from a subclass
@@ -543,6 +544,33 @@ class test_Param(ClassChecker):
assert o.normalizer.value is default
+class test_Flag(ClassChecker):
+ """
+ Test the `ipalib.parameter.Flag` class.
+ """
+ _cls = parameter.Flag
+
+ def test_init(self):
+ """
+ Test the `ipalib.parameter.Flag.__init__` method.
+ """
+ o = self.cls('my_flag')
+ assert o.type is bool
+ assert isinstance(o, parameter.Bool)
+ assert o.autofill is True
+
+ # Test with autofill=False
+ o = self.cls('my_flag', autofill=False)
+ assert o.autofill is True
+
+ # Test when cloning:
+ orig = self.cls('my_flag')
+ for clone in [orig.clone(), orig.clone(autofill=False)]:
+ assert clone.autofill is True
+ assert clone is not orig
+ assert type(clone) is self.cls
+
+
class test_Bytes(ClassChecker):
"""
Test the `ipalib.parameter.Bytes` class.