summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ipalib/public.py25
-rw-r--r--ipalib/tests/test_public.py19
2 files changed, 29 insertions, 15 deletions
diff --git a/ipalib/public.py b/ipalib/public.py
index bb592d2f..9e999879 100644
--- a/ipalib/public.py
+++ b/ipalib/public.py
@@ -90,14 +90,19 @@ class Option(plugable.Plugin):
__public__ = frozenset((
'normalize',
- 'default',
+ 'get_default',
'validate',
- 'required',
'type',
+ 'required',
+ 'default',
+ 'default_from',
))
__rules = None
type = unicode
required = False
+ default = None
+ default_from = None
+
def normalize(self, value):
"""
@@ -159,16 +164,12 @@ class Option(plugable.Plugin):
if is_rule(attr):
yield attr
- def default(self, **kw):
- """
- Returns a default or auto-completed value for this Option. If no
- default is available, this method should return None.
-
- All the keywords are passed so it's possible to build an
- auto-completed value from other Options values, e.g., build 'initials'
- from 'givenname' + 'sn'.
- """
- return None
+ def get_default(self, **kw):
+ if type(self.default_from) is DefaultFrom:
+ default = self.default_from(**kw)
+ if default is not None:
+ return default
+ return self.default
class Command(plugable.Plugin):
diff --git a/ipalib/tests/test_public.py b/ipalib/tests/test_public.py
index d809b074..609ac33e 100644
--- a/ipalib/tests/test_public.py
+++ b/ipalib/tests/test_public.py
@@ -190,12 +190,25 @@ class test_Option(ClassChecker):
rules = tuple(get_rule(i) for i in xrange(3))
assert o.rules == rules
- def test_default(self):
+ def test_get_default(self):
"""
- Tests the `public.Option.default` method.
+ Tests the `public.Option.get_default` method.
"""
+ assert 'get_default' in self.cls.__public__
assert 'default' in self.cls.__public__
- assert self.cls().default() is None
+ assert 'default_from' in self.cls.__public__
+ assert self.cls().get_default() is None
+ class subclass(self.cls):
+ default = 3
+ default_from = public.DefaultFrom(
+ lambda a,b: a * b,
+ 'key0', 'key1'
+ )
+ o = subclass()
+ assert o.get_default() == 3
+ assert o.get_default(key0=2, key1=5) == 10
+ assert o.get_default(key0=7) == 3
+
class test_Command(ClassChecker):