From 01c139181c862a47ea5b2f04b392480cb7a7a7d7 Mon Sep 17 00:00:00 2001 From: Yuriy Nesenenko Date: Fri, 15 Jul 2016 13:46:53 +0300 Subject: [PATCH] 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 --- cinderclient/tests/unit/test_utils.py | 4 ++++ cinderclient/utils.py | 5 +++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/cinderclient/tests/unit/test_utils.py b/cinderclient/tests/unit/test_utils.py index f780adeac..b44888c59 100644 --- a/cinderclient/tests/unit/test_utils.py +++ b/cinderclient/tests/unit/test_utils.py @@ -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): diff --git a/cinderclient/utils.py b/cinderclient/utils.py index 950b4bcdb..86c276e3b 100644 --- a/cinderclient/utils.py +++ b/cinderclient/utils.py @@ -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):