summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJulien Danjou <julien@danjou.info>2015-01-14 16:13:28 +0100
committerJulien Danjou <julien@danjou.info>2015-02-05 21:04:26 +0100
commit73f7155af264482e9f7604514782c2da447250c0 (patch)
treeb39acb6d7682ccd094de8775167b6be5e39c0d15
parent2c244b288e85379424551fec7a2c11163fb0fcc8 (diff)
downloadoslo-serialization-73f7155af264482e9f7604514782c2da447250c0.tar.gz
jsonutils: support UUID encoding
Change-Id: I2c864f793b4ee6136442b678380bf21f732be643
-rw-r--r--oslo_serialization/jsonutils.py4
-rw-r--r--tests/test_jsonutils.py11
2 files changed, 15 insertions, 0 deletions
diff --git a/oslo_serialization/jsonutils.py b/oslo_serialization/jsonutils.py
index cbffc90..055d8c8 100644
--- a/oslo_serialization/jsonutils.py
+++ b/oslo_serialization/jsonutils.py
@@ -37,6 +37,7 @@ import functools
import inspect
import itertools
import sys
+import uuid
is_simplejson = False
if sys.version_info < (2, 7):
@@ -111,6 +112,9 @@ def to_primitive(value, convert_instances=False, convert_datetime=True,
else:
return value
+ if isinstance(value, uuid.UUID):
+ return six.text_type(value)
+
# value of itertools.count doesn't get caught by nasty_type_tests
# and results in infinite loop when list(value) is called.
if type(value) == itertools.count:
diff --git a/tests/test_jsonutils.py b/tests/test_jsonutils.py
index 5ab465c..34f0616 100644
--- a/tests/test_jsonutils.py
+++ b/tests/test_jsonutils.py
@@ -16,6 +16,7 @@
import collections
import datetime
import json
+import uuid
import mock
import netaddr
@@ -68,6 +69,11 @@ class JSONUtilsTestMixin(object):
self.assertEqual(expected, fp.getvalue())
+ def test_dumps_uuid(self):
+ self.assertEqual('"87edfaf4-9bff-11e4-82bd-b7b4e88d3780"',
+ jsonutils.dumps(
+ uuid.UUID("87edfaf49bff11e482bdb7b4e88d3780")))
+
def test_loads(self):
self.assertEqual({'a': 'b'}, jsonutils.loads('{"a": "b"}'))
@@ -135,6 +141,11 @@ class ToPrimitiveTestCase(test_base.BaseTestCase):
self.assertEqual(jsonutils.to_primitive(x),
'1920-02-03T04:05:06.000007')
+ def test_uuid(self):
+ x = uuid.uuid4()
+ self.assertEqual(jsonutils.to_primitive(x),
+ six.text_type(x))
+
def test_datetime_preserve(self):
x = datetime.datetime(1920, 2, 3, 4, 5, 6, 7)
self.assertEqual(jsonutils.to_primitive(x, convert_datetime=False), x)