123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- #!/usr/bin/env python3
- import json
- import atexit
- import datetime
- from flask import Flask, jsonify, request
- from flask_cors import CORS
- DB_FILE = "vacation.db"
- last_update = datetime.datetime.now()
- app = Flask(__name__)
- CORS(app)
- app.config["APPLICATION_ROOT"] = "/vacation/api"
- app.url_map.strict_slashes = False
- try:
- with open(DB_FILE) as infile:
- db = json.load(infile)
- except FileNotFoundError:
- db = {}
- @atexit.register
- def save_db(prefix=""):
- with open(prefix + DB_FILE, "w") as outfile:
- json.dump(db, outfile)
- def backup_db():
- save_db(f"backup-{datetime.datetime.now().isoformat()}-")
- @app.route("/")
- def health():
- return jsonify({"status": "healthy"})
- @app.route("/availability", methods=["GET", "POST"])
- def status():
- global last_update
- if request.method == "GET":
- return jsonify({
- "lastUpdated": last_update.isoformat(),
- "availability": [
- {
- "month": month,
- "day": day,
- "availability": [{
- "name": name,
- "status": status,
- } for (name, status) in avail.items()],
- } for (month, day), avail in db.items()
- ],
- })
- body = request.get_json()
- print(body)
- last_update = datetime.datetime.now()
- # TODO actually implement updates
-
- return "", 204
- if __name__ == "__main__":
- app.run("0.0.0.0", 5000, debug=True)
|