summaryrefslogtreecommitdiffstats
path: root/nova/api
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2011-12-16 20:04:57 +0000
committerGerrit Code Review <review@openstack.org>2011-12-16 20:04:57 +0000
commitee34849f091658dbb9adb73b7a31ad3ca85b4a01 (patch)
tree24131e71cf5a3fd128e89057f87c15b686bd53ff /nova/api
parent6bfd2c7990650475cf10d0903ae79cf8fb67dfff (diff)
parentbaf05561c4a43a3c361e6e0e9f68767150165244 (diff)
Merge "Pull resource extensions into APIRouter"
Diffstat (limited to 'nova/api')
-rw-r--r--nova/api/openstack/v2/__init__.py26
-rw-r--r--nova/api/openstack/v2/extensions.py40
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