~raxnetworking/nova/bare_bones_melange

« back to all changes in this revision

Viewing changes to nova/api/openstack/common.py

  • Committer: Rajaram Mallya
  • Date: 2011-09-14 11:46:48 UTC
  • mfrom: (1265.2.302 nova)
  • Revision ID: rajarammallya@gmail.com-20110914114648-a12n6zr1uctd3wxu
Merged from nova trunk

Show diffs side-by-side

added added

removed removed

Lines of Context:
16
16
#    under the License.
17
17
 
18
18
import functools
 
19
from lxml import etree
19
20
import re
20
21
import urlparse
21
22
from xml.dom import minidom
27
28
from nova import log as logging
28
29
from nova import quota
29
30
from nova.api.openstack import wsgi
 
31
from nova.api.openstack import xmlutil
30
32
from nova.compute import vm_states
31
33
from nova.compute import task_states
32
34
 
308
310
 
309
311
 
310
312
class MetadataXMLSerializer(wsgi.XMLDictSerializer):
 
313
 
 
314
    NSMAP = {None: xmlutil.XMLNS_V11}
 
315
 
311
316
    def __init__(self, xmlns=wsgi.XMLNS_V11):
312
317
        super(MetadataXMLSerializer, self).__init__(xmlns=xmlns)
313
318
 
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)
320
 
        return node
321
 
 
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
328
 
 
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))
 
323
            elem.text = value
 
324
 
 
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
336
330
 
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)
339
335
 
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)
342
340
 
343
341
    def update_all(self, metadata_dict):
344
 
        return self._meta_list_to_xml_string(metadata_dict)
345
 
 
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)
353
345
 
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)
356
350
 
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)
359
355
 
360
356
    def default(self, *args, **kwargs):
361
357
        return ''