diff options
author | Julien Danjou <julien@danjou.info> | 2015-01-14 16:13:28 +0100 |
---|---|---|
committer | Julien Danjou <julien@danjou.info> | 2015-02-05 21:04:26 +0100 |
commit | 73f7155af264482e9f7604514782c2da447250c0 (patch) | |
tree | b39acb6d7682ccd094de8775167b6be5e39c0d15 | |
parent | 2c244b288e85379424551fec7a2c11163fb0fcc8 (diff) | |
download | oslo-serialization-73f7155af264482e9f7604514782c2da447250c0.tar.gz |
jsonutils: support UUID encoding
Change-Id: I2c864f793b4ee6136442b678380bf21f732be643
-rw-r--r-- | oslo_serialization/jsonutils.py | 4 | ||||
-rw-r--r-- | tests/test_jsonutils.py | 11 |
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) |