summaryrefslogtreecommitdiffstats
path: root/ipalib
diff options
context:
space:
mode:
authorJason Gerard DeRose <jderose@redhat.com>2008-09-02 19:05:10 +0000
committerJason Gerard DeRose <jderose@redhat.com>2008-09-02 19:05:10 +0000
commit85f7a08e5d11b3d09b6c36b7a683f39846f8821e (patch)
tree726374f19d48004526607e644d66d9d9767704be /ipalib
parentbc08225dcd719eba0134e8a59ea7932fdea8513d (diff)
downloadfreeipa.git-85f7a08e5d11b3d09b6c36b7a683f39846f8821e.tar.gz
freeipa.git-85f7a08e5d11b3d09b6c36b7a683f39846f8821e.tar.xz
freeipa.git-85f7a08e5d11b3d09b6c36b7a683f39846f8821e.zip
231: Added Option2.get_default() method; added corresponding unit tests
Diffstat (limited to 'ipalib')
-rw-r--r--ipalib/public.py16
-rw-r--r--ipalib/tests/test_public.py34
2 files changed, 48 insertions, 2 deletions
diff --git a/ipalib/public.py b/ipalib/public.py
index ea9a06a3..cf95af7c 100644
--- a/ipalib/public.py
+++ b/ipalib/public.py
@@ -86,8 +86,13 @@ class DefaultFrom(plugable.ReadOnly):
class Option2(plugable.ReadOnly):
- def __init__(self, name, doc, type_, required=False, multivalue=False,
- default=None, default_from=None, rules=tuple(), normalize=None):
+ def __init__(self, name, doc, type_,
+ required=False,
+ multivalue=False,
+ default=None,
+ default_from=None,
+ rules=tuple(),
+ normalize=None):
self.name = check_name(name)
self.doc = check_type(doc, str, 'doc')
self.type = check_isinstance(type_, ipa_types.Type, 'type_')
@@ -140,6 +145,13 @@ class Option2(plugable.ReadOnly):
else:
self.__validate_scalar(value)
+ def get_default(self, **kw):
+ if self.default_from is not None:
+ default = self.default_from(**kw)
+ if default is not None:
+ return self.convert(default)
+ return self.convert(self.default)
+
class Option(plugable.Plugin):
"""
diff --git a/ipalib/tests/test_public.py b/ipalib/tests/test_public.py
index 84be3c6d..56da573a 100644
--- a/ipalib/tests/test_public.py
+++ b/ipalib/tests/test_public.py
@@ -257,6 +257,40 @@ class test_Option2(ClassChecker):
assert e.value is fail_type
assert e.error == 'Must be a string'
+ def test_get_default(self):
+ """
+ Tests the `public.Option2.get_default` method.
+ """
+ name = 'greeting'
+ doc = 'User greeting'
+ type_ = ipa_types.Unicode()
+ default = u'Hello, world!'
+ default_from = public.DefaultFrom(
+ lambda first, last: u'Hello, %s %s!' % (first, last),
+ 'first', 'last'
+ )
+
+ # Scenario 1: multivalue=False
+ o = self.cls(name, doc, type_,
+ default=default,
+ default_from=default_from,
+ )
+ assert o.default is default
+ assert o.default_from is default_from
+ assert o.get_default() == default
+ assert o.get_default(first='John', last='Doe') == 'Hello, John Doe!'
+
+ # Scenario 2: multivalue=True
+ o = self.cls(name, doc, type_,
+ default=default,
+ default_from=default_from,
+ multivalue=True,
+ )
+ assert o.default is default
+ assert o.default_from is default_from
+ assert o.get_default() == (default,)
+ assert o.get_default(first='John', last='Doe') == ('Hello, John Doe!',)
+
class test_Option(ClassChecker):
"""