108: Changed cmd.default() so that it now only return dictionary of values for which defaults were generated; updated unit tests

This commit is contained in:
Jason Gerard DeRose 2008-08-11 17:57:07 +00:00
parent fd6c215d59
commit 8a6ece2ffb
2 changed files with 12 additions and 14 deletions

View File

@ -183,16 +183,15 @@ class cmd(plugable.Plugin):
def normalize(self, **kw):
return dict(self.normalize_iter(kw))
def default(self, **kw):
d = {}
for opt in self.options:
if opt.name not in kw:
value = opt.default(**kw)
def default_iter(self, kw):
for option in self.options:
if option.name not in kw:
value = option.default(**kw)
if value is not None:
d[opt.name] = value
assert not set(kw).intersection(d)
kw.update(d)
return kw
yield(option.name, value)
def default(self, **kw):
return dict(self.default_iter(kw))
def validate(self, **kw):
for (key, value) in kw.items():
@ -201,7 +200,7 @@ class cmd(plugable.Plugin):
def __call__(self, **kw):
kw = self.normalize(**kw)
kw = self.default(**kw)
kw.update(self.default(**kw))
self.validate(**kw)
self.execute(**kw)

View File

@ -241,14 +241,13 @@ class test_cmd(ClassChecker):
fill = dict(
default_from='the default',
)
filled = dict(
default = dict(
option0='the default',
option1='the default',
default_from='the default',
)
sub = self.subcls()
assert sub.default(**no_fill) == no_fill
assert sub.default(**fill) == filled
assert sub.default(**no_fill) == {}
assert sub.default(**fill) == default
def test_obj():