310
312
class MetadataXMLSerializer(wsgi.XMLDictSerializer):
314
NSMAP = {None: xmlutil.XMLNS_V11}
311
316
def __init__(self, xmlns=wsgi.XMLNS_V11):
312
317
super(MetadataXMLSerializer, self).__init__(xmlns=xmlns)
314
def _meta_item_to_xml(self, doc, key, value):
315
node = doc.createElement('meta')
316
doc.appendChild(node)
317
node.setAttribute('key', '%s' % key)
318
text = doc.createTextNode('%s' % value)
319
node.appendChild(text)
322
def meta_list_to_xml(self, xml_doc, meta_items):
323
container_node = xml_doc.createElement('metadata')
324
for (key, value) in meta_items:
325
item_node = self._meta_item_to_xml(xml_doc, key, value)
326
container_node.appendChild(item_node)
327
return container_node
329
def _meta_list_to_xml_string(self, metadata_dict):
330
xml_doc = minidom.Document()
331
items = metadata_dict['metadata'].items()
332
container_node = self.meta_list_to_xml(xml_doc, items)
333
xml_doc.appendChild(container_node)
334
self._add_xmlns(container_node)
335
return xml_doc.toxml('UTF-8')
319
def populate_metadata(self, metadata_elem, meta_dict):
320
for (key, value) in meta_dict.items():
321
elem = etree.SubElement(metadata_elem, 'meta')
322
elem.set('key', str(key))
325
def _populate_meta_item(self, meta_elem, meta_item_dict):
326
"""Populate a meta xml element from a dict."""
327
(key, value) = meta_item_dict.items()[0]
328
meta_elem.set('key', str(key))
329
meta_elem.text = value
337
331
def index(self, metadata_dict):
338
return self._meta_list_to_xml_string(metadata_dict)
332
metadata = etree.Element('metadata', nsmap=self.NSMAP)
333
self.populate_metadata(metadata, metadata_dict.get('metadata', {}))
334
return self._to_xml(metadata)
340
336
def create(self, metadata_dict):
341
return self._meta_list_to_xml_string(metadata_dict)
337
metadata = etree.Element('metadata', nsmap=self.NSMAP)
338
self.populate_metadata(metadata, metadata_dict.get('metadata', {}))
339
return self._to_xml(metadata)
343
341
def update_all(self, metadata_dict):
344
return self._meta_list_to_xml_string(metadata_dict)
346
def _meta_item_to_xml_string(self, meta_item_dict):
347
xml_doc = minidom.Document()
348
item_key, item_value = meta_item_dict.items()[0]
349
item_node = self._meta_item_to_xml(xml_doc, item_key, item_value)
350
xml_doc.appendChild(item_node)
351
self._add_xmlns(item_node)
352
return xml_doc.toxml('UTF-8')
342
metadata = etree.Element('metadata', nsmap=self.NSMAP)
343
self.populate_metadata(metadata, metadata_dict.get('metadata', {}))
344
return self._to_xml(metadata)
354
346
def show(self, meta_item_dict):
355
return self._meta_item_to_xml_string(meta_item_dict['meta'])
347
meta = etree.Element('meta', nsmap=self.NSMAP)
348
self._populate_meta_item(meta, meta_item_dict['meta'])
349
return self._to_xml(meta)
357
351
def update(self, meta_item_dict):
358
return self._meta_item_to_xml_string(meta_item_dict['meta'])
352
meta = etree.Element('meta', nsmap=self.NSMAP)
353
self._populate_meta_item(meta, meta_item_dict['meta'])
354
return self._to_xml(meta)
360
356
def default(self, *args, **kwargs):