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

View File

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