Browse Source

Allow CORS

tmdb
sipp11 10 years ago
parent
commit
464ba6b024
  1. 52
      flasky.py

52
flasky.py

@ -1,10 +1,56 @@
from flask import Flask, make_response, request from flask import Flask, make_response, request, current_app
from simplejson import dumps from simplejson import dumps
from pymongo import MongoClient from pymongo import MongoClient
import datetime import datetime
import dateutil.parser import dateutil.parser
import bson import bson
from datetime import timedelta
from functools import update_wrapper
def crossdomain(origin=None, methods=None, headers=None,
max_age=21600, attach_to_all=True,
automatic_options=True):
if methods is not None:
methods = ', '.join(sorted(x.upper() for x in methods))
if headers is not None and not isinstance(headers, basestring):
headers = ', '.join(x.upper() for x in headers)
if not isinstance(origin, basestring):
origin = ', '.join(origin)
if isinstance(max_age, timedelta):
max_age = max_age.total_seconds()
def get_methods():
if methods is not None:
return methods
options_resp = current_app.make_default_options_response()
return options_resp.headers['allow']
def decorator(f):
def wrapped_function(*args, **kwargs):
if automatic_options and request.method == 'OPTIONS':
resp = current_app.make_default_options_response()
else:
resp = make_response(f(*args, **kwargs))
if not attach_to_all and request.method != 'OPTIONS':
return resp
h = resp.headers
h['Access-Control-Allow-Origin'] = origin
h['Access-Control-Allow-Methods'] = get_methods()
h['Access-Control-Max-Age'] = str(max_age)
if headers is not None:
h['Access-Control-Allow-Headers'] = headers
return resp
f.provide_automatic_options = False
return update_wrapper(wrapped_function, f)
return decorator
app = Flask(__name__) app = Flask(__name__)
client = MongoClient(**{'host': 'localhost', 'port': 27017}) client = MongoClient(**{'host': 'localhost', 'port': 27017})
db = client.showtimes db = client.showtimes
@ -16,11 +62,13 @@ miscObjHandler = lambda obj: (
@app.route('/flask/') @app.route('/flask/')
@crossdomain(origin='*')
def hello_world(): def hello_world():
return 'This comes from Flask ^_^' return 'This comes from Flask ^_^'
@app.route('/groups/', methods=['GET']) @app.route('/groups/', methods=['GET'])
@crossdomain(origin='*')
def groups(): def groups():
known_groups = ['sf', 'major'] known_groups = ['sf', 'major']
r = make_response(dumps(known_groups)) r = make_response(dumps(known_groups))
@ -30,6 +78,7 @@ def groups():
@app.route('/theaters/', methods=['GET']) @app.route('/theaters/', methods=['GET'])
@app.route('/theaters/<group>/', methods=['GET']) @app.route('/theaters/<group>/', methods=['GET'])
@crossdomain(origin='*')
def list_theaters(group=None): def list_theaters(group=None):
if not group: if not group:
result = db.theater.find() result = db.theater.find()
@ -43,6 +92,7 @@ def list_theaters(group=None):
@app.route('/showtimes/<group>/', methods=['GET']) @app.route('/showtimes/<group>/', methods=['GET'])
@app.route('/showtimes/<group>/<code>/', methods=['GET']) @app.route('/showtimes/<group>/<code>/', methods=['GET'])
@crossdomain(origin='*')
def list_showtimes(group=None, code=None): def list_showtimes(group=None, code=None):
day = request.args.get('d', '') day = request.args.get('d', '')
q = {} q = {}

Loading…
Cancel
Save