Module: check_mk
Branch: master
Commit: ed6658cd7ca67d72c02260f0ed13d36e3d7d3aa9
URL:
http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=ed6658cd7ca67d…
Author: Sven Panne <sp(a)mathias-kettner.de>
Date: Fri Jan 11 12:04:35 2019 +0100
Fixed a TODO: ClassRegistry.register() checks parameter now.
Change-Id: Ibe8bb3d51c2ee1e52bccf2be6c37f1ad7e870f9f
---
cmk/gui/plugins/userdb/utils.py | 4 ++--
cmk/utils/plugin_registry.py | 7 ++++---
tests/unit/cmk/utils/test_plugin_registry.py | 6 +++---
3 files changed, 9 insertions(+), 8 deletions(-)
diff --git a/cmk/gui/plugins/userdb/utils.py b/cmk/gui/plugins/userdb/utils.py
index 7ebf758..0571107 100644
--- a/cmk/gui/plugins/userdb/utils.py
+++ b/cmk/gui/plugins/userdb/utils.py
@@ -195,7 +195,7 @@ class UserConnectorRegistry(cmk.utils.plugin_registry.ClassRegistry):
Have a look at the base class for details."""
def plugin_base_class(self):
- return cmk.gui.plugins.userdb.UserConnector
+ return UserConnector
def _register(self, plugin_class):
plugin_class.migrate_config()
@@ -210,7 +210,7 @@ class UserAttributeRegistry(cmk.utils.plugin_registry.ClassRegistry):
Have a look at the base class for details."""
def plugin_base_class(self):
- return cmk.gui.plugins.userdb.UserAttribute
+ return UserAttribute
def _register(self, plugin_class):
self._entries[plugin_class.name()] = plugin_class
diff --git a/cmk/utils/plugin_registry.py b/cmk/utils/plugin_registry.py
index d739530..a409d32 100644
--- a/cmk/utils/plugin_registry.py
+++ b/cmk/utils/plugin_registry.py
@@ -30,8 +30,6 @@ import abc
# for example let all use a static/class method .name().
# We could standardize this by making all plugin classes inherit
# from a plugin base class instead of "object".
-# TODO: _register should always validate that the given plugin class is
-# based on plugin_base_class
# TODO: Decide which base class to implement
# (
https://docs.python.org/2/library/collections.html) and cleanup
@@ -59,6 +57,9 @@ class ClassRegistry(object):
def register(self, plugin_class):
"""Decorator to register a class with the
registry"""
+ if not issubclass(plugin_class, self.plugin_base_class()):
+ raise TypeError('%s is not a subclass of %s' %
(plugin_class.__name__,
+
self.plugin_base_class().__name__))
self._register(plugin_class)
return plugin_class
@@ -66,7 +67,7 @@ class ClassRegistry(object):
"""Method for registering a plugin with the registry.
Result is equal to use the register() decorator"""
- self._register(plugin_class)
+ self.register(plugin_class)
@abc.abstractmethod
def _register(self, plugin_class):
diff --git a/tests/unit/cmk/utils/test_plugin_registry.py
b/tests/unit/cmk/utils/test_plugin_registry.py
index 267603d..049510f 100644
--- a/tests/unit/cmk/utils/test_plugin_registry.py
+++ b/tests/unit/cmk/utils/test_plugin_registry.py
@@ -32,7 +32,7 @@ def test_decorator_registration():
assert registry.items() == []
@registry.register
- class DecoratedPlugin(object):
+ class DecoratedPlugin(Plugin):
pass
assert registry.get("DecoratedPlugin") == DecoratedPlugin
@@ -42,7 +42,7 @@ def test_method_registration():
registry = PluginRegistry()
assert registry.items() == []
- class MethodRegisteredPlugin(object):
+ class MethodRegisteredPlugin(Plugin):
pass
registry.register_plugin(MethodRegisteredPlugin)
@@ -59,7 +59,7 @@ def test_delitem(basic_registry):
del basic_registry["bla"]
@basic_registry.register
- class DelPlugin(object):
+ class DelPlugin(Plugin):
pass
del basic_registry["DelPlugin"]