From 8c70c5b08d6ecae90c2df1ee5c7ba995e3329926 Mon Sep 17 00:00:00 2001 From: Zhi Yan Liu Date: Wed, 15 May 2013 22:45:08 +0800 Subject: [PATCH] Convert non-ascii characters within image property to unicode Convert non-ascii characters within image property (key/value pair) to unicode but utf-8 to prevent provisioning failure when cloud using qpid backend. This change also make the image property encoding consistency between the image updating and the receiving. Before this, image property updating use unicode, but receiving (get) result is utf-8. Fixes: Bug #1180377 Change-Id: I010760c598a7e008c79f1240255708265352cdb5 Signed-off-by: Zhi Yan Liu --- glanceclient/v1/images.py | 6 ++++-- tests/v1/test_images.py | 1 + 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/glanceclient/v1/images.py b/glanceclient/v1/images.py index 60e7bf05..da84dc85 100644 --- a/glanceclient/v1/images.py +++ b/glanceclient/v1/images.py @@ -58,12 +58,14 @@ class ImageManager(base.Manager): def _image_meta_from_headers(self, headers): meta = {'properties': {}} + ensure_unicode = utils.ensure_unicode for key, value in headers.iteritems(): + value = ensure_unicode(value, incoming='utf-8') if key.startswith('x-image-meta-property-'): - _key = key[22:] + _key = ensure_unicode(key[22:], incoming='utf-8') meta['properties'][_key] = value elif key.startswith('x-image-meta-'): - _key = key[13:] + _key = ensure_unicode(key[13:], incoming='utf-8') meta[_key] = value for key in ['is_public', 'protected', 'deleted']: diff --git a/tests/v1/test_images.py b/tests/v1/test_images.py index 43291f26..c314cee3 100644 --- a/tests/v1/test_images.py +++ b/tests/v1/test_images.py @@ -311,6 +311,7 @@ class ImageManagerTest(testtools.TestCase): self.assertEqual(image.is_public, False) self.assertEqual(image.protected, False) self.assertEqual(image.deleted, False) + self.assertEqual(image.properties, {u'arch': u'x86_64'}) def test_data(self): data = ''.join([b for b in self.mgr.data('1', do_checksum=False)])