Return known int values as int, not str
Cast size, min_ram, min_disk to integers before returning them to the user from the v1 API. Fixes bug 1036297 Change-Id: Ib1e2a3bf931e433b6311cc8a1a5219168b50be97
This commit is contained in:
@@ -57,7 +57,7 @@ class ImageManager(base.Manager):
|
||||
elif key.startswith('x-image-meta-'):
|
||||
_key = key[13:]
|
||||
meta[_key] = value
|
||||
return meta
|
||||
return self._format_image_meta_for_user(meta)
|
||||
|
||||
def _image_meta_to_headers(self, fields):
|
||||
headers = {}
|
||||
@@ -68,6 +68,16 @@ class ImageManager(base.Manager):
|
||||
headers['x-image-meta-%s' % key] = str(value)
|
||||
return headers
|
||||
|
||||
@staticmethod
|
||||
def _format_image_meta_for_user(meta):
|
||||
for key in ['size', 'min_ram', 'min_disk']:
|
||||
if key in meta:
|
||||
try:
|
||||
meta[key] = int(meta[key])
|
||||
except ValueError:
|
||||
pass
|
||||
return meta
|
||||
|
||||
def get(self, image_id):
|
||||
"""Get the metadata for a specific image.
|
||||
|
||||
@@ -189,8 +199,8 @@ class ImageManager(base.Manager):
|
||||
|
||||
resp, body_iter = self.api.raw_request(
|
||||
'POST', '/v1/images', headers=hdrs, body=image_data)
|
||||
body = ''.join([c for c in body_iter])
|
||||
return Image(self, json.loads(body)['image'])
|
||||
body = json.loads(''.join([c for c in body_iter]))
|
||||
return Image(self, self._format_image_meta_for_user(body['image']))
|
||||
|
||||
def update(self, image, **kwargs):
|
||||
"""Update an image
|
||||
@@ -230,5 +240,5 @@ class ImageManager(base.Manager):
|
||||
url = '/v1/images/%s' % base.getid(image)
|
||||
resp, body_iter = self.api.raw_request(
|
||||
'PUT', url, headers=hdrs, body=image_data)
|
||||
body = ''.join([c for c in body_iter])
|
||||
return Image(self, json.loads(body)['image'])
|
||||
body = json.loads(''.join([c for c in body_iter]))
|
||||
return Image(self, self._format_image_meta_for_user(body['image']))
|
||||
|
||||
@@ -325,9 +325,9 @@ class ImageManagerTest(unittest.TestCase):
|
||||
self.assertEqual(image.container_format, 'ovf')
|
||||
self.assertEqual(image.disk_format, 'vhd')
|
||||
self.assertEqual(image.owner, 'asdf')
|
||||
self.assertEqual(image.size, '1024')
|
||||
self.assertEqual(image.min_ram, '512')
|
||||
self.assertEqual(image.min_disk, '10')
|
||||
self.assertEqual(image.size, 1024)
|
||||
self.assertEqual(image.min_ram, 512)
|
||||
self.assertEqual(image.min_disk, 10)
|
||||
self.assertEqual(image.properties, {'a': 'b', 'c': 'd'})
|
||||
|
||||
def test_create_with_data(self):
|
||||
@@ -366,6 +366,9 @@ class ImageManagerTest(unittest.TestCase):
|
||||
self.assertEqual(self.api.calls, expect)
|
||||
self.assertEqual(image.id, '1')
|
||||
self.assertEqual(image.name, 'image-2')
|
||||
self.assertEqual(image.size, 1024)
|
||||
self.assertEqual(image.min_ram, 512)
|
||||
self.assertEqual(image.min_disk, 10)
|
||||
|
||||
def test_update_with_data(self):
|
||||
image_data = StringIO.StringIO('XXX')
|
||||
|
||||
Reference in New Issue
Block a user