summaryrefslogtreecommitdiffstats
path: root/nova
diff options
context:
space:
mode:
authorAlex Meade <alex.meade@rackspace.com>2011-08-25 16:35:04 -0400
committerAlex Meade <alex.meade@rackspace.com>2011-08-25 16:35:04 -0400
commitb02a5e4f581590c1bf31dae1c9c2bc1e448a6106 (patch)
tree940515cdd686cfa0a0e5a85a6e685781106e8165 /nova
parentaafd1ff68f2f6085ddf0d6762ed9ed594d23a321 (diff)
DRYed up code by moving _to_xml into XMLDictSerializer
Diffstat (limited to 'nova')
-rw-r--r--nova/api/openstack/common.py5
-rw-r--r--nova/api/openstack/flavors.py5
-rw-r--r--nova/api/openstack/images.py5
-rw-r--r--nova/api/openstack/ips.py6
-rw-r--r--nova/api/openstack/servers.py4
-rw-r--r--nova/api/openstack/wsgi.py5
-rw-r--r--nova/tests/api/openstack/test_common.py14
-rw-r--r--nova/tests/api/openstack/test_flavors.py27
-rw-r--r--nova/tests/api/openstack/test_images.py45
-rw-r--r--nova/tests/api/openstack/test_servers.py89
10 files changed, 181 insertions, 24 deletions
diff --git a/nova/api/openstack/common.py b/nova/api/openstack/common.py
index d9371b89a..7dde68975 100644
--- a/nova/api/openstack/common.py
+++ b/nova/api/openstack/common.py
@@ -302,11 +302,6 @@ class MetadataXMLSerializer(wsgi.XMLDictSerializer):
meta_elem.text = value
return meta_elem
- def _to_xml(self, root):
- """Convert the xml object to an xml string."""
-
- return etree.tostring(root, encoding='UTF-8')
-
def index(self, metadata_dict):
metadata = etree.Element('metadata', nsmap=self.NSMAP)
self._populate_metadata(metadata, metadata_dict.get('metadata', {}))
diff --git a/nova/api/openstack/flavors.py b/nova/api/openstack/flavors.py
index f689aa7ab..805aad772 100644
--- a/nova/api/openstack/flavors.py
+++ b/nova/api/openstack/flavors.py
@@ -99,11 +99,6 @@ class FlavorXMLSerializer(wsgi.XMLDictSerializer):
elem.set('href', link['href'])
return flavor_elem
- def _to_xml(self, root):
- """Convert the xml object to an xml string."""
-
- return etree.tostring(root, encoding='UTF-8')
-
def show(self, flavor_container):
flavor = etree.Element('flavor', nsmap=self.NSMAP)
self._populate_flavor(flavor, flavor_container['flavor'], True)
diff --git a/nova/api/openstack/images.py b/nova/api/openstack/images.py
index edd26c171..48c53d6d5 100644
--- a/nova/api/openstack/images.py
+++ b/nova/api/openstack/images.py
@@ -254,11 +254,6 @@ class ImageXMLSerializer(wsgi.XMLDictSerializer):
elem.set('href', link['href'])
return image_elem
- def _to_xml(self, root):
- """Convert the xml object to an xml string."""
-
- return etree.tostring(root, encoding='UTF-8')
-
def index(self, images_dict):
images = etree.Element('images', nsmap=self.NSMAP)
for image_dict in images_dict['images']:
diff --git a/nova/api/openstack/ips.py b/nova/api/openstack/ips.py
index 0147d66f8..d5a715dda 100644
--- a/nova/api/openstack/ips.py
+++ b/nova/api/openstack/ips.py
@@ -104,7 +104,7 @@ class ControllerV11(Controller):
class IPXMLSerializer(wsgi.XMLDictSerializer):
- NSMAP = {None: xmlutil.XMLNS_V11, 'atom': xmlutil.XMLNS_ATOM}
+ NSMAP = {None: xmlutil.XMLNS_V11}
def __init__(self, xmlns=wsgi.XMLNS_V11):
super(IPXMLSerializer, self).__init__(xmlns=xmlns)
@@ -125,10 +125,6 @@ class IPXMLSerializer(wsgi.XMLDictSerializer):
ip_elem.set('addr', ip_dict['addr'])
return network_elem
- def _to_xml(self, root):
- """Convert the xml object to an xml string."""
- return etree.tostring(root, encoding='UTF-8')
-
def show(self, network_dict):
(network_id, ip_dicts) = network_dict.items()[0]
network = self._create_network_node(network_id, ip_dicts)
diff --git a/nova/api/openstack/servers.py b/nova/api/openstack/servers.py
index b978dea08..fa5b7c023 100644
--- a/nova/api/openstack/servers.py
+++ b/nova/api/openstack/servers.py
@@ -914,10 +914,6 @@ class ServerXMLSerializer(wsgi.XMLDictSerializer):
elem.set('href', link['href'])
return server_elem
- def _to_xml(self, root):
- """Convert the xml object to an xml string."""
- return etree.tostring(root, encoding='UTF-8')
-
def index(self, servers_dict):
servers = etree.Element('servers', nsmap=self.NSMAP)
for server_dict in servers_dict['servers']:
diff --git a/nova/api/openstack/wsgi.py b/nova/api/openstack/wsgi.py
index 8641e960a..bdcadcb99 100644
--- a/nova/api/openstack/wsgi.py
+++ b/nova/api/openstack/wsgi.py
@@ -1,5 +1,6 @@
import json
+from lxml import etree
import webob
from xml.dom import minidom
from xml.parsers import expat
@@ -392,6 +393,10 @@ class XMLDictSerializer(DictSerializer):
link_nodes.append(link_node)
return link_nodes
+ def _to_xml(self, root):
+ """Convert the xml object to an xml string."""
+ return etree.tostring(root, encoding='UTF-8', xml_declaration=True)
+
class ResponseHeadersSerializer(ActionDispatcher):
"""Default response headers serialization"""
diff --git a/nova/tests/api/openstack/test_common.py b/nova/tests/api/openstack/test_common.py
index 2e5bf08fa..867e9d446 100644
--- a/nova/tests/api/openstack/test_common.py
+++ b/nova/tests/api/openstack/test_common.py
@@ -320,6 +320,20 @@ class MetadataXMLDeserializationTest(test.TestCase):
class MetadataXMLSerializationTest(test.TestCase):
+ def test_xml_declaration(self):
+ serializer = common.MetadataXMLSerializer()
+ fixture = {
+ 'metadata': {
+ 'one': 'two',
+ 'three': 'four',
+ },
+ }
+
+ output = serializer.serialize(fixture, 'index')
+ print output
+ has_dec = output.startswith("<?xml version='1.0' encoding='UTF-8'?>")
+ self.assertTrue(has_dec)
+
def test_index(self):
serializer = common.MetadataXMLSerializer()
fixture = {
diff --git a/nova/tests/api/openstack/test_flavors.py b/nova/tests/api/openstack/test_flavors.py
index ea5038b39..a3c5bd107 100644
--- a/nova/tests/api/openstack/test_flavors.py
+++ b/nova/tests/api/openstack/test_flavors.py
@@ -267,6 +267,33 @@ class FlavorsTest(test.TestCase):
class FlavorsXMLSerializationTest(test.TestCase):
+ def test_xml_declaration(self):
+ serializer = flavors.FlavorXMLSerializer()
+
+ fixture = {
+ "flavor": {
+ "id": "12",
+ "name": "asdf",
+ "ram": "256",
+ "disk": "10",
+ "links": [
+ {
+ "rel": "self",
+ "href": "http://localhost/v1.1/fake/flavors/12",
+ },
+ {
+ "rel": "bookmark",
+ "href": "http://localhost/fake/flavors/12",
+ },
+ ],
+ },
+ }
+
+ output = serializer.serialize(fixture, 'show')
+ print output
+ has_dec = output.startswith("<?xml version='1.0' encoding='UTF-8'?>")
+ self.assertTrue(has_dec)
+
def test_show(self):
serializer = flavors.FlavorXMLSerializer()
diff --git a/nova/tests/api/openstack/test_images.py b/nova/tests/api/openstack/test_images.py
index 145cf527c..97e940974 100644
--- a/nova/tests/api/openstack/test_images.py
+++ b/nova/tests/api/openstack/test_images.py
@@ -1138,6 +1138,51 @@ class ImageXMLSerializationTest(test.TestCase):
IMAGE_HREF = 'http://localhost/v1.1/fake/images/%s'
IMAGE_BOOKMARK = 'http://localhost/fake/images/%s'
+ def test_xml_declaration(self):
+ serializer = images.ImageXMLSerializer()
+
+ fixture = {
+ 'image': {
+ 'id': 1,
+ 'name': 'Image1',
+ 'created': self.TIMESTAMP,
+ 'updated': self.TIMESTAMP,
+ 'status': 'ACTIVE',
+ 'progress': 80,
+ 'server': {
+ 'id': '1',
+ 'links': [
+ {
+ 'href': self.SERVER_HREF,
+ 'rel': 'self',
+ },
+ {
+ 'href': self.SERVER_BOOKMARK,
+ 'rel': 'bookmark',
+ },
+ ],
+ },
+ 'metadata': {
+ 'key1': 'value1',
+ },
+ 'links': [
+ {
+ 'href': self.IMAGE_HREF % 1,
+ 'rel': 'self',
+ },
+ {
+ 'href': self.IMAGE_BOOKMARK % 1,
+ 'rel': 'bookmark',
+ },
+ ],
+ },
+ }
+
+ output = serializer.serialize(fixture, 'show')
+ print output
+ has_dec = output.startswith("<?xml version='1.0' encoding='UTF-8'?>")
+ self.assertTrue(has_dec)
+
def test_show(self):
serializer = images.ImageXMLSerializer()
diff --git a/nova/tests/api/openstack/test_servers.py b/nova/tests/api/openstack/test_servers.py
index 0c816f965..d80846747 100644
--- a/nova/tests/api/openstack/test_servers.py
+++ b/nova/tests/api/openstack/test_servers.py
@@ -3163,6 +3163,18 @@ class TestAddressesXMLSerialization(test.TestCase):
serializer = nova.api.openstack.ips.IPXMLSerializer()
+ def test_xml_declaration(self):
+ fixture = {
+ 'network_2': [
+ {'addr': '192.168.0.1', 'version': 4},
+ {'addr': 'fe80::beef', 'version': 6},
+ ],
+ }
+ output = self.serializer.serialize(fixture, 'show')
+ print output
+ has_dec = output.startswith("<?xml version='1.0' encoding='UTF-8'?>")
+ self.assertTrue(has_dec)
+
def test_show(self):
fixture = {
'network_2': [
@@ -3918,6 +3930,83 @@ class ServerXMLSerializationTest(test.TestCase):
self.maxDiff = None
test.TestCase.setUp(self)
+ def test_xml_declaration(self):
+ serializer = servers.ServerXMLSerializer()
+
+ fixture = {
+ "server": {
+ "id": 1,
+ "uuid": FAKE_UUID,
+ 'created': self.TIMESTAMP,
+ 'updated': self.TIMESTAMP,
+ "progress": 0,
+ "name": "test_server",
+ "status": "BUILD",
+ "hostId": 'e4d909c290d0fb1ca068ffaddf22cbd0',
+ "accessIPv4": "1.2.3.4",
+ "accessIPv6": "fead::1234",
+ "image": {
+ "id": "5",
+ "links": [
+ {
+ "rel": "bookmark",
+ "href": self.IMAGE_BOOKMARK,
+ },
+ ],
+ },
+ "flavor": {
+ "id": "1",
+ "links": [
+ {
+ "rel": "bookmark",
+ "href": self.FLAVOR_BOOKMARK,
+ },
+ ],
+ },
+ "addresses": {
+ "network_one": [
+ {
+ "version": 4,
+ "addr": "67.23.10.138",
+ },
+ {
+ "version": 6,
+ "addr": "::babe:67.23.10.138",
+ },
+ ],
+ "network_two": [
+ {
+ "version": 4,
+ "addr": "67.23.10.139",
+ },
+ {
+ "version": 6,
+ "addr": "::babe:67.23.10.139",
+ },
+ ],
+ },
+ "metadata": {
+ "Open": "Stack",
+ "Number": "1",
+ },
+ 'links': [
+ {
+ 'href': self.SERVER_HREF,
+ 'rel': 'self',
+ },
+ {
+ 'href': self.SERVER_BOOKMARK,
+ 'rel': 'bookmark',
+ },
+ ],
+ }
+ }
+
+ output = serializer.serialize(fixture, 'show')
+ print output
+ has_dec = output.startswith("<?xml version='1.0' encoding='UTF-8'?>")
+ self.assertTrue(has_dec)
+
def test_show(self):
serializer = servers.ServerXMLSerializer()