~ntt-pf-lab/nova/monkey_patch_notification

« back to all changes in this revision

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

  • Committer: Lvov Maxim
  • Date: 2011-07-26 05:50:05 UTC
  • mfrom: (1320 nova)
  • mto: This revision was merged to the branch mainline in revision 1322.
  • Revision ID: usrleon@gmail.com-20110726055005-7olsp0giqup3pao7
merge with trunk, resolve conflicts

Show diffs side-by-side

added added

removed removed

Lines of Context:
23
23
import routes
24
24
import webob.dec
25
25
import webob.exc
 
26
from xml.etree import ElementTree
26
27
 
27
28
from nova import exception
28
29
from nova import flags
194
195
    def show(self, req, id):
195
196
        # NOTE(dprince): the extensions alias is used as the 'id' for show
196
197
        ext = self.extension_manager.extensions[id]
197
 
        return self._translate(ext)
 
198
        return dict(extension=self._translate(ext))
198
199
 
199
200
    def delete(self, req, id):
200
201
        raise faults.Fault(webob.exc.HTTPNotFound())
258
259
 
259
260
        mapper = routes.Mapper()
260
261
 
 
262
        serializer = wsgi.ResponseSerializer(
 
263
            {'application/xml': ExtensionsXMLSerializer()})
261
264
        # extended resources
262
265
        for resource in ext_mgr.get_resources():
263
266
            LOG.debug(_('Extended resource: %s'),
264
267
                        resource.collection)
265
268
            mapper.resource(resource.collection, resource.collection,
266
 
                            controller=wsgi.Resource(resource.controller),
267
 
                            collection=resource.collection_actions,
268
 
                            member=resource.member_actions,
269
 
                            parent_resource=resource.parent)
 
269
                controller=wsgi.Resource(
 
270
                    resource.controller, serializer=serializer),
 
271
                collection=resource.collection_actions,
 
272
                member=resource.member_actions,
 
273
                parent_resource=resource.parent)
270
274
 
271
275
        # extended actions
272
276
        action_resources = self._action_ext_resources(application, ext_mgr,
462
466
        self.parent = parent
463
467
        self.collection_actions = collection_actions
464
468
        self.member_actions = member_actions
 
469
 
 
470
 
 
471
class ExtensionsXMLSerializer(wsgi.XMLDictSerializer):
 
472
 
 
473
    def show(self, ext_dict):
 
474
        ext = self._create_ext_elem(ext_dict['extension'])
 
475
        return self._to_xml(ext)
 
476
 
 
477
    def index(self, exts_dict):
 
478
        exts = ElementTree.Element('extensions')
 
479
        for ext_dict in exts_dict['extensions']:
 
480
            exts.append(self._create_ext_elem(ext_dict))
 
481
        return self._to_xml(exts)
 
482
 
 
483
    def _create_ext_elem(self, ext_dict):
 
484
        """Create an extension xml element from a dict."""
 
485
        ext_elem = ElementTree.Element('extension')
 
486
        ext_elem.set('name', ext_dict['name'])
 
487
        ext_elem.set('namespace', ext_dict['namespace'])
 
488
        ext_elem.set('alias', ext_dict['alias'])
 
489
        ext_elem.set('updated', ext_dict['updated'])
 
490
        desc = ElementTree.Element('description')
 
491
        desc.text = ext_dict['description']
 
492
        ext_elem.append(desc)
 
493
        for link in ext_dict.get('links', []):
 
494
            elem = ElementTree.Element('atom:link')
 
495
            elem.set('rel', link['rel'])
 
496
            elem.set('href', link['href'])
 
497
            elem.set('type', link['type'])
 
498
            ext_elem.append(elem)
 
499
        return ext_elem
 
500
 
 
501
    def _to_xml(self, root):
 
502
        """Convert the xml tree object to an xml string."""
 
503
        root.set('xmlns', wsgi.XMLNS_V11)
 
504
        root.set('xmlns:atom', wsgi.XMLNS_ATOM)
 
505
        return ElementTree.tostring(root, encoding='UTF-8')