]> review.fuel-infra Code Review - openstack-build/neutron-build.git/commitdiff
Vinkesh/Deepak | Moved plugin related checks in ExtensionManager code to PluginAwareE...
authorDeepak N <deepak.n@thoughtworks.com>
Tue, 19 Jul 2011 06:23:57 +0000 (11:53 +0530)
committerDeepak N <deepak.n@thoughtworks.com>
Tue, 19 Jul 2011 06:23:57 +0000 (11:53 +0530)
quantum/common/extensions.py
tests/unit/test_extensions.py

index 5d24a3d816cd1ed47e116c226ec444efc093109c..772beaaafe250a25adb383027aaf110006d12eea 100644 (file)
@@ -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.
 
index 4472d2377a43b750680ccdeea17eea44c8d92b8a..750802381362abe548b4fc549efd424e257a269c 100644 (file)
@@ -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"])