74: Finished opt.__rules_iter(); is_rule(obj) now returns False if obj is not callable; updated unit tests

This commit is contained in:
Jason Gerard DeRose 2008-08-07 05:02:56 +00:00
parent 8a6041b797
commit 2cc88a7a32
2 changed files with 15 additions and 19 deletions

View File

@ -35,9 +35,7 @@ def rule(obj):
return obj
def is_rule(obj):
return getattr(obj, RULE_FLAG, False) is True
return callable(obj) and getattr(obj, RULE_FLAG, False) is True
class opt(plugable.ReadOnly):
@ -65,7 +63,12 @@ class opt(plugable.ReadOnly):
rules = property(__get_rules)
def __rules_iter(self):
pass
for name in dir(self):
if name.startswith('_'):
continue
attr = getattr(self, name)
if is_rule(attr):
yield attr
def validate(self, value):
pass

View File

@ -47,27 +47,20 @@ def test_is_rule():
is_rule = public.is_rule
flag = public.RULE_FLAG
class example(object):
class no_call(object):
def __init__(self, value):
if value is not None:
assert value in (True, False)
setattr(self, flag, value)
obj = example(True)
assert getattr(obj, flag) is True
assert is_rule(obj)
obj = example(False)
assert getattr(obj, flag) is False
assert not is_rule(obj)
obj = example(None)
assert not hasattr(obj, flag)
assert not is_rule(obj)
class call(no_call):
def __call__(self):
pass
assert is_rule(call(True))
assert not is_rule(no_call(True))
assert not is_rule(call(False))
assert not is_rule(call(None))
class test_opt():