Revision dad1b874

b/kamaki/clients/image/__init__.py
198 198
        req = {'memberships': [{'member_id': member} for member in members]}
199 199
        r = self.put(path, json=req, success=204)
200 200
        return r.headers
201

  
202
    def update_image(
203
            self, image_id,
204
            name=None, disk_format=None, container_format=None,
205
            status=None, public=None, owner_id=None, **properties):
206
        path = path4url('images', image_id)
207
        if name is not None:
208
            self.set_header('X-Image-Meta-Name', name)
209
        if disk_format is not None:
210
            self.set_header('X-Image-Meta-Disk-Format', disk_format)
211
        if container_format is not None:
212
            self.set_header('X-Image-Meta-Container-Format', container_format)
213
        if status is not None:
214
            self.set_header('X-Image-Meta-Status', status)
215
        if public is not None:
216
            self.set_header('X-Image-Meta-Is-Public', bool(public))
217
        if owner_id is not None:
218
            self.set_header('X-Image-Meta-Owner', owner_id)
219
        for k, v in properties.items():
220
            self.set_header('X-Image-Meta-Property-%s' % k, v)
221
        r = self.put(path, success=200)
222
        return r.headers
b/kamaki/clients/image/test.py
290 290
        for i in range(len(r)):
291 291
            self.assert_dicts_are_equal(r[i], example_images[i])
292 292

  
293
    @patch('%s.put' % image_pkg, return_value=FR())
294
    @patch('%s.set_header' % image_pkg)
295
    def test_update_image(self, set_header, put):
296
        FR.headers = 'some headers'
297
        hcnt = 0
298
        for args in product(
299
                ('some id', 'other id'),
300
                ('image name', None), ('disk fmt', None), ('cnt format', None),
301
                ('status', None), (True, False, None), ('owner id', None),
302
                (dict(k1='v1', k2='v2'), {})):
303
            r = self.client.update_image(*args[:-1], **args[-1])
304
            (image_id, name, disk_format, container_format,
305
            status, public, owner_id, properties) = args
306
            self.assertEqual(r, FR.headers)
307
            header_calls = []
308
            prf = 'X-Image-Meta-'
309
            if name:
310
                header_calls.append(call('%sName' % prf, name))
311
            if disk_format:
312
                header_calls.append(call('%sDisk-Format' % prf, disk_format))
313
            if container_format:
314
                header_calls.append(
315
                    call('%sContainer-Format' % prf, container_format))
316
            if status:
317
                header_calls.append(call('%sStatus' % prf, status))
318
            if public is not None:
319
                header_calls.append(call('%sIs-Public' % prf, public))
320
            if owner_id:
321
                header_calls.append(call('%sOwner' % prf, owner_id))
322
            for k, v in properties.items():
323
                header_calls.append(call('%sProperty-%s' % (prf, k), v))
324
            self.assertEqual(
325
                sorted(set_header.mock_calls[hcnt:]), sorted(header_calls))
326
            hcnt = len(set_header.mock_calls)
327
            self.assertEqual(
328
                put.mock_calls[-1], call('/images/%s' % image_id, success=200))
329

  
330

  
293 331
if __name__ == '__main__':
294 332
    from sys import argv
295 333
    from kamaki.clients.test import runTestCase

Also available in: Unified diff