Plugin.__init__() now checks that subclass hasn't defined attributes that conflict with the logger methods; added corresponding unit test

This commit is contained in:
Jason Gerard DeRose
2008-12-21 19:34:32 -07:00
parent 4390523b7f
commit 9d091c98f1
3 changed files with 15 additions and 3 deletions

View File

@@ -1087,7 +1087,6 @@ class Property(Attribute):
rules=self.rules,
normalize=self.normalize,
)
super(Property, self).__init__()
def __rules_iter(self):
"""

View File

@@ -263,8 +263,13 @@ class Plugin(ReadOnly):
self.summary = '<%s>' % self.fullname
else:
self.summary = self.doc.split('\n\n', 1)[0]
log = logging.getLogger('ipa')
for name in ('debug', 'info', 'warning', 'error', 'critical'):
log = logging.getLogger(self.fullname)
for name in ('debug', 'info', 'warning', 'error', 'critical', 'exception'):
if hasattr(self, name):
raise StandardError(
'%s.%s attribute (%r) conflicts with Plugin logger' % (
self.name, name, getattr(self, name))
)
setattr(self, name, getattr(log, name))
def __get_api(self):

View File

@@ -337,6 +337,14 @@ class test_Plugin(ClassChecker):
assert o.doc is None
assert o.summary == '<%s>' % o.fullname
# Test that Plugin makes sure the subclass hasn't defined attributes
# whose names conflict with the logger methods set in Plugin.__init__():
class check(self.cls):
info = 'whatever'
e = raises(StandardError, check)
assert str(e) == \
"check.info attribute ('whatever') conflicts with Plugin logger"
def test_implements(self):
"""
Test the `ipalib.plugable.Plugin.implements` classmethod.