Adding JSONSerializer
This commit is contained in:
@@ -2,6 +2,10 @@ class ElastiSearchException(Exception):
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class SerializationError(ElastiSearchException):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
class TransportError(ElastiSearchException):
|
class TransportError(ElastiSearchException):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,24 @@
|
|||||||
|
import json
|
||||||
|
from datetime import date, datetime
|
||||||
|
|
||||||
|
from .exceptions import SerializationError
|
||||||
|
|
||||||
|
class JSONSerializer(object):
|
||||||
|
def default(self, data):
|
||||||
|
if isinstance(data, (date, datetime)):
|
||||||
|
return data.isoformat()
|
||||||
|
raise TypeError
|
||||||
|
|
||||||
|
def loads(self, s):
|
||||||
|
try:
|
||||||
|
return json.loads(s)
|
||||||
|
except ValueError as e:
|
||||||
|
raise SerializationError(e)
|
||||||
|
|
||||||
|
def dumps(self, data):
|
||||||
|
try:
|
||||||
|
return json.dumps(data, default=self.default)
|
||||||
|
except ValueError as e:
|
||||||
|
raise SerializationError(e)
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
from datetime import datetime
|
||||||
|
from unittest import TestCase
|
||||||
|
|
||||||
|
from elasticsearch.serializer import JSONSerializer
|
||||||
|
|
||||||
|
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)}))
|
||||||
Reference in New Issue
Block a user