summaryrefslogtreecommitdiffstats
path: root/nova/api
diff options
context:
space:
mode:
authorNaveed Massjouni <naveedm9@gmail.com>2011-07-21 15:08:46 -0400
committerNaveed Massjouni <naveedm9@gmail.com>2011-07-21 15:08:46 -0400
commitaf5c549d7795fcf9fdcb7d8e9193aa985f121fc6 (patch)
tree5b8dbd31fc11cf3086c0a0004a216d87efafb4d1 /nova/api
parent74c399cb2ebb914973c2f0dc6ecf4dd8bbc062d7 (diff)
Moving lp:~rackspace-titan/nova/extensions-xml-serialization to new branch based off of trunk. To remove dep on another branch.
Diffstat (limited to 'nova/api')
-rw-r--r--nova/api/openstack/extensions.py43
-rw-r--r--nova/api/openstack/wsgi.py4
2 files changed, 42 insertions, 5 deletions
diff --git a/nova/api/openstack/extensions.py b/nova/api/openstack/extensions.py
index da06ecd15..e500e51fa 100644
--- a/nova/api/openstack/extensions.py
+++ b/nova/api/openstack/extensions.py
@@ -23,6 +23,7 @@ import sys
import routes
import webob.dec
import webob.exc
+from xml.etree import ElementTree
from nova import exception
from nova import flags
@@ -194,7 +195,7 @@ class ExtensionsResource(wsgi.Resource):
def show(self, req, id):
# NOTE(dprince): the extensions alias is used as the 'id' for show
ext = self.extension_manager.extensions[id]
- return self._translate(ext)
+ return dict(extension=self._translate(ext))
def delete(self, req, id):
raise faults.Fault(webob.exc.HTTPNotFound())
@@ -258,15 +259,18 @@ class ExtensionMiddleware(base_wsgi.Middleware):
mapper = routes.Mapper()
+ serializer = wsgi.ResponseSerializer(
+ {'application/xml': ExtensionsXMLSerializer()})
# extended resources
for resource in ext_mgr.get_resources():
LOG.debug(_('Extended resource: %s'),
resource.collection)
mapper.resource(resource.collection, resource.collection,
- controller=wsgi.Resource(resource.controller),
- collection=resource.collection_actions,
- member=resource.member_actions,
- parent_resource=resource.parent)
+ controller=wsgi.Resource(
+ resource.controller, serializer=serializer),
+ collection=resource.collection_actions,
+ member=resource.member_actions,
+ parent_resource=resource.parent)
# extended actions
action_resources = self._action_ext_resources(application, ext_mgr,
@@ -462,3 +466,32 @@ class ResourceExtension(object):
self.parent = parent
self.collection_actions = collection_actions
self.member_actions = member_actions
+
+
+class ExtensionsXMLSerializer(wsgi.XMLDictSerializer):
+
+ def _add_extension_attributes(self, node, extension):
+ node.setAttribute('name', extension['name'])
+ node.setAttribute('namespace', extension['namespace'])
+ node.setAttribute('alias', extension['alias'])
+ node.setAttribute('updated', extension['updated'])
+
+ def show(self, ext_dict):
+ root = ElementTree.Element('extension');
+ extension = ext_dict['extension']
+ root.set('xmlns', wsgi.XMLNS_V11)
+ root.set('xmlns:atom', wsgi.XMLNS_ATOM)
+ root.set('name', extension['name'])
+ root.set('namespace', extension['namespace'])
+ root.set('alias', extension['alias'])
+ root.set('updated', extension['updated'])
+ desc = ElementTree.Element('description');
+ desc.text = extension['description']
+ root.append(desc)
+ for link in extension.get('links', []):
+ elem = ElementTree.Element('atom:link');
+ elem.set('rel', link['rel'])
+ elem.set('href', link['href'])
+ elem.set('type', link['type'])
+ root.append(elem)
+ return ElementTree.tostring(root)
diff --git a/nova/api/openstack/wsgi.py b/nova/api/openstack/wsgi.py
index 9df6fd058..d9993282f 100644
--- a/nova/api/openstack/wsgi.py
+++ b/nova/api/openstack/wsgi.py
@@ -13,6 +13,7 @@ from nova import wsgi
XMLNS_V10 = 'http://docs.rackspacecloud.com/servers/api/v1.0'
XMLNS_V11 = 'http://docs.openstack.org/compute/api/v1.1'
+XMLNS_ATOM = 'http://www.w3.org/2005/Atom'
LOG = logging.getLogger('nova.api.openstack.wsgi')
@@ -352,6 +353,9 @@ class XMLDictSerializer(DictSerializer):
link_node = xml_doc.createElement('atom:link')
link_node.setAttribute('rel', link['rel'])
link_node.setAttribute('href', link['href'])
+ if link.get('type'):
+ link_node.setAttribute('type', link['type'])
+
link_nodes.append(link_node)
return link_nodes