Fix adding non-ascii attrs to Resource objects error
Due to these lines of code [0] we don't have an opportunity to add attributes with non-ascii symbols to Resource objects, but information about it will be in _info dict. Example of side effect - quota_show command. Because we don't have such an attr, here [1] it will be added None value instead of real value [2]. This patch fixes this problem. [0] -f8c93ed03b/cinderclient/apiclient/base.py (L498-L499)
[1] -f8c93ed03b/cinderclient/shell_utils.py (L179)
[2] - http://paste.openstack.org/show/593358/ Change-Id: I0493845dafc5dad836e899b9c22d563023c1dab0 Closes-Bug: #1652605
This commit is contained in:
parent
e04a4149f2
commit
d8a6210152
|
@ -31,6 +31,7 @@ import six
|
||||||
from six.moves.urllib import parse
|
from six.moves.urllib import parse
|
||||||
|
|
||||||
from cinderclient.apiclient import exceptions
|
from cinderclient.apiclient import exceptions
|
||||||
|
from oslo_utils import encodeutils
|
||||||
from oslo_utils import strutils
|
from oslo_utils import strutils
|
||||||
|
|
||||||
|
|
||||||
|
@ -496,7 +497,7 @@ class Resource(RequestIdMixin):
|
||||||
# In this case we already defined the attribute on the class
|
# In this case we already defined the attribute on the class
|
||||||
continue
|
continue
|
||||||
except UnicodeEncodeError:
|
except UnicodeEncodeError:
|
||||||
pass
|
setattr(self, encodeutils.safe_encode(k), v)
|
||||||
self._info[k] = v
|
self._info[k] = v
|
||||||
|
|
||||||
def __getattr__(self, k):
|
def __getattr__(self, k):
|
||||||
|
|
|
@ -48,6 +48,16 @@ class BaseTest(utils.TestCase):
|
||||||
self.assertEqual("<Resource baz=spam, foo=bar>", repr(r))
|
self.assertEqual("<Resource baz=spam, foo=bar>", repr(r))
|
||||||
self.assertNotIn("x_openstack_request_ids", repr(r))
|
self.assertNotIn("x_openstack_request_ids", repr(r))
|
||||||
|
|
||||||
|
def test_add_non_ascii_attr_to_resource(self):
|
||||||
|
info = {'gigabytes_тест': -1,
|
||||||
|
'volumes_тест': -1,
|
||||||
|
'id': 'admin'}
|
||||||
|
|
||||||
|
res = base.Resource(None, info)
|
||||||
|
|
||||||
|
for key, value in info.items():
|
||||||
|
self.assertEqual(value, getattr(res, key, None))
|
||||||
|
|
||||||
def test_getid(self):
|
def test_getid(self):
|
||||||
self.assertEqual(4, base.getid(4))
|
self.assertEqual(4, base.getid(4))
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue