summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKevin L. Mitchell <kevin.mitchell@rackspace.com>2011-11-28 15:11:04 -0600
committerKevin L. Mitchell <kevin.mitchell@rackspace.com>2011-11-28 15:11:04 -0600
commitfde2bc5fdf585fc44d142b48d4ff5fca317bbc84 (patch)
tree8c1286aa71c0858cfcbbc3ef4a01a51aca93e784
parentbdb1ff73d2f24ba43102143c1ac670fdc0739528 (diff)
downloadnova-fde2bc5fdf585fc44d142b48d4ff5fca317bbc84.tar.gz
nova-fde2bc5fdf585fc44d142b48d4ff5fca317bbc84.tar.xz
nova-fde2bc5fdf585fc44d142b48d4ff5fca317bbc84.zip
Templatize extension handling.
Related to bug 852141: Converts extensions.py to using XML templates instead of the classic XML serializer. Change-Id: I41c9db8eb984f06222e7b42d5040afdf1e1101e8
-rw-r--r--nova/api/openstack/v2/extensions.py74
1 files changed, 37 insertions, 37 deletions
diff --git a/nova/api/openstack/v2/extensions.py b/nova/api/openstack/v2/extensions.py
index 0e59c6d9f..bf7ae8b86 100644
--- a/nova/api/openstack/v2/extensions.py
+++ b/nova/api/openstack/v2/extensions.py
@@ -495,43 +495,43 @@ class ResourceExtension(object):
self.serializer = serializer
-class ExtensionsXMLSerializer(wsgi.XMLDictSerializer):
-
- NSMAP = {None: xmlutil.XMLNS_V11, 'atom': xmlutil.XMLNS_ATOM}
-
- def show(self, ext_dict):
- ext = etree.Element('extension', nsmap=self.NSMAP)
- self._populate_ext(ext, ext_dict['extension'])
- return self._to_xml(ext)
-
- def index(self, exts_dict):
- exts = etree.Element('extensions', nsmap=self.NSMAP)
- for ext_dict in exts_dict['extensions']:
- ext = etree.SubElement(exts, 'extension')
- self._populate_ext(ext, ext_dict)
- return self._to_xml(exts)
-
- def _populate_ext(self, ext_elem, ext_dict):
- """Populate an extension xml element from a dict."""
-
- ext_elem.set('name', ext_dict['name'])
- ext_elem.set('namespace', ext_dict['namespace'])
- ext_elem.set('alias', ext_dict['alias'])
- ext_elem.set('updated', ext_dict['updated'])
- desc = etree.Element('description')
- desc.text = ext_dict['description']
- ext_elem.append(desc)
- for link in ext_dict.get('links', []):
- elem = etree.SubElement(ext_elem, '{%s}link' % xmlutil.XMLNS_ATOM)
- elem.set('rel', link['rel'])
- elem.set('href', link['href'])
- elem.set('type', link['type'])
- return ext_elem
-
- def _to_xml(self, root):
- """Convert the xml object to an xml string."""
-
- return etree.tostring(root, encoding='UTF-8')
+def make_ext(elem):
+ elem.set('name')
+ elem.set('namespace')
+ elem.set('alias')
+ elem.set('updated')
+
+ desc = xmlutil.SubTemplateElement(elem, 'description')
+ desc.text = 'description'
+
+ xmlutil.make_links(elem, 'links')
+
+
+ext_nsmap = {None: xmlutil.XMLNS_V11, 'atom': xmlutil.XMLNS_ATOM}
+
+
+class ExtensionTemplate(xmlutil.TemplateBuilder):
+ def construct(self):
+ root = xmlutil.TemplateElement('extension', selector='extension')
+ make_ext(root)
+ return xmlutil.MasterTemplate(root, 1, nsmap=ext_nsmap)
+
+
+class ExtensionsTemplate(xmlutil.TemplateBuilder):
+ def construct(self):
+ root = xmlutil.TemplateElement('extensions')
+ elem = xmlutil.SubTemplateElement(root, 'extension',
+ selector='extensions')
+ make_ext(elem)
+ return xmlutil.MasterTemplate(root, 1, nsmap=ext_nsmap)
+
+
+class ExtensionsXMLSerializer(xmlutil.XMLTemplateSerializer):
+ def index(self):
+ return ExtensionsTemplate()
+
+ def show(self):
+ return ExtensionTemplate()
def admin_only(fnc):