Use our own json encoder to deal with datetime

This commit is contained in:
Yohan Boniface 2016-05-17 16:03:13 +02:00
parent a9af21418b
commit 06a40638db

View file

@ -1,6 +1,7 @@
# backend.py
# openeventdatabase
from datetime import datetime
import json
import os
@ -17,6 +18,20 @@ def db_connect():
user=os.getenv("DB_USER", None))
class EventEncoder(json.JSONEncoder):
def default(self, o):
if isinstance(o, datetime):
return o.isoformat()
try:
return super().default(o)
except TypeError:
return str(o)
def dumps(data):
return json.dumps(data, cls=EventEncoder)
class HeaderMiddleware:
def process_response(self, req, resp, resource):
@ -34,7 +49,7 @@ class StatsResource(object):
cur.close()
db.close()
resp.body = json.dumps(dict(stat))
resp.body = dumps(dict(stat))
resp.status = falcon.HTTP_200
@ -43,8 +58,8 @@ class BaseEvent:
def row_to_feature(self, row):
properties = dict(row['events_tags'])
properties.update({
'createdate': str(row['createdate']),
'last_updated': str(row['lastupdate'])
'createdate': row['createdate'],
'last_updated': row['lastupdate']
})
if "distance" in row:
properties['distance'] = row['distance']
@ -68,7 +83,7 @@ class EventsResource(BaseEvent):
db = db_connect()
cur = db.cursor(cursor_factory=psycopg2.extras.DictCursor)
cur.execute("SELECT events_id, events_tags, createdate, lastupdate, st_asgeojson(geom) as geometry FROM events JOIN geo ON (hash=events_geo)")
resp.body = json.dumps(self.rows_to_collection(cur.fetchall()))
resp.body = dumps(self.rows_to_collection(cur.fetchall()))
resp.status = falcon.HTTP_200
@ -145,7 +160,7 @@ class EventResource(BaseEvent):
event_bbox=event_bbox, event_what=event_what,
event_when=event_when, event_type=event_type)
cur.execute(sql)
resp.body = json.dumps(self.rows_to_collection(cur.fetchall()))
resp.body = dumps(self.rows_to_collection(cur.fetchall()))
resp.status = falcon.HTTP_200
else:
# Get single event geojson Feature by id.
@ -153,7 +168,7 @@ class EventResource(BaseEvent):
e = cur.fetchone()
if e is not None:
resp.body = json.dumps(self.row_to_feature(e))
resp.body = dumps(self.row_to_feature(e))
resp.status = falcon.HTTP_200
else:
resp.status = falcon.HTTP_404
@ -183,9 +198,9 @@ class EventResource(BaseEvent):
db = db_connect()
cur = db.cursor()
# get the geometry part
geometry=json.dumps(j['geometry'])
geometry=dumps(j['geometry'])
h = self.maybe_insert_geometry(geometry,cur)
params = (j['properties']['type'], j['properties']['what'], event_start, event_stop, bounds, json.dumps(j['properties']), h[0])
params = (j['properties']['type'], j['properties']['what'], event_start, event_stop, bounds, dumps(j['properties']), h[0])
if id:
params = params + (id,)
cur.execute(query, params)