Vinkesh/Deepak | Moved plugin related checks in ExtensionManager code to PluginAwareExtensionManager
This commit is contained in:
parent
2de192bb46
commit
4779f609f3
|
@ -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.
|
||||
|
||||
|
|
|
@ -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 self.ext_mgr.extensions)
|
||||
self.assertFalse('invalid_extension' in self.ext_mgr.extensions)
|
||||
self.assertTrue('valid_extension' in ext_mgr.extensions)
|
||||
self.assertFalse('invalid_extension' in 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"])
|
||||
|
|
Loading…
Reference in New Issue