|
@@ -1,8 +1,9 @@
|
|
-from bottle import Bottle, route, request, run, template
|
|
|
|
|
|
+from bottle import Bottle, route, request, run, template, response
|
|
from bottle.ext import sqlalchemy
|
|
from bottle.ext import sqlalchemy
|
|
from sqlalchemy import create_engine, Column, Integer, Unicode
|
|
from sqlalchemy import create_engine, Column, Integer, Unicode
|
|
from sqlalchemy.ext.declarative import declarative_base
|
|
from sqlalchemy.ext.declarative import declarative_base
|
|
from random import randint
|
|
from random import randint
|
|
|
|
+import sys
|
|
import ujson
|
|
import ujson
|
|
from operator import attrgetter, itemgetter
|
|
from operator import attrgetter, itemgetter
|
|
from functools import partial
|
|
from functools import partial
|
|
@@ -14,6 +15,9 @@ db_engine = create_engine(app.config['SQLALCHEMY_DATABASE_URI'])
|
|
plugin = sqlalchemy.Plugin(db_engine, keyword='db', )
|
|
plugin = sqlalchemy.Plugin(db_engine, keyword='db', )
|
|
app.install(plugin)
|
|
app.install(plugin)
|
|
|
|
|
|
|
|
+if sys.version_info[0] == 3:
|
|
|
|
+ xrange = range
|
|
|
|
+
|
|
|
|
|
|
class World(Base):
|
|
class World(Base):
|
|
__tablename__ = "World"
|
|
__tablename__ = "World"
|
|
@@ -34,46 +38,52 @@ class Fortune(Base):
|
|
id = Column(Integer, primary_key=True)
|
|
id = Column(Integer, primary_key=True)
|
|
message = Column(Unicode)
|
|
message = Column(Unicode)
|
|
|
|
|
|
|
|
+
|
|
@app.route("/json")
|
|
@app.route("/json")
|
|
def hello():
|
|
def hello():
|
|
- resp = {"message": "Hello, World!"}
|
|
|
|
- return ujson.dumps(resp)
|
|
|
|
|
|
+ response.content_type = 'application/json'
|
|
|
|
+ resp = {"message": "Hello, World!"}
|
|
|
|
+ return ujson.dumps(resp)
|
|
|
|
|
|
@app.route("/db")
|
|
@app.route("/db")
|
|
def get_random_world(db):
|
|
def get_random_world(db):
|
|
- num_queries = request.query.queries or '1'
|
|
|
|
- worlds = []
|
|
|
|
- rp = partial(randint, 1, 10000)
|
|
|
|
- for i in xrange(int(num_queries)):
|
|
|
|
- worlds.append(db.query(World).get(rp()).serialize)
|
|
|
|
- return ujson.dumps(worlds)
|
|
|
|
|
|
+ num_queries = request.query.get('queries', 1, type=int)
|
|
|
|
+ worlds = []
|
|
|
|
+ rp = partial(randint, 1, 10000)
|
|
|
|
+ for i in xrange(num_queries):
|
|
|
|
+ worlds.append(db.query(World).get(rp()).serialize)
|
|
|
|
+ response.content_type = 'application/json'
|
|
|
|
+ return ujson.dumps(worlds)
|
|
|
|
|
|
@app.route("/dbs")
|
|
@app.route("/dbs")
|
|
def get_random_world_single(db):
|
|
def get_random_world_single(db):
|
|
- wid = randint(1, 10000)
|
|
|
|
- worlds = [db.query(World).get(wid).serialize]
|
|
|
|
- return ujson.dumps(worlds)
|
|
|
|
|
|
+ wid = randint(1, 10000)
|
|
|
|
+ worlds = [db.query(World).get(wid).serialize]
|
|
|
|
+ response.content_type = 'application/json'
|
|
|
|
+ return ujson.dumps(worlds)
|
|
|
|
|
|
@app.route("/dbraw")
|
|
@app.route("/dbraw")
|
|
def get_random_world_raw():
|
|
def get_random_world_raw():
|
|
- connection = db_engine.connect()
|
|
|
|
- num_queries = request.query.queries or '1'
|
|
|
|
- worlds = []
|
|
|
|
- rp = partial(randint, 1, 10000)
|
|
|
|
- for i in range(int(num_queries)):
|
|
|
|
- result = connection.execute("SELECT * FROM world WHERE id = " + str(rp())).fetchone()
|
|
|
|
- worlds.append({'id': result[0], 'randomNumber': result[1]})
|
|
|
|
- connection.close()
|
|
|
|
- return ujson.dumps(worlds)
|
|
|
|
|
|
+ connection = db_engine.connect()
|
|
|
|
+ num_queries = request.query.get('queries', 1, type=int)
|
|
|
|
+ worlds = []
|
|
|
|
+ rp = partial(randint, 1, 10000)
|
|
|
|
+ for i in xrange(int(num_queries)):
|
|
|
|
+ result = connection.execute("SELECT * FROM world WHERE id = " + str(rp())).fetchone()
|
|
|
|
+ worlds.append({'id': result[0], 'randomNumber': result[1]})
|
|
|
|
+ connection.close()
|
|
|
|
+ response.content_type = 'application/json'
|
|
|
|
+ return ujson.dumps(worlds)
|
|
|
|
|
|
@app.route("/dbsraw")
|
|
@app.route("/dbsraw")
|
|
def get_random_world_single_raw():
|
|
def get_random_world_single_raw():
|
|
- connection = db_engine.connect()
|
|
|
|
- wid = randint(1, 10000)
|
|
|
|
- result = connection.execute("SELECT * FROM world WHERE id = " + str(wid)).fetchone()
|
|
|
|
- worlds = [{'id': result[0], 'randomNumber': result[1]}]
|
|
|
|
- connection.close()
|
|
|
|
- return ujson.dumps(worlds)
|
|
|
|
|
|
+ connection = db_engine.connect()
|
|
|
|
+ wid = randint(1, 10000)
|
|
|
|
+ result = connection.execute("SELECT * FROM world WHERE id = " + str(wid)).fetchone()
|
|
|
|
+ worlds = [{'id': result[0], 'randomNumber': result[1]}]
|
|
|
|
+ connection.close()
|
|
|
|
+ response.content_type = 'application/json'
|
|
|
|
+ return ujson.dumps(worlds)
|
|
|
|
|
|
@app.route("/fortune")
|
|
@app.route("/fortune")
|
|
def fortune_orm(db):
|
|
def fortune_orm(db):
|
|
@@ -84,12 +94,60 @@ def fortune_orm(db):
|
|
|
|
|
|
@app.route("/fortuneraw")
|
|
@app.route("/fortuneraw")
|
|
def fortune_raw():
|
|
def fortune_raw():
|
|
- connection = db_engine.connect()
|
|
|
|
- fortunes=[(f.id, f.message) for f in connection.execute("SELECT * FROM Fortune")]
|
|
|
|
- fortunes.append((0, u'Additional fortune added at request time.'))
|
|
|
|
- fortunes=sorted(fortunes, key=itemgetter(1))
|
|
|
|
- connection.close()
|
|
|
|
- return template('fortune', fortunes=fortunes)
|
|
|
|
|
|
+ connection = db_engine.connect()
|
|
|
|
+ fortunes=[(f.id, f.message) for f in connection.execute("SELECT * FROM Fortune")]
|
|
|
|
+ fortunes.append((0, u'Additional fortune added at request time.'))
|
|
|
|
+ fortunes=sorted(fortunes, key=itemgetter(1))
|
|
|
|
+ connection.close()
|
|
|
|
+ return template('fortune', fortunes=fortunes)
|
|
|
|
+
|
|
|
|
+
|
|
|
|
[email protected]("/updates")
|
|
|
|
+def updates(db):
|
|
|
|
+ """Test 5: Database Updates"""
|
|
|
|
+ num_queries = request.query.get('queries', 1, type=int)
|
|
|
|
+ if num_queries > 500:
|
|
|
|
+ num_queries = 500
|
|
|
|
+
|
|
|
|
+ worlds = []
|
|
|
|
+ rp = partial(randint, 1, 10000)
|
|
|
|
+ for i in xrange(num_queries):
|
|
|
|
+ world = db.query(World).get(rp())
|
|
|
|
+ world.randomNumber = rp()
|
|
|
|
+ worlds.append(world.serialize)
|
|
|
|
+
|
|
|
|
+ response.content_type = 'application/json'
|
|
|
|
+ return ujson.dumps(worlds)
|
|
|
|
+
|
|
|
|
+
|
|
|
|
[email protected]("/raw-updates")
|
|
|
|
+def raw_updates():
|
|
|
|
+ """Test 5: Database Updates"""
|
|
|
|
+ num_queries = request.query.get('queries', 1, type=int)
|
|
|
|
+ if num_queries > 500:
|
|
|
|
+ num_queries = 500
|
|
|
|
+
|
|
|
|
+ conn = db_engine.connect()
|
|
|
|
+
|
|
|
|
+ worlds = []
|
|
|
|
+ rp = partial(randint, 1, 10000)
|
|
|
|
+ for i in xrange(num_queries):
|
|
|
|
+ world = conn.execute("SELECT * FROM World WHERE id=%s", (rp(),)).fetchone()
|
|
|
|
+ randomNumber = rp()
|
|
|
|
+ worlds.append({'id': world['id'], 'randomNumber': randomNumber})
|
|
|
|
+ conn.execute("UPDATE World SET randomNumber=%s WHERE id=%s",
|
|
|
|
+ (randomNumber, world['id']))
|
|
|
|
+ conn.close()
|
|
|
|
+ response.content_type = 'application/json'
|
|
|
|
+ return ujson.dumps(worlds)
|
|
|
|
+
|
|
|
|
+
|
|
|
|
[email protected]('/plaintext')
|
|
|
|
+def plaintext():
|
|
|
|
+ """Test 6: Plaintext"""
|
|
|
|
+ response.content_type = 'text/plain'
|
|
|
|
+ return b'Hello, World!'
|
|
|
|
+
|
|
|
|
|
|
if __name__ == "__main__":
|
|
if __name__ == "__main__":
|
|
app.run(host='0.0.0.0', debug=False)
|
|
app.run(host='0.0.0.0', debug=False)
|