summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrian Waldon <brian.waldon@rackspace.com>2011-07-27 17:20:42 -0400
committerBrian Waldon <brian.waldon@rackspace.com>2011-07-27 17:20:42 -0400
commitf9ff78a5ac5f83d789334c36bebfce62af0ea406 (patch)
tree023d0132fd622e85b1cc2b5fd7e233756ea6eb9f
parent572847f9eb43ce23190566439118547ae6d6a992 (diff)
downloadnova-f9ff78a5ac5f83d789334c36bebfce62af0ea406.tar.gz
nova-f9ff78a5ac5f83d789334c36bebfce62af0ea406.tar.xz
nova-f9ff78a5ac5f83d789334c36bebfce62af0ea406.zip
refactoring MetadataXMLDeserializer in wsgi/common
-rw-r--r--nova/api/openstack/common.py12
-rw-r--r--nova/api/openstack/create_instance_helper.py7
-rw-r--r--nova/api/openstack/wsgi.py13
3 files changed, 16 insertions, 16 deletions
diff --git a/nova/api/openstack/common.py b/nova/api/openstack/common.py
index 24c82035a..a99951764 100644
--- a/nova/api/openstack/common.py
+++ b/nova/api/openstack/common.py
@@ -196,7 +196,17 @@ def get_version_from_href(href):
return version
-class MetadataXMLDeserializer(wsgi.MetadataXMLDeserializer):
+class MetadataXMLDeserializer(wsgi.XMLDeserializer):
+
+ def extract_metadata(self, metadata_node):
+ """Marshal the metadata attribute of a parsed request"""
+ if metadata_node is None:
+ return None
+ metadata = {}
+ for meta_node in self.find_children_named(metadata_node, "meta"):
+ key = meta_node.getAttribute("key")
+ metadata[key] = self.extract_text(meta_node)
+ return metadata
def _extract_metadata_container(self, datastring):
dom = minidom.parseString(datastring)
diff --git a/nova/api/openstack/create_instance_helper.py b/nova/api/openstack/create_instance_helper.py
index f8317565e..70532cf79 100644
--- a/nova/api/openstack/create_instance_helper.py
+++ b/nova/api/openstack/create_instance_helper.py
@@ -28,6 +28,7 @@ from nova import quota
from nova import utils
from nova.compute import instance_types
+from nova.api.openstack import common
from nova.api.openstack import wsgi
from nova.auth import manager as auth_manager
@@ -285,7 +286,7 @@ class CreateInstanceHelper(object):
return password
-class ServerXMLDeserializer(wsgi.MetadataXMLDeserializer):
+class ServerXMLDeserializer(wsgi.XMLDeserializer):
"""
Deserializer to handle xml-formatted server create requests.
@@ -293,6 +294,8 @@ class ServerXMLDeserializer(wsgi.MetadataXMLDeserializer):
and personality attributes
"""
+ metadata_deserializer = common.MetadataXMLDeserializer()
+
def create(self, string):
"""Deserialize an xml-formatted server create request"""
dom = minidom.parseString(string)
@@ -307,7 +310,7 @@ class ServerXMLDeserializer(wsgi.MetadataXMLDeserializer):
if server_node.getAttribute(attr):
server[attr] = server_node.getAttribute(attr)
metadata_node = self.find_first_child_named(server_node, "metadata")
- metadata = self.extract_metadata(metadata_node)
+ metadata = self.metadata_deserializer.extract_metadata(metadata_node)
if metadata is not None:
server["metadata"] = metadata
personality = self._extract_personality(server_node)
diff --git a/nova/api/openstack/wsgi.py b/nova/api/openstack/wsgi.py
index a28443d12..d10424d79 100644
--- a/nova/api/openstack/wsgi.py
+++ b/nova/api/openstack/wsgi.py
@@ -161,19 +161,6 @@ class XMLDeserializer(TextDeserializer):
return {'body': self._from_xml(datastring)}
-class MetadataXMLDeserializer(XMLDeserializer):
-
- def extract_metadata(self, metadata_node):
- """Marshal the metadata attribute of a parsed request"""
- if metadata_node is None:
- return None
- metadata = {}
- for meta_node in self.find_children_named(metadata_node, "meta"):
- key = meta_node.getAttribute("key")
- metadata[key] = self.extract_text(meta_node)
- return metadata
-
-
class RequestHeadersDeserializer(ActionDispatcher):
"""Default request headers deserializer"""