summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ipalib/frontend.py1
-rw-r--r--ipalib/plugable.py9
-rw-r--r--tests/test_ipalib/test_plugable.py8
3 files changed, 15 insertions, 3 deletions
diff --git a/ipalib/frontend.py b/ipalib/frontend.py
index 4ff77c59a..c614e5479 100644
--- a/ipalib/frontend.py
+++ b/ipalib/frontend.py
@@ -1087,7 +1087,6 @@ class Property(Attribute):
rules=self.rules,
normalize=self.normalize,
)
- super(Property, self).__init__()
def __rules_iter(self):
"""
diff --git a/ipalib/plugable.py b/ipalib/plugable.py
index f3b35d30b..019386c37 100644
--- a/ipalib/plugable.py
+++ b/ipalib/plugable.py
@@ -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):
diff --git a/tests/test_ipalib/test_plugable.py b/tests/test_ipalib/test_plugable.py
index b381675b6..b05943235 100644
--- a/tests/test_ipalib/test_plugable.py
+++ b/tests/test_ipalib/test_plugable.py
@@ -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.