Use our own json encoder to deal with datetime
This commit is contained in:
parent
a9af21418b
commit
06a40638db
1 changed files with 23 additions and 8 deletions
31
backend.py
31
backend.py
|
@ -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)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue