Explorar el Código

Middleware list in factory

almahmoud hace 7 años
padre
commit
0ecadbe178

+ 6 - 4
cloudbridge/cloud/base/provider.py

@@ -2,13 +2,14 @@
 import functools
 import functools
 import logging
 import logging
 import os
 import os
-from copy import deepcopy
 from os.path import expanduser
 from os.path import expanduser
 try:
 try:
     from configparser import ConfigParser
     from configparser import ConfigParser
 except ImportError:  # Python 2
 except ImportError:  # Python 2
     from ConfigParser import SafeConfigParser as ConfigParser
     from ConfigParser import SafeConfigParser as ConfigParser
 
 
+from pyeventsystem.middleware import SimpleMiddlewareManager
+
 import six
 import six
 
 
 from ..base.middleware import ExceptionWrappingMiddleware
 from ..base.middleware import ExceptionWrappingMiddleware
@@ -82,12 +83,13 @@ class BaseConfiguration(Configuration):
 
 
 
 
 class BaseCloudProvider(CloudProvider):
 class BaseCloudProvider(CloudProvider):
-    def __init__(self, config, factory):
-        self._factory = factory
+    def __init__(self, config, middleware_list=[]):
         self._config = BaseConfiguration(config)
         self._config = BaseConfiguration(config)
         self._config_parser = ConfigParser()
         self._config_parser = ConfigParser()
         self._config_parser.read(CloudBridgeConfigLocations)
         self._config_parser.read(CloudBridgeConfigLocations)
-        self._middleware = deepcopy(factory.middleware)
+        self._middleware = SimpleMiddlewareManager()
+        for each_middleware in middleware_list:
+            self._middleware.add(each_middleware)
         self.add_required_middleware()
         self.add_required_middleware()
 
 
     @property
     @property

+ 6 - 5
cloudbridge/cloud/factory.py

@@ -4,8 +4,6 @@ import logging
 import pkgutil
 import pkgutil
 from collections import defaultdict
 from collections import defaultdict
 
 
-from pyeventsystem.middleware import SimpleMiddlewareManager
-
 from cloudbridge.cloud import providers
 from cloudbridge.cloud import providers
 from cloudbridge.cloud.interfaces import CloudProvider
 from cloudbridge.cloud.interfaces import CloudProvider
 from cloudbridge.cloud.interfaces import TestMockHelperMixin
 from cloudbridge.cloud.interfaces import TestMockHelperMixin
@@ -29,14 +27,17 @@ class CloudProviderFactory(object):
     """
     """
 
 
     def __init__(self):
     def __init__(self):
-        self._middleware = SimpleMiddlewareManager()
+        self._middleware = []
         self.provider_list = defaultdict(dict)
         self.provider_list = defaultdict(dict)
         log.debug("Providers List: %s", self.provider_list)
         log.debug("Providers List: %s", self.provider_list)
 
 
     @property
     @property
-    def middleware(self):
+    def added_middleware(self):
         return self._middleware
         return self._middleware
 
 
+    def add_middleware(self, middleware):
+        self._middleware.append(middleware)
+
     def register_provider_class(self, cls):
     def register_provider_class(self, cls):
         """
         """
         Registers a provider class with the factory. The class must
         Registers a provider class with the factory. The class must
@@ -143,7 +144,7 @@ class CloudProviderFactory(object):
                 'A provider with name {0} could not be'
                 'A provider with name {0} could not be'
                 ' found'.format(name))
                 ' found'.format(name))
         log.debug("Created '%s' provider", name)
         log.debug("Created '%s' provider", name)
-        return provider_class(config, self)
+        return provider_class(config, self.added_middleware)
 
 
     def get_provider_class(self, name):
     def get_provider_class(self, name):
         """
         """

+ 2 - 2
cloudbridge/cloud/providers/aws/provider.py

@@ -17,8 +17,8 @@ class AWSCloudProvider(BaseCloudProvider):
     PROVIDER_ID = 'aws'
     PROVIDER_ID = 'aws'
     AWS_INSTANCE_DATA_DEFAULT_URL = "http://cloudve.org/cb-aws-vmtypes.json"
     AWS_INSTANCE_DATA_DEFAULT_URL = "http://cloudve.org/cb-aws-vmtypes.json"
 
 
-    def __init__(self, config, factory):
-        super(AWSCloudProvider, self).__init__(config, factory)
+    def __init__(self, config, middleware_list=[]):
+        super(AWSCloudProvider, self).__init__(config, middleware_list)
 
 
         # Initialize cloud connection fields
         # Initialize cloud connection fields
         # These are passed as-is to Boto
         # These are passed as-is to Boto

+ 2 - 2
cloudbridge/cloud/providers/azure/provider.py

@@ -23,8 +23,8 @@ log = logging.getLogger(__name__)
 class AzureCloudProvider(BaseCloudProvider):
 class AzureCloudProvider(BaseCloudProvider):
     PROVIDER_ID = 'azure'
     PROVIDER_ID = 'azure'
 
 
-    def __init__(self, config, factory):
-        super(AzureCloudProvider, self).__init__(config, factory)
+    def __init__(self, config, middleware_list=[]):
+        super(AzureCloudProvider, self).__init__(config, middleware_list)
 
 
         # mandatory config values
         # mandatory config values
         self.subscription_id = self._get_config_value(
         self.subscription_id = self._get_config_value(

+ 2 - 2
cloudbridge/cloud/providers/gcp/provider.py

@@ -196,8 +196,8 @@ class GCPCloudProvider(BaseCloudProvider):
 
 
     PROVIDER_ID = 'gcp'
     PROVIDER_ID = 'gcp'
 
 
-    def __init__(self, config, factory):
-        super(GCPCloudProvider, self).__init__(config, factory)
+    def __init__(self, config, middleware_list=[]):
+        super(GCPCloudProvider, self).__init__(config, middleware_list)
 
 
         # Disable warnings about file_cache not being available when using
         # Disable warnings about file_cache not being available when using
         # oauth2client >= 4.0.0.
         # oauth2client >= 4.0.0.

+ 2 - 2
cloudbridge/cloud/providers/mock/provider.py

@@ -25,9 +25,9 @@ class MockAWSCloudProvider(AWSCloudProvider, TestMockHelperMixin):
     """
     """
     PROVIDER_ID = 'mock'
     PROVIDER_ID = 'mock'
 
 
-    def __init__(self, config, factory):
+    def __init__(self, config, middleware_list=[]):
         self.setUpMock()
         self.setUpMock()
-        super(MockAWSCloudProvider, self).__init__(config, factory)
+        super(MockAWSCloudProvider, self).__init__(config, middleware_list)
 
 
     def setUpMock(self):
     def setUpMock(self):
         """
         """

+ 2 - 2
cloudbridge/cloud/providers/openstack/provider.py

@@ -31,8 +31,8 @@ class OpenStackCloudProvider(BaseCloudProvider):
 
 
     PROVIDER_ID = 'openstack'
     PROVIDER_ID = 'openstack'
 
 
-    def __init__(self, config, factory):
-        super(OpenStackCloudProvider, self).__init__(config, factory)
+    def __init__(self, config, middleware_list=[]):
+        super(OpenStackCloudProvider, self).__init__(config, middleware_list)
 
 
         # Initialize cloud connection fields
         # Initialize cloud connection fields
         self.username = self._get_config_value(
         self.username = self._get_config_value(

+ 1 - 1
test/helpers/__init__.py

@@ -262,7 +262,7 @@ class ProviderTestBase(unittest.TestCase):
         config = {'default_wait_interval':
         config = {'default_wait_interval':
                   self.get_provider_wait_interval(provider_class),
                   self.get_provider_wait_interval(provider_class),
                   'default_result_limit': 5}
                   'default_result_limit': 5}
-        return provider_class(config, factory)
+        return provider_class(config)
 
 
     @property
     @property
     def provider(self):
     def provider(self):

+ 1 - 1
test/test_cloud_factory.py

@@ -99,7 +99,7 @@ class CloudFactoryTestCase(unittest.TestCase):
 
 
         factory = CloudProviderFactory()
         factory = CloudProviderFactory()
         some_obj = SomeDummyClass()
         some_obj = SomeDummyClass()
-        factory.middleware.add(some_obj)
+        factory.add_middleware(some_obj)
         provider_name = cb_helpers.get_env("CB_TEST_PROVIDER", "aws")
         provider_name = cb_helpers.get_env("CB_TEST_PROVIDER", "aws")
         prov = factory.create_provider(provider_name, {})
         prov = factory.create_provider(provider_name, {})
         # Any dispatched event should be intercepted and return the string
         # Any dispatched event should be intercepted and return the string