From: Ciro Scognamiglio <ciro.scognamiglio@cslash.net>
Date: Wed, 26 Feb 2014 14:00:14 +0000 (+0100)
Subject: json serialization handles datetime and decimal numbers
X-Git-Tag: myslice-1.1~294
X-Git-Url: http://git.onelab.eu/?a=commitdiff_plain;h=7871c58de1b95f8d625c26c967dd72eb9430dcab;p=unfold.git

json serialization handles datetime and decimal numbers
---

diff --git a/rest/__init__.py b/rest/__init__.py
index 6e4edc7e..58fec2cb 100644
--- a/rest/__init__.py
+++ b/rest/__init__.py
@@ -13,6 +13,16 @@ from string import join
 import json
 
 
+# handles serialization of datetime in json
+DateEncoder = lambda obj: obj.strftime("%B %d, %Y %H:%M:%S") if isinstance(obj, datetime.datetime) else None
+
+# handles decimal numbers serialization in json
+class DecimalEncoder(json.JSONEncoder):
+    def _iterencode(self, o, markers=None):
+        if isinstance(o, decimal.Decimal):
+            return (str(o) for o in [o])
+        return super(DecimalEncoder, self)._iterencode(o, markers)
+
 def dispatch(request, object_type, object_name):
 
     switch = {
@@ -79,7 +89,7 @@ def send(request, response, object_properties):
             
             response_data['data'].append(d)
          
-        return HttpResponse(json.dumps(response_data), content_type="application/json")
+        return HttpResponse(json.dumps(response_data, cls=DecimalEncoder, default=DateEncoder), content_type="application/json")
 
 def error(request, object_name, object_properties):
     return HttpResponse(json.dumps({'error' : 'an error has occurred'}), content_type="application/json")
\ No newline at end of file