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:
@@ -1,5 +1,6 @@
|
|||||||
import json
|
import json
|
||||||
from datetime import date, datetime
|
from datetime import date, datetime
|
||||||
|
from decimal import Decimal
|
||||||
|
|
||||||
from .exceptions import SerializationError
|
from .exceptions import SerializationError
|
||||||
|
|
||||||
@@ -7,6 +8,8 @@ class JSONSerializer(object):
|
|||||||
def default(self, data):
|
def default(self, data):
|
||||||
if isinstance(data, (date, datetime)):
|
if isinstance(data, (date, datetime)):
|
||||||
return data.isoformat()
|
return data.isoformat()
|
||||||
|
elif isinstance(data, Decimal):
|
||||||
|
return float(data)
|
||||||
raise TypeError
|
raise TypeError
|
||||||
|
|
||||||
def loads(self, s):
|
def loads(self, s):
|
||||||
|
|||||||
@@ -1,14 +1,22 @@
|
|||||||
|
import sys
|
||||||
|
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
|
from decimal import Decimal
|
||||||
|
|
||||||
from elasticsearch.serializer import JSONSerializer
|
from elasticsearch.serializer import JSONSerializer
|
||||||
from elasticsearch.exceptions import SerializationError
|
from elasticsearch.exceptions import SerializationError
|
||||||
|
|
||||||
from .test_cases import TestCase
|
from .test_cases import TestCase, SkipTest
|
||||||
|
|
||||||
class TestJSONSerializer(TestCase):
|
class TestJSONSerializer(TestCase):
|
||||||
def test_datetime_serialization(self):
|
def test_datetime_serialization(self):
|
||||||
self.assertEquals(u'{"d": "2010-10-01T02:30:00"}', JSONSerializer().dumps({'d': datetime(2010, 10, 1, 2, 30)}))
|
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):
|
def test_raises_serialization_error_on_dump_error(self):
|
||||||
self.assertRaises(SerializationError, JSONSerializer().dumps, object())
|
self.assertRaises(SerializationError, JSONSerializer().dumps, object())
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user