Fix Unicode error printing extra-specs

If type-key is set to unicode the command cinder extra-specs-list
fails with the ERROR: 'ascii' codec can't encode characters in position.
This patch fixes it.

Change-Id: Id82bfbe8870351605f53c7ca029b9aa7e6089f6a
Closes-Bug: #1568937
This commit is contained in:
Yuriy Nesenenko
2016-07-15 13:46:53 +03:00
parent 09b51a294e
commit 01c139181c
2 changed files with 7 additions and 2 deletions

View File

@@ -228,6 +228,10 @@ class PrintListTestCase(test_utils.TestCase):
+---+-----+
""", cso.read())
def test_unicode_key_value_to_string(self):
expected = {u'key': u'\u043f\u043f\u043f\u043f\u043f'}
self.assertEqual(expected, utils.unicode_key_value_to_string(expected))
class PrintDictTestCase(test_utils.TestCase):

View File

@@ -182,8 +182,9 @@ def unicode_key_value_to_string(dictionary):
"""Recursively converts dictionary keys to strings."""
if not isinstance(dictionary, dict):
return dictionary
return dict((str(k), str(unicode_key_value_to_string(v)))
for k, v in dictionary.items())
return dict((six.text_type(k),
six.text_type(unicode_key_value_to_string(v)))
for k, v in dictionary.items())
def print_dict(d, property="Property", formatters=None):