From b792be36523e743ef3b3d8cb8af13d4e4efb1b4a Mon Sep 17 00:00:00 2001 From: Alexei Peters Date: Wed, 9 Dec 2015 23:15:59 -0800 Subject: [PATCH] add the ability to serialize uuid types --- elasticsearch/serializer.py | 3 +++ test_elasticsearch/test_serializer.py | 4 ++++ 2 files changed, 7 insertions(+) diff --git a/elasticsearch/serializer.py b/elasticsearch/serializer.py index 542338c3..506c91e9 100644 --- a/elasticsearch/serializer.py +++ b/elasticsearch/serializer.py @@ -2,6 +2,7 @@ try: import simplejson as json except ImportError: import json +import uuid from datetime import date, datetime from decimal import Decimal @@ -28,6 +29,8 @@ class JSONSerializer(object): return data.isoformat() elif isinstance(data, Decimal): return float(data) + elif isinstance(data, uuid.UUID): + return str(data) raise TypeError("Unable to serialize %r (type: %s)" % (data, type(data))) def loads(self, s): diff --git a/test_elasticsearch/test_serializer.py b/test_elasticsearch/test_serializer.py index b7975050..5ab96e03 100644 --- a/test_elasticsearch/test_serializer.py +++ b/test_elasticsearch/test_serializer.py @@ -1,5 +1,6 @@ # -*- coding: utf-8 -*- import sys +import uuid from datetime import datetime from decimal import Decimal @@ -18,6 +19,9 @@ class TestJSONSerializer(TestCase): raise SkipTest("Float rounding is broken in 2.6.") self.assertEquals('{"d": 3.8}', JSONSerializer().dumps({'d': Decimal('3.8')})) + def test_uuid_serialization(self): + self.assertEquals('{"d": "00000000-0000-0000-0000-000000000003"}', JSONSerializer().dumps({'d': uuid.UUID('00000000-0000-0000-0000-000000000003')})) + def test_raises_serialization_error_on_dump_error(self): self.assertRaises(SerializationError, JSONSerializer().dumps, object())