summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSean McCully <sean.mccully@rackspace.com>2012-12-17 10:25:19 -0600
committerSean McCully <sean.mccully@rackspace.com>2013-01-03 10:46:19 -0600
commite3ddc41f1b02644d7fae4482c4beade7f27e58de (patch)
tree95f2d9c6ea1b8dde6ba6fdce41ee1d75f929e8e3
parent91c9631bd3e3a0c72b36840ddf90e1db483f9a14 (diff)
downloadoslo-e3ddc41f1b02644d7fae4482c4beade7f27e58de.tar.gz
oslo-e3ddc41f1b02644d7fae4482c4beade7f27e58de.tar.xz
oslo-e3ddc41f1b02644d7fae4482c4beade7f27e58de.zip
JSONDictSerializer encode objects to unicode
Averts raising ValueError, Circular Reference Detected exception. Add additional test to JSONDictSerializerTest testing that JSONDictSerializer correctly serializes objects into unicode repr. and not raise error Fixes: bug #1089100 Change-Id: Ifdb0562c7c43ab66617dddb65f16f893df2f4895
-rw-r--r--openstack/common/wsgi.py2
-rw-r--r--tests/unit/test_wsgi.py11
2 files changed, 12 insertions, 1 deletions
diff --git a/openstack/common/wsgi.py b/openstack/common/wsgi.py
index f52fca0..1d6d9df 100644
--- a/openstack/common/wsgi.py
+++ b/openstack/common/wsgi.py
@@ -387,7 +387,7 @@ class JSONDictSerializer(DictSerializer):
if isinstance(obj, datetime.datetime):
_dtime = obj - datetime.timedelta(microseconds=obj.microsecond)
return _dtime.isoformat()
- return obj
+ return unicode(obj)
return jsonutils.dumps(data, default=sanitizer)
diff --git a/tests/unit/test_wsgi.py b/tests/unit/test_wsgi.py
index 07c85d5..c621a8c 100644
--- a/tests/unit/test_wsgi.py
+++ b/tests/unit/test_wsgi.py
@@ -179,6 +179,17 @@ class JSONDictSerializerTest(unittest.TestCase):
result = result.replace('\n', '').replace(' ', '')
self.assertEqual(result, expected_json)
+ def test_object_unicode(self):
+ class TestUnicode:
+ def __unicode__(self):
+ return u'TestUnicode'
+ input_dict = dict(cls=TestUnicode())
+ expected_str = '{"cls":"TestUnicode"}'
+ serializer = wsgi.JSONDictSerializer()
+ result = serializer.serialize(input_dict)
+ result = result.replace('\n', '').replace(' ', '')
+ self.assertEqual(result, expected_str)
+
class TextDeserializerTest(unittest.TestCase):