diff options
| author | Kevin L. Mitchell <kevin.mitchell@rackspace.com> | 2011-11-28 15:11:04 -0600 |
|---|---|---|
| committer | Kevin L. Mitchell <kevin.mitchell@rackspace.com> | 2011-11-28 15:11:04 -0600 |
| commit | fde2bc5fdf585fc44d142b48d4ff5fca317bbc84 (patch) | |
| tree | 8c1286aa71c0858cfcbbc3ef4a01a51aca93e784 /nova/api | |
| parent | bdb1ff73d2f24ba43102143c1ac670fdc0739528 (diff) | |
| download | nova-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
Diffstat (limited to 'nova/api')
| -rw-r--r-- | nova/api/openstack/v2/extensions.py | 74 |
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): |
