|
@@ -1,12 +1,14 @@
|
|
|
-from bottle import Bottle, route, request, run
|
|
|
+from bottle import Bottle, route, request, run, template
|
|
|
from bottle.ext import sqlalchemy
|
|
|
-from sqlalchemy import create_engine, Column, Integer
|
|
|
+from sqlalchemy import create_engine, Column, Integer, Unicode
|
|
|
from sqlalchemy.ext.declarative import declarative_base
|
|
|
from random import randint
|
|
|
import ujson
|
|
|
+from operator import attrgetter, itemgetter
|
|
|
+from functools import partial
|
|
|
|
|
|
app = Bottle()
|
|
|
-app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://benchmarkdbuser:benchmarkdbpass@localhost:3306/hello_world'
|
|
|
+app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://benchmarkdbuser:benchmarkdbpass@DBHOSTNAME:3306/hello_world?charset=utf8'
|
|
|
Base = declarative_base()
|
|
|
db_engine = create_engine(app.config['SQLALCHEMY_DATABASE_URI'])
|
|
|
plugin = sqlalchemy.Plugin(db_engine, keyword='db', )
|
|
@@ -27,6 +29,11 @@ class World(Base):
|
|
|
'randomNumber': self.randomNumber
|
|
|
}
|
|
|
|
|
|
+class Fortune(Base):
|
|
|
+ __tablename__ = "Fortune"
|
|
|
+ id = Column(Integer, primary_key=True)
|
|
|
+ message = Column(Unicode)
|
|
|
+
|
|
|
@app.route("/json")
|
|
|
def hello():
|
|
|
resp = {"message": "Hello, World!"}
|
|
@@ -36,9 +43,9 @@ def hello():
|
|
|
def get_random_world(db):
|
|
|
num_queries = request.query.queries or '1'
|
|
|
worlds = []
|
|
|
- for i in range(int(num_queries)):
|
|
|
- wid = randint(1, 10000)
|
|
|
- worlds.append(db.query(World).get(wid).serialize)
|
|
|
+ rp = partial(randint, 10000)
|
|
|
+ for i in xrange(int(num_queries)):
|
|
|
+ worlds.append(db.query(World).get(rp()).serialize)
|
|
|
return ujson.dumps(worlds)
|
|
|
|
|
|
@app.route("/dbs")
|
|
@@ -52,9 +59,9 @@ def get_random_world_raw():
|
|
|
connection = db_engine.connect()
|
|
|
num_queries = request.query.queries or '1'
|
|
|
worlds = []
|
|
|
+ rp = partial(randint, 10000)
|
|
|
for i in range(int(num_queries)):
|
|
|
- wid = randint(1, 10000)
|
|
|
- result = connection.execute("SELECT * FROM world WHERE id = " + str(wid)).fetchone()
|
|
|
+ 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)
|
|
@@ -68,22 +75,21 @@ def get_random_world_single_raw():
|
|
|
connection.close()
|
|
|
return ujson.dumps(worlds)
|
|
|
|
|
|
[email protected]("/update")
|
|
|
-def update_worlds(db):
|
|
|
- num_queries = int(request.query.queries or '1')
|
|
|
- if num_queries < 1:
|
|
|
- num_queries = 1
|
|
|
- elif num_queries > 500:
|
|
|
- num_queries = 500
|
|
|
[email protected]("/fortune")
|
|
|
+def fortune_orm(db):
|
|
|
+ fortunes=db.query(Fortune).all()
|
|
|
+ fortunes.append(Fortune(message="Additional fortune added at request time."))
|
|
|
+ fortunes=sorted(fortunes, key=attrgetter('message'))
|
|
|
+ return template('fortune-obj', fortunes=fortunes)
|
|
|
|
|
|
- worlds = []
|
|
|
- for i in range(num_queries):
|
|
|
- wid = randint(1, 10000)
|
|
|
- world = db.query(World).get(wid)
|
|
|
- world.randomNumber = randint(1, 10000)
|
|
|
- db.commit()
|
|
|
- worlds.append(world.serialize)
|
|
|
- return ujson.dumps(worlds)
|
|
|
+@app.route("/fortuneraw")
|
|
|
+def fortune_raw():
|
|
|
+ connection = db_engine.connect()
|
|
|
+ fortunes=[(f.id, f.message) for f in connection.execute("SELECT * FROM Fortune")]
|
|
|
+ fortunes.append((0L, u'Additional fortune added at request time.'))
|
|
|
+ fortunes=sorted(fortunes, key=itemgetter(1))
|
|
|
+ connection.close()
|
|
|
+ return template('fortune', fortunes=fortunes)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
|
- app.run()
|
|
|
+ app.run(host='0.0.0.0', debug=True)
|