1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- #!/usr/bin/env python
- import multiprocessing
- from itertools import repeat
- from operator import itemgetter
- from flask import Flask, Response
- from helpers import *
- # setup
- app = Flask(__name__)
- (
- POOL,
- TEMPLATE,
- READ_ROW_SQL,
- PREPARED_READ_ROW_SQL,
- WRITE_ROW_SQL,
- ADDITIONAL_ROW,
- ) = setup(multiprocessing.cpu_count() * 2.5)
- @app.route("/json")
- def hello():
- return orjson.dumps({"message": "Hello, World!"}), {
- "Content-Type": "application/json"
- }
- @app.route("/query")
- def get_random_world():
- db = POOL.getconn()
- cursor = db.cursor()
- num_queries = get_num_queries()
- results = map(query, zip(repeat(cursor, num_queries), generate_ids(num_queries)))
- worlds = [{"id": result[0], "randomNumber": result[1]} for result in results]
- POOL.putconn(db)
- return orjson.dumps(worlds), {"Content-Type": "application/json"}
- @app.route("/db")
- def get_random_world_single():
- db = POOL.getconn()
- cursor = db.cursor()
- cursor.execute("EXECUTE read_stmt(%s)", generate_ids(1))
- result = cursor.fetchone()
- world = {"id": result[0], "randomNumber": result[1]}
- POOL.putconn(db)
- return orjson.dumps(world), {"Content-Type": "application/json"}
- @app.route("/fortunes")
- def get_fortunes():
- db = POOL.getconn()
- cursor = db.cursor()
- cursor.execute("EXECUTE fortune")
- fortunes = list(cursor.fetchall())
- fortunes.append(ADDITIONAL_ROW)
- fortunes.sort(key=itemgetter(1))
- POOL.putconn(db)
- return Response(TEMPLATE.render(fortunes=fortunes))
- @app.route("/updates")
- def updates():
- """Test 5: Database Updates"""
- db = POOL.getconn()
- cursor = db.cursor()
- num_queries = get_num_queries()
- ids = generate_ids(num_queries)
- update_values = generate_ids(num_queries)
- list(map(query, zip(repeat(cursor, num_queries), generate_ids(num_queries))))
- worlds = list(zip(ids, update_values))
- execute_batch(cursor, "EXECUTE write_stmt(%s, %s)", worlds)
- db.commit()
- POOL.putconn(db)
- return orjson.dumps(
- [{"id": ident, "randomNumber": update} for ident, update in worlds]
- ), {"Content-Type": "application/json"}
- @app.route("/plaintext")
- def plaintext():
- """Test 6: Plaintext"""
- return b"Hello, World!", {"Content-Type": "text/plain"}
- # entry point for debugging
- if __name__ == "__main__":
- app.run(debug=True)
|