diff --git a/glanceclient/v1/images.py b/glanceclient/v1/images.py index 37a565a..7a1d84a 100644 --- a/glanceclient/v1/images.py +++ b/glanceclient/v1/images.py @@ -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'])) diff --git a/tests/v1/test_images.py b/tests/v1/test_images.py index 7a99f37..5676e91 100644 --- a/tests/v1/test_images.py +++ b/tests/v1/test_images.py @@ -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')