Digitale bierlijst

__init__.py 1.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  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. people.sort(key=lambda p: p["name"])
  28. return jsonify(people=people)
  29. @app.route("/people/<int:person_id>", methods=["GET"])
  30. def get_person(person_id: int):
  31. person = PEOPLE.get(person_id)
  32. if not person:
  33. abort(404)
  34. return jsonify(person=person)
  35. @app.route("/people", methods=["POST"])
  36. def add_person():
  37. """
  38. Add a new person.
  39. Required parameters:
  40. - name (str)
  41. """
  42. global NEXT_ID
  43. data = request.get_json()
  44. if not data:
  45. abort(400)
  46. name = data.get("name")
  47. if not name:
  48. abort(400)
  49. person = {"id": NEXT_ID, "name": name, "count": 0}
  50. PEOPLE[NEXT_ID] = person
  51. NEXT_ID += 1
  52. return jsonify(person=person)
  53. @app.route("/people/<int:person_id>/add_consumption", methods=["POST"])
  54. def add_consumption(person_id: int):
  55. person = PEOPLE.get(person_id)
  56. if not person:
  57. abort(404)
  58. increment = int(request.form.get("amount", 1))
  59. person["count"] += increment
  60. return jsonify(person=person)