118
118
self.image_service.update(context, image_id, img, None)
121
class ImageMetadataXMLDeserializer(wsgi.MetadataXMLDeserializer):
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}}
129
def create(self, datastring):
130
return self._extract_metadata_container(datastring)
132
def update_all(self, datastring):
133
return self._extract_metadata_container(datastring)
135
def update(self, datastring):
136
dom = minidom.parseString(datastring)
137
metadata_item = self.extract_metadata(dom)
138
return {'body': {'meta': metadata_item}}
141
class HeadersSerializer(wsgi.ResponseHeadersSerializer):
143
def delete(self, response, data):
144
response.status_int = 204
147
class ImageMetadataXMLSerializer(wsgi.XMLDictSerializer):
148
def __init__(self, xmlns=wsgi.XMLNS_V11):
149
super(ImageMetadataXMLSerializer, self).__init__(xmlns=xmlns)
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)
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
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')
174
def index(self, metadata_dict):
175
return self._meta_list_to_xml_string(metadata_dict)
177
def create(self, metadata_dict):
178
return self._meta_list_to_xml_string(metadata_dict)
180
def update_all(self, metadata_dict):
181
return self._meta_list_to_xml_string(metadata_dict)
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')
191
def show(self, meta_item_dict):
192
return self._meta_item_to_xml_string(meta_item_dict['meta'])
194
def update(self, meta_item_dict):
195
return self._meta_item_to_xml_string(meta_item_dict['meta'])
197
def default(self, *args, **kwargs):
201
121
def create_resource():
202
headers_serializer = HeadersSerializer()
122
headers_serializer = common.MetadataHeadersSerializer()
204
124
body_deserializers = {
205
'application/xml': ImageMetadataXMLDeserializer(),
125
'application/xml': common.MetadataXMLDeserializer(),
208
128
body_serializers = {
209
'application/xml': ImageMetadataXMLSerializer(),
129
'application/xml': common.MetadataXMLSerializer(),
211
131
serializer = wsgi.ResponseSerializer(body_serializers, headers_serializer)
212
132
deserializer = wsgi.RequestDeserializer(body_deserializers)