diff options
| author | Jenkins <jenkins@review.openstack.org> | 2011-12-16 20:04:57 +0000 |
|---|---|---|
| committer | Gerrit Code Review <review@openstack.org> | 2011-12-16 20:04:57 +0000 |
| commit | ee34849f091658dbb9adb73b7a31ad3ca85b4a01 (patch) | |
| tree | 24131e71cf5a3fd128e89057f87c15b686bd53ff /nova/api | |
| parent | 6bfd2c7990650475cf10d0903ae79cf8fb67dfff (diff) | |
| parent | baf05561c4a43a3c361e6e0e9f68767150165244 (diff) | |
Merge "Pull resource extensions into APIRouter"
Diffstat (limited to 'nova/api')
| -rw-r--r-- | nova/api/openstack/v2/__init__.py | 26 | ||||
| -rw-r--r-- | nova/api/openstack/v2/extensions.py | 40 |
2 files changed, 41 insertions, 25 deletions
diff --git a/nova/api/openstack/v2/__init__.py b/nova/api/openstack/v2/__init__.py index 1ea2ba250..5575cd184 100644 --- a/nova/api/openstack/v2/__init__.py +++ b/nova/api/openstack/v2/__init__.py @@ -26,6 +26,7 @@ import webob.exc from nova.api.openstack.v2 import accounts from nova.api.openstack.v2 import consoles +from nova.api.openstack.v2 import extensions from nova.api.openstack.v2 import flavors from nova.api.openstack.v2 import images from nova.api.openstack.v2 import image_metadata @@ -101,11 +102,36 @@ class APIRouter(base_wsgi.Router): return cls() def __init__(self, ext_mgr=None): + if ext_mgr is None: + ext_mgr = extensions.ExtensionManager() + self.server_members = {} mapper = ProjectMapper() self._setup_routes(mapper) + self._setup_ext_routes(mapper, ext_mgr) super(APIRouter, self).__init__(mapper) + def _setup_ext_routes(self, mapper, ext_mgr): + serializer = wsgi.ResponseSerializer( + {'application/xml': wsgi.XMLDictSerializer()}) + for resource in ext_mgr.get_resources(): + LOG.debug(_('Extended resource: %s'), + resource.collection) + if resource.serializer is None: + resource.serializer = serializer + + kargs = dict( + controller=wsgi.Resource( + resource.controller, resource.deserializer, + resource.serializer), + collection=resource.collection_actions, + member=resource.member_actions) + + if resource.parent: + kargs['parent_resource'] = resource.parent + + mapper.resource(resource.collection, resource.collection, **kargs) + def _setup_routes(self, mapper): server_members = self.server_members server_members['action'] = 'POST' diff --git a/nova/api/openstack/v2/extensions.py b/nova/api/openstack/v2/extensions.py index 91db251f5..b3fbfc923 100644 --- a/nova/api/openstack/v2/extensions.py +++ b/nova/api/openstack/v2/extensions.py @@ -293,27 +293,6 @@ class ExtensionMiddleware(base_wsgi.Middleware): mapper = nova.api.openstack.v2.ProjectMapper() - serializer = wsgi.ResponseSerializer( - {'application/xml': wsgi.XMLDictSerializer()}) - # extended resources - for resource in ext_mgr.get_resources(): - LOG.debug(_('Extended resource: %s'), - resource.collection) - if resource.serializer is None: - resource.serializer = serializer - - kargs = dict( - controller=wsgi.Resource( - resource.controller, resource.deserializer, - resource.serializer), - collection=resource.collection_actions, - member=resource.member_actions) - - if resource.parent: - kargs['parent_resource'] = resource.parent - - mapper.resource(resource.collection, resource.collection, **kargs) - # extended actions action_resources = self._action_ext_resources(application, ext_mgr, mapper) @@ -368,11 +347,22 @@ class ExtensionManager(object): """ - def __init__(self): - LOG.audit(_('Initializing extension manager.')) + _ext_mgr = None + + @classmethod + def reset(cls): + cls._ext_mgr = None + + def __new__(cls): + if cls._ext_mgr is None: + LOG.audit(_('Initializing extension manager.')) + + cls._ext_mgr = super(ExtensionManager, cls).__new__(cls) + + cls._ext_mgr.extensions = {} + cls._ext_mgr._load_extensions() - self.extensions = {} - self._load_extensions() + return cls._ext_mgr def register(self, ext): # Do nothing if the extension doesn't check out |
