Digitale bierlijst

__init__.py 1.6KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. """
  2. Piket server, handles events generated by the client.
  3. """
  4. from flask import Flask, jsonify, abort, request
  5. app = Flask("piket_server")
  6. @app.route("/ping")
  7. def ping() -> None:
  8. """ Return a status ping. """
  9. return "Pong"
  10. PRESET_NAMES = [
  11. "Maarten",
  12. "Knoepie Draggelsturf",
  13. "Teddy Veenlijk",
  14. "Chris Kraslot",
  15. "Knibbe Tjakkomans",
  16. "Foek Lammenschaap",
  17. ]
  18. PEOPLE = {
  19. index: {"id": index, "name": name, "count": 0}
  20. for index, name in enumerate(PRESET_NAMES)
  21. }
  22. NEXT_ID = len(PEOPLE)
  23. @app.route("/people", methods=["GET"])
  24. def get_people():
  25. """ Return a list of currently known people. """
  26. people = [p for p in PEOPLE.values()]
  27. return jsonify(people=people)
  28. @app.route("/people/<int:person_id>", methods=["GET"])
  29. def get_person(person_id: int):
  30. person = PEOPLE.get(person_id)
  31. if not person:
  32. abort(404)
  33. return jsonify(person=person)
  34. @app.route("/people", methods=["POST"])
  35. def add_person():
  36. """
  37. Add a new person.
  38. Required parameters:
  39. - name (str)
  40. """
  41. global NEXT_ID
  42. data = request.get_json()
  43. if not data:
  44. abort(400)
  45. name = data.get("name")
  46. if not name:
  47. abort(400)
  48. person = {"id": NEXT_ID, "name": name, "count": 0}
  49. PEOPLE[NEXT_ID] = person
  50. NEXT_ID += 1
  51. return jsonify(person=person)
  52. @app.route("/people/<int:person_id>/add_consumption", methods=["POST"])
  53. def add_consumption(person_id: int):
  54. person = PEOPLE.get(person_id)
  55. if not person:
  56. abort(404)
  57. increment = int(request.form.get("amount", 1))
  58. person["count"] += increment
  59. return jsonify(person=person)