From fde2bc5fdf585fc44d142b48d4ff5fca317bbc84 Mon Sep 17 00:00:00 2001 From: "Kevin L. Mitchell" Date: Mon, 28 Nov 2011 15:11:04 -0600 Subject: Templatize extension handling. Related to bug 852141: Converts extensions.py to using XML templates instead of the classic XML serializer. Change-Id: I41c9db8eb984f06222e7b42d5040afdf1e1101e8 --- nova/api/openstack/v2/extensions.py | 74 ++++++++++++++++++------------------- 1 file changed, 37 insertions(+), 37 deletions(-) (limited to 'nova') 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): -- cgit