From: Deepak N Date: Tue, 19 Jul 2011 06:23:57 +0000 (+0530) Subject: Vinkesh/Deepak | Moved plugin related checks in ExtensionManager code to PluginAwareE... X-Git-Url: https://review.fuel-infra.org/gitweb?a=commitdiff_plain;h=4779f609f3900307a028d72ebff85923d286b82e;p=openstack-build%2Fneutron-build.git Vinkesh/Deepak | Moved plugin related checks in ExtensionManager code to PluginAwareExtensionManager --- diff --git a/quantum/common/extensions.py b/quantum/common/extensions.py index 5d24a3d81..772beaaaf 100644 --- a/quantum/common/extensions.py +++ b/quantum/common/extensions.py @@ -261,9 +261,8 @@ class ExtensionMiddleware(wsgi.Middleware): ext_mgr=None): self.ext_mgr = (ext_mgr - or ExtensionManager( - config_params.get('api_extensions_path', - ''), QuantumManager.get_plugin())) + or PluginAwareExtensionManager( + config_params.get('api_extensions_path', ''))) mapper = routes.Mapper() @@ -327,11 +326,9 @@ class ExtensionManager(object): example extension implementation. """ - def __init__(self, path, plugin): + def __init__(self, path): LOG.info(_('Initializing extension manager.')) - self.path = path - self.plugin = plugin self.extensions = {} self._load_all_extensions() @@ -381,25 +378,10 @@ class ExtensionManager(object): LOG.debug(_('Ext description: %s'), extension.get_description()) LOG.debug(_('Ext namespace: %s'), extension.get_namespace()) LOG.debug(_('Ext updated: %s'), extension.get_updated()) - return (self._plugin_supports(extension) and - self._plugin_implements_interface(extension)) except AttributeError as ex: LOG.exception(_("Exception loading extension: %s"), unicode(ex)) return False - - def _plugin_supports(self, extension): - return (hasattr(self.plugin, "supports_extension") and - self.plugin.supports_extension(extension)) - - def _plugin_implements_interface(self, extension): - if(not hasattr(extension, "get_plugin_interface") or - extension.get_plugin_interface() is None): - return True - return isinstance(self.plugin, extension.get_plugin_interface()) - - def _get_public_methods(self, klass): - return filter(lambda name: not(name.startswith("_")), - klass.__dict__.keys()) + return True def _load_all_extensions(self): """Load extensions from the configured path. @@ -454,6 +436,31 @@ class ExtensionManager(object): self.extensions[alias] = ext +class PluginAwareExtensionManager(ExtensionManager): + + def __init__(self, path): + self.plugin = QuantumManager.get_plugin() + super(PluginAwareExtensionManager, self).__init__(path) + + def _check_extension(self, extension): + """Checks if plugin supports extension and implements the contract.""" + extension_is_valid = super(PluginAwareExtensionManager, + self)._check_extension(extension) + return (extension_is_valid and + self._plugin_supports(extension) and + self._plugin_implements_interface(extension)) + + def _plugin_supports(self, extension): + return (hasattr(self.plugin, "supports_extension") and + self.plugin.supports_extension(extension)) + + def _plugin_implements_interface(self, extension): + if(not hasattr(extension, "get_plugin_interface") or + extension.get_plugin_interface() is None): + return True + return isinstance(self.plugin, extension.get_plugin_interface()) + + class RequestExtension(object): """Extend requests and responses of core Quantum OpenStack API controllers. diff --git a/tests/unit/test_extensions.py b/tests/unit/test_extensions.py index 4472d2377..750802381 100644 --- a/tests/unit/test_extensions.py +++ b/tests/unit/test_extensions.py @@ -24,7 +24,8 @@ from webtest import TestApp from quantum.common import extensions from quantum.common import wsgi from quantum.common import config -from quantum.common.extensions import ExtensionManager +from quantum.common.extensions import (ExtensionManager, + PluginAwareExtensionManager) extension_index_response = "Try to say this Mr. Knox, sir..." test_conf_file = os.path.join(os.path.dirname(__file__), os.pardir, @@ -121,10 +122,6 @@ class StubPluginInterface(extensions.PluginInterface): class ExtensionManagerTest(unittest.TestCase): - def setUp(self): - self.ext_mgr = setup_extensions_middleware().ext_mgr - super(ExtensionManagerTest, self).setUp() - def test_invalid_extensions_are_not_registered(self): class InvalidExtension(object): @@ -135,11 +132,18 @@ class ExtensionManagerTest(unittest.TestCase): def get_alias(self): return "invalid_extension" - self.ext_mgr.add_extension(InvalidExtension()) - self.ext_mgr.add_extension(StubExtension("valid_extension")) + ext_mgr = ExtensionManager('') + ext_mgr.add_extension(InvalidExtension()) + ext_mgr.add_extension(StubExtension("valid_extension")) + + self.assertTrue('valid_extension' in ext_mgr.extensions) + self.assertFalse('invalid_extension' in ext_mgr.extensions) - self.assertTrue('valid_extension' in self.ext_mgr.extensions) - self.assertFalse('invalid_extension' in self.ext_mgr.extensions) + +class PluginAwareExtensionManagerTest(unittest.TestCase): + + def setUp(self): + self.ext_mgr = PluginAwareExtensionManager('') def test_unsupported_extensions_are_not_loaded(self): self.ext_mgr.plugin = StubPlugin(supported_extensions=["e1", "e3"])