app_raw.py 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. #!/usr/bin/env python
  2. import multiprocessing
  3. from itertools import repeat
  4. from operator import itemgetter
  5. from flask import Flask, Response
  6. from helpers import *
  7. # setup
  8. app = Flask(__name__)
  9. (
  10. POOL,
  11. TEMPLATE,
  12. READ_ROW_SQL,
  13. PREPARED_READ_ROW_SQL,
  14. WRITE_ROW_SQL,
  15. ADDITIONAL_ROW,
  16. ) = setup(multiprocessing.cpu_count() * 2.5)
  17. @app.route("/json")
  18. def hello():
  19. return orjson.dumps({"message": "Hello, World!"}), {
  20. "Content-Type": "application/json"
  21. }
  22. @app.route("/query")
  23. def get_random_world():
  24. db = POOL.getconn()
  25. cursor = db.cursor()
  26. num_queries = get_num_queries()
  27. results = map(query, zip(repeat(cursor, num_queries), generate_ids(num_queries)))
  28. worlds = [{"id": result[0], "randomNumber": result[1]} for result in results]
  29. POOL.putconn(db)
  30. return orjson.dumps(worlds), {"Content-Type": "application/json"}
  31. @app.route("/db")
  32. def get_random_world_single():
  33. db = POOL.getconn()
  34. cursor = db.cursor()
  35. cursor.execute("EXECUTE read_stmt(%s)", generate_ids(1))
  36. result = cursor.fetchone()
  37. world = {"id": result[0], "randomNumber": result[1]}
  38. POOL.putconn(db)
  39. return orjson.dumps(world), {"Content-Type": "application/json"}
  40. @app.route("/fortunes")
  41. def get_fortunes():
  42. db = POOL.getconn()
  43. cursor = db.cursor()
  44. cursor.execute("EXECUTE fortune")
  45. fortunes = list(cursor.fetchall())
  46. fortunes.append(ADDITIONAL_ROW)
  47. fortunes.sort(key=itemgetter(1))
  48. POOL.putconn(db)
  49. return Response(TEMPLATE.render(fortunes=fortunes))
  50. @app.route("/updates")
  51. def updates():
  52. """Test 5: Database Updates"""
  53. db = POOL.getconn()
  54. cursor = db.cursor()
  55. num_queries = get_num_queries()
  56. ids = generate_ids(num_queries)
  57. update_values = generate_ids(num_queries)
  58. list(map(query, zip(repeat(cursor, num_queries), generate_ids(num_queries))))
  59. worlds = list(zip(ids, update_values))
  60. execute_batch(cursor, "EXECUTE write_stmt(%s, %s)", worlds)
  61. db.commit()
  62. POOL.putconn(db)
  63. return orjson.dumps(
  64. [{"id": ident, "randomNumber": update} for ident, update in worlds]
  65. ), {"Content-Type": "application/json"}
  66. @app.route("/plaintext")
  67. def plaintext():
  68. """Test 6: Plaintext"""
  69. return b"Hello, World!", {"Content-Type": "text/plain"}
  70. # entry point for debugging
  71. if __name__ == "__main__":
  72. app.run(debug=True)