350: If Param default_from kwarg is callable but not a DefaltFrom instances, the instance is created implicity

This commit is contained in:
Jason Gerard DeRose
2008-09-24 22:05:01 +00:00
parent 755ea8d0c2
commit e2a680d7c9
2 changed files with 12 additions and 4 deletions
+6 -3
View File
@@ -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']
+6 -1
View File
@@ -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