|
@@ -1,11 +1,12 @@
|
|
#!/usr/bin/env python
|
|
#!/usr/bin/env python
|
|
from functools import partial
|
|
from functools import partial
|
|
|
|
+import json
|
|
from operator import attrgetter
|
|
from operator import attrgetter
|
|
from random import randint
|
|
from random import randint
|
|
import sys
|
|
import sys
|
|
|
|
|
|
import flask
|
|
import flask
|
|
-from flask import Flask, jsonify, request, render_template
|
|
|
|
|
|
+from flask import Flask, request, render_template, make_response
|
|
from flask.ext.sqlalchemy import SQLAlchemy
|
|
from flask.ext.sqlalchemy import SQLAlchemy
|
|
from sqlalchemy import create_engine
|
|
from sqlalchemy import create_engine
|
|
|
|
|
|
@@ -50,6 +51,14 @@ class Fortune(db.Model):
|
|
|
|
|
|
# views
|
|
# views
|
|
|
|
|
|
|
|
+# flask.jsonify doesn't allow array at top level for security concern.
|
|
|
|
+# So we should have oriiginal one.
|
|
|
|
+def json_response(obj):
|
|
|
|
+ res = make_response(json.dumps(obj))
|
|
|
|
+ res.mimetype = "application/json"
|
|
|
|
+ return res
|
|
|
|
+
|
|
|
|
+
|
|
@app.route("/json")
|
|
@app.route("/json")
|
|
def hello():
|
|
def hello():
|
|
return jsonify(message='Hello, World!')
|
|
return jsonify(message='Hello, World!')
|
|
@@ -60,14 +69,14 @@ def get_random_world():
|
|
num_queries = request.args.get("queries", 1, type=int)
|
|
num_queries = request.args.get("queries", 1, type=int)
|
|
worlds = [World.query.get(randint(1, 10000)).serialize
|
|
worlds = [World.query.get(randint(1, 10000)).serialize
|
|
for _ in xrange(num_queries)]
|
|
for _ in xrange(num_queries)]
|
|
- return jsonify(worlds=worlds)
|
|
|
|
|
|
+ return json_response(worlds)
|
|
|
|
|
|
|
|
|
|
@app.route("/dbs")
|
|
@app.route("/dbs")
|
|
def get_random_world_single():
|
|
def get_random_world_single():
|
|
wid = randint(1, 10000)
|
|
wid = randint(1, 10000)
|
|
worlds = [World.query.get(wid).serialize]
|
|
worlds = [World.query.get(wid).serialize]
|
|
- return jsonify(worlds=worlds)
|
|
|
|
|
|
+ return json_response(worlds)
|
|
|
|
|
|
|
|
|
|
@app.route("/dbraw")
|
|
@app.route("/dbraw")
|
|
@@ -80,7 +89,7 @@ def get_random_world_raw():
|
|
result = connection.execute("SELECT * FROM World WHERE id = " + str(wid)).fetchone()
|
|
result = connection.execute("SELECT * FROM World WHERE id = " + str(wid)).fetchone()
|
|
worlds.append({'id': result[0], 'randomNumber': result[1]})
|
|
worlds.append({'id': result[0], 'randomNumber': result[1]})
|
|
connection.close()
|
|
connection.close()
|
|
- return jsonify(worlds=worlds)
|
|
|
|
|
|
+ return json_response(worlds)
|
|
|
|
|
|
|
|
|
|
@app.route("/dbsraw")
|
|
@app.route("/dbsraw")
|
|
@@ -90,7 +99,7 @@ def get_random_world_single_raw():
|
|
result = connection.execute("SELECT * FROM World WHERE id = " + str(wid)).fetchone()
|
|
result = connection.execute("SELECT * FROM World WHERE id = " + str(wid)).fetchone()
|
|
worlds = [{'id': result[0], 'randomNumber': result[1]}]
|
|
worlds = [{'id': result[0], 'randomNumber': result[1]}]
|
|
connection.close()
|
|
connection.close()
|
|
- return jsonify(worlds=worlds)
|
|
|
|
|
|
+ return json_response(worlds)
|
|
|
|
|
|
@app.route("/fortunes")
|
|
@app.route("/fortunes")
|
|
def get_fortunes():
|
|
def get_fortunes():
|
|
@@ -123,7 +132,7 @@ def updates():
|
|
world.randomNumber = rp()
|
|
world.randomNumber = rp()
|
|
worlds.append(world.serialize)
|
|
worlds.append(world.serialize)
|
|
db.session.commit()
|
|
db.session.commit()
|
|
- return jsonify(worlds)
|
|
|
|
|
|
+ return json_response(worlds)
|
|
|
|
|
|
|
|
|
|
@app.route("/raw-updates")
|
|
@app.route("/raw-updates")
|
|
@@ -141,13 +150,13 @@ def raw_updates():
|
|
worlds.append({'id': world['id'], 'randomNumber': randomNumber})
|
|
worlds.append({'id': world['id'], 'randomNumber': randomNumber})
|
|
dbraw_engine.execute("UPDATE World SET randomNumber=%s WHERE id=%s",
|
|
dbraw_engine.execute("UPDATE World SET randomNumber=%s WHERE id=%s",
|
|
(randomNumber, world['id']))
|
|
(randomNumber, world['id']))
|
|
- return jsonify(worlds=worlds)
|
|
|
|
|
|
+ return json_response(worlds)
|
|
|
|
|
|
|
|
|
|
@app.route('/plaintext')
|
|
@app.route('/plaintext')
|
|
def plaintext():
|
|
def plaintext():
|
|
"""Test 6: Plaintext"""
|
|
"""Test 6: Plaintext"""
|
|
- response = flask.make_response(b'Hello, World!')
|
|
|
|
|
|
+ response = make_response(b'Hello, World!')
|
|
response.content_type = 'text/plain'
|
|
response.content_type = 'text/plain'
|
|
return response
|
|
return response
|
|
|
|
|