From 0fd11f30f4a06f7b8cb701fa476aae4f193ac963 Mon Sep 17 00:00:00 2001 From: Ivan Kolodyazhny Date: Thu, 22 Sep 2016 14:56:20 +0300 Subject: [PATCH] Fix error during set unicode metadata key Change-Id: I2940670b4174dae800e76667ceecc80c568e613f Closes-Bug: #1622631 --- cinderclient/openstack/common/apiclient/base.py | 11 ++++++++--- cinderclient/tests/unit/v2/test_volumes.py | 5 +++-- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/cinderclient/openstack/common/apiclient/base.py b/cinderclient/openstack/common/apiclient/base.py index 95ae8b957..00ecbc70b 100644 --- a/cinderclient/openstack/common/apiclient/base.py +++ b/cinderclient/openstack/common/apiclient/base.py @@ -491,14 +491,17 @@ class Resource(RequestIdMixin): def _add_details(self, info): for (k, v) in six.iteritems(info): try: - setattr(self, k, v) + try: + setattr(self, k, v) + except UnicodeEncodeError: + pass self._info[k] = v except AttributeError: # In this case we already defined the attribute on the class pass def __getattr__(self, k): - if k not in self.__dict__: + if k not in self.__dict__ or k not in self._info: # NOTE(bcwaldon): disallow lazy-loading if already loaded once if not self.is_loaded(): self.get() @@ -506,7 +509,9 @@ class Resource(RequestIdMixin): raise AttributeError(k) else: - return self.__dict__[k] + if k in self.__.dict__: + return self.__dict__[k] + return self._info[k] @property def api_version(self): diff --git a/cinderclient/tests/unit/v2/test_volumes.py b/cinderclient/tests/unit/v2/test_volumes.py index fbc85aa90..72b176fa6 100644 --- a/cinderclient/tests/unit/v2/test_volumes.py +++ b/cinderclient/tests/unit/v2/test_volumes.py @@ -1,3 +1,4 @@ +# -*- coding: utf-8 -*- # Copyright (c) 2013 OpenStack Foundation # # All Rights Reserved. @@ -171,9 +172,9 @@ class VolumesTest(utils.TestCase): self._assert_request_id(vol) def test_set_metadata(self): - vol = cs.volumes.set_metadata(1234, {'k1': 'v2'}) + vol = cs.volumes.set_metadata(1234, {'k1': 'v2', 'тест': 'тест'}) cs.assert_called('POST', '/volumes/1234/metadata', - {'metadata': {'k1': 'v2'}}) + {'metadata': {'k1': 'v2', 'тест': 'тест'}}) self._assert_request_id(vol) def test_delete_metadata(self):