| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 | 
from random import randint, samplefrom emmett import App, requestfrom emmett.orm import Database, Model, Field, rowmethodfrom emmett.tools import serviceapp = App(__name__)class World(Model):    tablename = "world"    randomnumber = Field.int()    @rowmethod('serialize')    def _serialize(self, row):        return {'id': row.id, 'randomNumber': row.randomnumber}class Fortune(Model):    tablename = "fortune"    message = Field.string()    @rowmethod('serialize')    def _serialize(self, row):        return {'id': row.id, 'message': row.message}app.config.handle_static = Falseapp.config.db.adapter = 'postgres:psycopg2'app.config.db.host = 'tfb-database'app.config.db.user = 'benchmarkdbuser'app.config.db.password = 'benchmarkdbpass'app.config.db.database = 'hello_world'app.config.db.pool_size = 10db = Database(app)db.define_models(World, Fortune)@app.route()@service.jsonasync def json():    return {'message': 'Hello, World!'}@app.route("/db", pipeline=[db.pipe])@service.jsonasync def get_random_world():    return World.get(randint(1, 10000)).serialize()def get_qparam():    try:        rv = int(request.query_params.queries or 1)    except ValueError:        return 1    if rv < 1:        return 1    if rv > 500:        return 500    return rv@app.route("/queries", pipeline=[db.pipe])@service.jsonasync def get_random_worlds():    num_queries = get_qparam()    row_ids = sample(range(1, 10000), num_queries)    worlds = [World.get(row_id).serialize() for row_id in row_ids]    return worlds@app.route(pipeline=[db.pipe], output='template')async def fortunes():    fortune = Fortune.new(message="Additional fortune added at request time.")    fortune.id = 0    fortunes = Fortune.all().select()    fortunes.append(fortune)    fortunes.sort(lambda m: m.message)    return {'fortunes': fortunes}@app.route(pipeline=[db.pipe])@service.jsonasync def updates():    num_queries = get_qparam()    updates = list(zip(        sample(range(1, 10000), num_queries),        sorted(sample(range(1, 10000), num_queries))    ))    worlds = []    for row_id, number in updates:        world = World.get(row_id)        world.update_record(randomnumber=number)        worlds.append(world.serialize())    return worlds@app.route(output='bytes')async def plaintext():    return b'Hello, World!'
 |