diff options
author | Jason Gerard DeRose <jderose@redhat.com> | 2008-09-24 22:05:01 +0000 |
---|---|---|
committer | Jason Gerard DeRose <jderose@redhat.com> | 2008-09-24 22:05:01 +0000 |
commit | e2a680d7c9ca7416e9e3cffe25835fdee967c995 (patch) | |
tree | 862ad3129a25419439a8478965d1cefdef151edb | |
parent | 755ea8d0c26afcd1909994a6d381014d79997a33 (diff) | |
download | freeipa-e2a680d7c9ca7416e9e3cffe25835fdee967c995.tar.gz freeipa-e2a680d7c9ca7416e9e3cffe25835fdee967c995.tar.xz freeipa-e2a680d7c9ca7416e9e3cffe25835fdee967c995.zip |
350: If Param default_from kwarg is callable but not a DefaltFrom instances, the instance is created implicity
-rw-r--r-- | ipalib/frontend.py | 9 | ||||
-rw-r--r-- | ipalib/tests/test_frontend.py | 7 |
2 files changed, 12 insertions, 4 deletions
diff --git a/ipalib/frontend.py b/ipalib/frontend.py index 6d71a667..80579b7b 100644 --- a/ipalib/frontend.py +++ b/ipalib/frontend.py @@ -125,7 +125,7 @@ class Param(plugable.ReadOnly): A parameter accepted by a `Command`. """ __nones = (None, '', tuple(), []) - __default = dict( + __defaults = dict( doc='', required=True, multivalue=False, @@ -140,7 +140,7 @@ class Param(plugable.ReadOnly): if not ('required' in override or 'multivalue' in override): (name, kw_from_spec) = parse_param_spec(name) override.update(kw_from_spec) - kw = dict(self.__default) + kw = dict(self.__defaults) if not set(kw).issuperset(override): extra = sorted(set(override) - set(kw)) raise TypeError( @@ -154,7 +154,10 @@ class Param(plugable.ReadOnly): self.required = self.__check_type(bool, 'required') self.multivalue = self.__check_type(bool, 'multivalue') self.default = kw['default'] - self.default_from = self.__check_type(DefaultFrom, 'default_from', + df = kw['default_from'] + if callable(df) and not isinstance(df, DefaultFrom): + df = DefaultFrom(df) + self.default_from = check_type(df, DefaultFrom, 'default_from', allow_none=True ) self.__normalize = kw['normalize'] diff --git a/ipalib/tests/test_frontend.py b/ipalib/tests/test_frontend.py index fb818a4e..06d6b8cb 100644 --- a/ipalib/tests/test_frontend.py +++ b/ipalib/tests/test_frontend.py @@ -168,7 +168,12 @@ class test_Param(ClassChecker): df = frontend.DefaultFrom(lambda f, l: f + l, 'first', 'last', ) - assert self.cls(name, default_from=df).default_from == df + lam = lambda first, last: first + last + for cb in (df, lam): + o = self.cls(name, default_from=cb) + assert type(o.default_from) is frontend.DefaultFrom + assert o.default_from.keys == ('first', 'last') + assert o.default_from.callback('butt', 'erfly') == 'butterfly' rules = (lambda whatever: 'Not okay!',) o = self.cls(name, rules=rules) assert o.rules is rules |