Decimal support

Currently only converting to floats which may lose some precision.
Not recommended in 2.6 where float to string serialization is sub-optimal
This commit is contained in:
Honza Král
2013-10-22 00:26:58 +02:00
parent 2bb16fe7ed
commit 73f170f23f
2 changed files with 12 additions and 1 deletions
+3
View File
@@ -1,5 +1,6 @@
import json
from datetime import date, datetime
from decimal import Decimal
from .exceptions import SerializationError
@@ -7,6 +8,8 @@ class JSONSerializer(object):
def default(self, data):
if isinstance(data, (date, datetime)):
return data.isoformat()
elif isinstance(data, Decimal):
return float(data)
raise TypeError
def loads(self, s):
+9 -1
View File
@@ -1,14 +1,22 @@
import sys
from datetime import datetime
from decimal import Decimal
from elasticsearch.serializer import JSONSerializer
from elasticsearch.exceptions import SerializationError
from .test_cases import TestCase
from .test_cases import TestCase, SkipTest
class TestJSONSerializer(TestCase):
def test_datetime_serialization(self):
self.assertEquals(u'{"d": "2010-10-01T02:30:00"}', JSONSerializer().dumps({'d': datetime(2010, 10, 1, 2, 30)}))
def test_decimal_serialization(self):
if sys.version_info[:2] == (2, 6):
raise SkipTest("Float rounding is broken in 2.6.")
self.assertEquals(u'{"d": 3.8}', JSONSerializer().dumps({'d': Decimal('3.8')}))
def test_raises_serialization_error_on_dump_error(self):
self.assertRaises(SerializationError, JSONSerializer().dumps, object())