summaryrefslogtreecommitdiffstats
path: root/nova/api
diff options
context:
space:
mode:
authorDan Prince <dan.prince@rackspace.com>2011-03-14 22:24:34 -0400
committerDan Prince <dan.prince@rackspace.com>2011-03-14 22:24:34 -0400
commitf0141b1616e1b1fc9e52e33b37cc3a1091c57587 (patch)
treecaf209d3748b2274b49aceadc2925f3d8af09316 /nova/api
parent229c5bc3324d5df39ca959d71a540a806bc5ad3e (diff)
Moved extended resource code into the extensions.py module.
Diffstat (limited to 'nova/api')
-rw-r--r--nova/api/openstack/__init__.py6
-rw-r--r--nova/api/openstack/extensions.py29
2 files changed, 21 insertions, 14 deletions
diff --git a/nova/api/openstack/__init__.py b/nova/api/openstack/__init__.py
index 8a458eea1..ff91c77cf 100644
--- a/nova/api/openstack/__init__.py
+++ b/nova/api/openstack/__init__.py
@@ -31,7 +31,6 @@ from nova.api.openstack import accounts
from nova.api.openstack import faults
from nova.api.openstack import backup_schedules
from nova.api.openstack import consoles
-from nova.api.openstack import extensions
from nova.api.openstack import flavors
from nova.api.openstack import images
from nova.api.openstack import servers
@@ -121,11 +120,6 @@ class APIRouter(wsgi.Router):
collection={'detail': 'GET'},
controller=shared_ip_groups.Controller())
- if ext_mgr is None:
- ext_mgr = extensions.ExtensionManager(FLAGS.osapi_extensions_path)
- for resource in ext_mgr.get_resources():
- resource.add_routes(mapper)
-
super(APIRouter, self).__init__(mapper)
diff --git a/nova/api/openstack/extensions.py b/nova/api/openstack/extensions.py
index e41de3120..f32471051 100644
--- a/nova/api/openstack/extensions.py
+++ b/nova/api/openstack/extensions.py
@@ -68,7 +68,15 @@ class ExtensionMiddleware(wsgi.Middleware):
if ext_mgr is None:
ext_mgr = ExtensionManager(FLAGS.osapi_extensions_path)
- # create custom mapper connections for extended actions
+ # extended resources
+ for resource in ext_mgr.get_resources():
+ mapper.resource(resource.member, resource.collection,
+ controller=resource.controller,
+ collection=resource.collection_actions,
+ member=resource.member_actions,
+ parent_resource=resource.parent)
+
+ # extended actions
for action in ext_mgr.get_actions():
controller = ExtensionActionController(application, action.name,
action.handler)
@@ -124,10 +132,13 @@ class ExtensionManager(object):
"""
resources = []
for ext in self.extensions:
- resources.append(ext.get_resources())
+ resources.extend(ext.get_resources())
return resources
def get_actions(self):
+ """
+ returns a list of ExtensionAction objects
+ """
actions = []
for ext in self.extensions:
actions.extend(ext.get_actions())
@@ -163,10 +174,12 @@ class ExtensionAction(object):
class ExtensionResource(object):
- """
- Example ExtensionResource object. All ExtensionResource objects should
- adhere to this interface.
- """
- def add_routes(self, mapper):
- pass
+ def __init__(self, member, collection, controller,
+ parent=None, collection_actions={}, member_actions={}):
+ self.member = member
+ self.collection = collection
+ self.controller = controller
+ self.parent = parent
+ self.collection_actions = collection_actions
+ self.member_actions = member_actions