""" Piket server, handles events generated by the client. """ from flask import Flask, jsonify, abort, request app = Flask("piket_server") @app.route("/ping") def ping() -> None: """ Return a status ping. """ return "Pong" PRESET_NAMES = [ "Maarten", "Knoepie Draggelsturf", "Teddy Veenlijk", "Chris Kraslot", "Knibbe Tjakkomans", "Foek Lammenschaap", ] PEOPLE = { index: {"id": index, "name": name, "count": 0} for index, name in enumerate(PRESET_NAMES) } NEXT_ID = len(PEOPLE) @app.route("/people", methods=["GET"]) def get_people(): """ Return a list of currently known people. """ people = [p for p in PEOPLE.values()] people.sort(key=lambda p: p["name"]) return jsonify(people=people) @app.route("/people/", methods=["GET"]) def get_person(person_id: int): person = PEOPLE.get(person_id) if not person: abort(404) return jsonify(person=person) @app.route("/people", methods=["POST"]) def add_person(): """ Add a new person. Required parameters: - name (str) """ global NEXT_ID data = request.get_json() if not data: abort(400) name = data.get("name") if not name: abort(400) person = {"id": NEXT_ID, "name": name, "count": 0} PEOPLE[NEXT_ID] = person NEXT_ID += 1 return jsonify(person=person) @app.route("/people//add_consumption", methods=["POST"]) def add_consumption(person_id: int): person = PEOPLE.get(person_id) if not person: abort(404) increment = int(request.form.get("amount", 1)) person["count"] += increment return jsonify(person=person)