Digitale bierlijst

__init__.py 1.6KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  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 = {index: {"name": name, "count": 0} for index, name in enumerate(PRESET_NAMES)}
  19. NEXT_ID = len(PEOPLE)
  20. @app.route("/people", methods=["GET"])
  21. def get_people():
  22. """ Return a list of currently known people. """
  23. return jsonify(people=PEOPLE)
  24. @app.route("/people/<int:person_id>", methods=["GET"])
  25. def get_person(person_id: int):
  26. person = PEOPLE.get(person_id)
  27. if not person:
  28. abort(404)
  29. return jsonify(person=person)
  30. @app.route("/people", methods=["POST"])
  31. def add_person():
  32. """
  33. Add a new person.
  34. Required parameters:
  35. - name (str)
  36. """
  37. global NEXT_ID
  38. data = request.get_json()
  39. if not data:
  40. abort(400)
  41. name = data.get("name")
  42. if not name:
  43. abort(400)
  44. person = {"name": name, "count": 0}
  45. PEOPLE[NEXT_ID] = person
  46. person["id"] = NEXT_ID
  47. NEXT_ID += 1
  48. return jsonify(person=person)
  49. @app.route("/people/<int:person_id>/add_consumption", methods=["POST"])
  50. def add_consumption(person_id: int):
  51. person = PEOPLE.get(person_id)
  52. if not person:
  53. abort(404)
  54. increment = int(request.form.get("amount", 1))
  55. person["count"] += increment
  56. return jsonify(person=person)