~vishvananda/nova/keystone-migration

« back to all changes in this revision

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

  • Committer: Vishvananda Ishaya
  • Date: 2011-07-29 16:28:02 UTC
  • mfrom: (1299.1.44 nova)
  • Revision ID: vishvananda@gmail.com-20110729162802-0yu0uo424fidiwdr
merged trunk and fix time call

Show diffs side-by-side

added added

removed removed

Lines of Context:
16
16
#    under the License.
17
17
 
18
18
from webob import exc
19
 
from xml.dom import minidom
20
19
 
21
20
from nova import flags
22
21
from nova import image
23
22
from nova import quota
24
23
from nova import utils
 
24
from nova.api.openstack import common
25
25
from nova.api.openstack import wsgi
26
26
 
27
27
 
118
118
        self.image_service.update(context, image_id, img, None)
119
119
 
120
120
 
121
 
class ImageMetadataXMLDeserializer(wsgi.MetadataXMLDeserializer):
122
 
 
123
 
    def _extract_metadata_container(self, datastring):
124
 
        dom = minidom.parseString(datastring)
125
 
        metadata_node = self.find_first_child_named(dom, "metadata")
126
 
        metadata = self.extract_metadata(metadata_node)
127
 
        return {'body': {'metadata': metadata}}
128
 
 
129
 
    def create(self, datastring):
130
 
        return self._extract_metadata_container(datastring)
131
 
 
132
 
    def update_all(self, datastring):
133
 
        return self._extract_metadata_container(datastring)
134
 
 
135
 
    def update(self, datastring):
136
 
        dom = minidom.parseString(datastring)
137
 
        metadata_item = self.extract_metadata(dom)
138
 
        return {'body': {'meta': metadata_item}}
139
 
 
140
 
 
141
 
class HeadersSerializer(wsgi.ResponseHeadersSerializer):
142
 
 
143
 
    def delete(self, response, data):
144
 
        response.status_int = 204
145
 
 
146
 
 
147
 
class ImageMetadataXMLSerializer(wsgi.XMLDictSerializer):
148
 
    def __init__(self, xmlns=wsgi.XMLNS_V11):
149
 
        super(ImageMetadataXMLSerializer, self).__init__(xmlns=xmlns)
150
 
 
151
 
    def _meta_item_to_xml(self, doc, key, value):
152
 
        node = doc.createElement('meta')
153
 
        doc.appendChild(node)
154
 
        node.setAttribute('key', '%s' % key)
155
 
        text = doc.createTextNode('%s' % value)
156
 
        node.appendChild(text)
157
 
        return node
158
 
 
159
 
    def meta_list_to_xml(self, xml_doc, meta_items):
160
 
        container_node = xml_doc.createElement('metadata')
161
 
        for (key, value) in meta_items:
162
 
            item_node = self._meta_item_to_xml(xml_doc, key, value)
163
 
            container_node.appendChild(item_node)
164
 
        return container_node
165
 
 
166
 
    def _meta_list_to_xml_string(self, metadata_dict):
167
 
        xml_doc = minidom.Document()
168
 
        items = metadata_dict['metadata'].items()
169
 
        container_node = self.meta_list_to_xml(xml_doc, items)
170
 
        xml_doc.appendChild(container_node)
171
 
        self._add_xmlns(container_node)
172
 
        return xml_doc.toprettyxml(indent='    ', encoding='UTF-8')
173
 
 
174
 
    def index(self, metadata_dict):
175
 
        return self._meta_list_to_xml_string(metadata_dict)
176
 
 
177
 
    def create(self, metadata_dict):
178
 
        return self._meta_list_to_xml_string(metadata_dict)
179
 
 
180
 
    def update_all(self, metadata_dict):
181
 
        return self._meta_list_to_xml_string(metadata_dict)
182
 
 
183
 
    def _meta_item_to_xml_string(self, meta_item_dict):
184
 
        xml_doc = minidom.Document()
185
 
        item_key, item_value = meta_item_dict.items()[0]
186
 
        item_node = self._meta_item_to_xml(xml_doc, item_key, item_value)
187
 
        xml_doc.appendChild(item_node)
188
 
        self._add_xmlns(item_node)
189
 
        return xml_doc.toprettyxml(indent='    ', encoding='UTF-8')
190
 
 
191
 
    def show(self, meta_item_dict):
192
 
        return self._meta_item_to_xml_string(meta_item_dict['meta'])
193
 
 
194
 
    def update(self, meta_item_dict):
195
 
        return self._meta_item_to_xml_string(meta_item_dict['meta'])
196
 
 
197
 
    def default(self, *args, **kwargs):
198
 
        return ''
199
 
 
200
 
 
201
121
def create_resource():
202
 
    headers_serializer = HeadersSerializer()
 
122
    headers_serializer = common.MetadataHeadersSerializer()
203
123
 
204
124
    body_deserializers = {
205
 
        'application/xml': ImageMetadataXMLDeserializer(),
 
125
        'application/xml': common.MetadataXMLDeserializer(),
206
126
    }
207
127
 
208
128
    body_serializers = {
209
 
        'application/xml': ImageMetadataXMLSerializer(),
 
129
        'application/xml': common.MetadataXMLSerializer(),
210
130
    }
211
131
    serializer = wsgi.ResponseSerializer(body_serializers, headers_serializer)
212
132
    deserializer = wsgi.RequestDeserializer(body_deserializers)