diff --git a/keystoneclient/base.py b/keystoneclient/base.py index 3f13a6cc9..af37222eb 100644 --- a/keystoneclient/base.py +++ b/keystoneclient/base.py @@ -479,7 +479,14 @@ class Resource(object): def _add_details(self, info): for (k, v) in six.iteritems(info): try: - setattr(self, k, v) + try: + setattr(self, k, v) + except UnicodeEncodeError: + # This happens when we're running with Python version that + # does not support Unicode identifiers (e.g. Python 2.7). + # In that case we can't help but not set this attrubute; + # it'll be available in a dict representation though + pass self._info[k] = v except AttributeError: # nosec(cjschaef): we already defined the # attribute on the class diff --git a/keystoneclient/tests/unit/test_base.py b/keystoneclient/tests/unit/test_base.py index 9814d3d16..f6ca651af 100644 --- a/keystoneclient/tests/unit/test_base.py +++ b/keystoneclient/tests/unit/test_base.py @@ -1,3 +1,4 @@ +# -*- coding: utf-8 -*- # Licensed under the Apache License, Version 2.0 (the "License"); you may # not use this file except in compliance with the License. You may obtain # a copy of the License at @@ -96,6 +97,15 @@ class BaseTest(utils.TestCase): r = HumanReadable(None, {"name": "1 of !"}) self.assertEqual(r.human_id, "1-of") + def test_non_ascii_attr(self): + r_dict = {"name": "foobar", + u"тест": "1234", + u"тест2": u"привет мир"} + + r = base.Resource(None, r_dict) + self.assertEqual(r.name, "foobar") + self.assertEqual(r.to_dict(), r_dict) + class ManagerTest(utils.TestCase): body = {"hello": {"hi": 1}}