RESTful server to serve showtimes data
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

64 lines
1.6 KiB

from flask import Flask, make_response, request
from simplejson import dumps
from pymongo import MongoClient
import datetime
import dateutil.parser
import bson
app = Flask(__name__)
client = MongoClient(**{'host': 'localhost', 'port': 27017})
db = client.showtimes
miscObjHandler = lambda obj: (
obj.isoformat() if isinstance(obj, datetime.datetime)
or isinstance(obj, datetime.date)
else str(obj) if isinstance(obj, bson.objectid.ObjectId) else None)
@app.route('/flask/')
def hello_world():
return 'This comes from Flask ^_^'
@app.route('/groups/', methods=['GET'])
def groups():
known_groups = ['sf', 'major']
r = make_response(dumps(known_groups))
r.mimetype = 'application/json'
return r
@app.route('/theaters/', methods=['GET'])
@app.route('/theaters/<group>/', methods=['GET'])
def list_theaters(group=None):
if not group:
result = db.theater.find()
else:
result = db.theater.find({'group': group})
items = [i for i in result]
r = make_response(dumps(items, default=miscObjHandler))
r.mimetype = 'application/json'
return r
@app.route('/showtimes/<group>/', methods=['GET'])
@app.route('/showtimes/<group>/<code>/', methods=['GET'])
def list_showtimes(group=None, code=None):
day = request.args.get('d', '')
q = {}
if day:
q['date'] = dateutil.parser.parse(day)
if group:
q['group'] = group
if code:
q['theater'] = code
result = db.showtimes.find(q)
items = [i for i in result]
r = make_response(dumps(items, default=miscObjHandler))
r.mimetype = 'application/json'
return r
if __name__ == '__main__':
app.run(debug=True)