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()
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()
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.
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.
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,
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):
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"])