Merge "Adding return of updated image for update_image, update_tags"

This commit is contained in:
Jenkins
2015-09-28 12:28:55 +00:00
committed by Gerrit Code Review
3 changed files with 34 additions and 17 deletions

View File

@@ -139,6 +139,24 @@ class ResourceManager(object):
return self.resource_class(self, data)
def _post(self, url, data, response_key=None, dump_json=True):
if dump_json:
kwargs = {'json': data}
else:
kwargs = {'data': data}
resp = self.api.post(url, **kwargs)
if resp.status_code != 202:
self._raise_api_exception(resp)
if response_key is not None:
data = get_json(resp)[response_key]
else:
data = get_json(resp)
return self.resource_class(self, data)
def _list(self, url, response_key):
resp = self.api.get(url)
if resp.status_code == 200:

View File

@@ -38,9 +38,7 @@ class ImageManager(base.ResourceManager):
body = {"username": user_name,
"description": desc}
resp = self.api.post('/images/%s' % image_id, json=body)
if resp.status_code != 202:
raise RuntimeError('Failed to register image %s' % image_id)
return self._post('/images/%s' % image_id, body)
def update_tags(self, image_id, new_tags):
old_image = self.get(image_id)
@@ -52,16 +50,11 @@ class ImageManager(base.ResourceManager):
to_remove = list(old_tags - new_tags)
if len(to_add) != 0:
resp = self.api.post('/images/%s/tag' % image_id,
json={'tags': to_add})
if resp.status_code != 202:
raise RuntimeError('Failed to add tags to image %s' % image_id)
return self._post('/images/%s/tag' % image_id,
{'tags': to_add}, 'image')
if len(to_remove) != 0:
resp = self.api.post('/images/%s/untag' % image_id,
json={'tags': to_remove})
return self._post('/images/%s/untag' % image_id,
{'tags': to_remove}, 'image')
if resp.status_code != 202:
raise RuntimeError('Failed to remove tags from image %s' %
image_id)
return self._get('/images/%s' % image_id, 'image')

View File

@@ -69,16 +69,22 @@ class ImageTest(base.BaseTestCase):
tag_url = self.URL + '/images/id/tag'
untag_url = self.URL + '/images/id/untag'
self.responses.post(tag_url, status_code=202)
self.responses.post(untag_url, status_code=202)
self.responses.post(tag_url, json={'image': self.body},
status_code=202)
self.responses.post(untag_url, json={'image': self.body},
status_code=202)
image = mock.Mock()
mget.return_value = image
image.tags = []
self.client.images.update_tags('id', ['username', 'tag'])
resp = self.client.images.update_tags('id', ['username', 'tag'])
self.assertEqual(tag_url, self.responses.last_request.url)
self.assertIsInstance(resp, images.Image)
self.assertFields(self.body, resp)
image.tags = ['username', 'tag']
self.client.images.update_tags('id', ['username'])
resp = self.client.images.update_tags('id', ['username'])
self.assertEqual(untag_url, self.responses.last_request.url)
self.assertIsInstance(resp, images.Image)
self.assertFields(self.body, resp)