This commit is contained in:
Yohan Boniface 2016-05-13 20:56:04 +02:00
parent c05b744fee
commit 3cde7042a1

View file

@ -4,9 +4,8 @@
import os import os
import falcon import falcon
import psycopg2 import psycopg2
import uuid
import json import json
import codecs
def db_connect(): def db_connect():
try: try:
@ -15,15 +14,18 @@ def db_connect():
db_host = os.getenv("DB_HOST", "localhost") db_host = os.getenv("DB_HOST", "localhost")
db_user = os.getenv("DB_USER", "oedb") db_user = os.getenv("DB_USER", "oedb")
db_password = os.getenv("POSTGRES_PASSWORD", "") db_password = os.getenv("POSTGRES_PASSWORD", "")
db = psycopg2.connect(dbname="oedb",host=db_host,password=db_password,user=db_user) db = psycopg2.connect(dbname="oedb", host=db_host,
password=db_password, user=db_user)
return db return db
def standard_headers(resp): def standard_headers(resp):
resp.set_header('X-Powered-By', 'OpenEventDatabase') resp.set_header('X-Powered-By', 'OpenEventDatabase')
resp.set_header('Access-Control-Allow-Origin', '*') resp.set_header('Access-Control-Allow-Origin', '*')
resp.set_header('Access-Control-Allow-Headers', 'X-Requested-With') resp.set_header('Access-Control-Allow-Headers', 'X-Requested-With')
class StatsResource(object): class StatsResource(object):
def on_get(self, req, resp): def on_get(self, req, resp):
db = db_connect() db = db_connect()
@ -37,6 +39,7 @@ class StatsResource(object):
resp.body = """{"events_count": %s, "last_created": "%s", "last_updated": "%s"}""" % (stat[0], stat[1], stat[2]) resp.body = """{"events_count": %s, "last_created": "%s", "last_updated": "%s"}""" % (stat[0], stat[1], stat[2])
resp.status = falcon.HTTP_200 resp.status = falcon.HTTP_200
class EventsResource(object): class EventsResource(object):
def on_get(self, req, resp): def on_get(self, req, resp):
db = db_connect() db = db_connect()
@ -53,6 +56,7 @@ JOIN geo ON (hash=events_geo)""");
]}""" ]}"""
resp.status = falcon.HTTP_200 resp.status = falcon.HTTP_200
class EventResource(object): class EventResource(object):
def maybe_insert_geometry(self, geometry, cur): def maybe_insert_geometry(self, geometry, cur):
# insert into geo table if not existing # insert into geo table if not existing
@ -76,7 +80,8 @@ class EventResource(object):
event_bbox = cur.mogrify(" AND geom && ST_SetSRID(ST_MakeBox2D(ST_Point(%s,%s),ST_Point(%s,%s)),4326) ",tuple(req.params['bbox'])).decode("utf-8") event_bbox = cur.mogrify(" AND geom && ST_SetSRID(ST_MakeBox2D(ST_Point(%s,%s),ST_Point(%s,%s)),4326) ",tuple(req.params['bbox'])).decode("utf-8")
event_dist = "" event_dist = ""
elif 'near' in req.params: elif 'near' in req.params:
# limit search with location+distance (long, lat, distance in meters) # Limit search with location+distance
# (long, lat, distance in meters)
if len(req.params['near']) < 3: if len(req.params['near']) < 3:
dist = 1 dist = 1
else: else:
@ -119,7 +124,7 @@ class EventResource(object):
if req.params['geom'] == 'full': if req.params['geom'] == 'full':
event_geom = "geom" event_geom = "geom"
# search recent active events # Search recent active events.
cur.execute(""" cur.execute("""
SELECT '{"type":"Feature", "properties": '|| (events_tags::jsonb || jsonb_build_object('id',events_id,'createdate',createdate,'lastupdate',lastupdate """+event_dist+"""))::text ||', "geometry":'|| st_asgeojson("""+event_geom+""") ||' }' as feature SELECT '{"type":"Feature", "properties": '|| (events_tags::jsonb || jsonb_build_object('id',events_id,'createdate',createdate,'lastupdate',lastupdate """+event_dist+"""))::text ||', "geometry":'|| st_asgeojson("""+event_geom+""") ||' }' as feature
FROM events FROM events
@ -177,7 +182,7 @@ WHERE events_id=%s;""", (id,))
geometry=json.dumps(j['geometry']) geometry=json.dumps(j['geometry'])
h = self.maybe_insert_geometry(geometry,cur) 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, json.dumps(j['properties']), h[0])
if (id): if id:
params = params + (id,) params = params + (id,)
cur.execute(query, params) cur.execute(query, params)
# get newly created event id # get newly created event id