Ajout d'une API.
This commit is contained in:
parent
5330b27e5d
commit
41bd0d39ab
103
app.py
103
app.py
@ -42,16 +42,27 @@ GLOBAL_CONTEXT["DEBUG"] = False # Fait en sorte que le logiciel soit un peu plus
|
|||||||
GLOBAL_CONTEXT["DOMAIN"] = "https://unisquat.alwaysdata.net" # Le domaine sur lequel est host l'instance
|
GLOBAL_CONTEXT["DOMAIN"] = "https://unisquat.alwaysdata.net" # Le domaine sur lequel est host l'instance
|
||||||
|
|
||||||
# Globales
|
# Globales
|
||||||
|
|
||||||
app = Flask(__name__)
|
app = Flask(__name__)
|
||||||
|
logs = [] # Stocke les différentes requêtes faite sur la route /free_rooms/, sous la forme {"timestamp":timestamp,"depts":[]}
|
||||||
logs = [] # Stoque les différentes requêtes faite sur la route /free_rooms/, sous la forme {"timestamp":timestamp,"depts":[]}
|
|
||||||
if os.path.isfile(LOG_FILE):
|
if os.path.isfile(LOG_FILE):
|
||||||
with open(LOG_FILE,"r") as f:
|
with open(LOG_FILE,"r") as f:
|
||||||
logs = json.loads(f.read())
|
logs = json.loads(f.read())
|
||||||
|
|
||||||
# Fonctions :
|
# Fonctions :
|
||||||
def save_logs(logs):
|
def save_logs(logs):
|
||||||
|
"""
|
||||||
|
Sauvegarde les logs dans un fichier.
|
||||||
|
|
||||||
|
Parameters
|
||||||
|
----------
|
||||||
|
logs : list
|
||||||
|
Liste des logs.
|
||||||
|
|
||||||
|
Returns
|
||||||
|
-------
|
||||||
|
None.
|
||||||
|
|
||||||
|
"""
|
||||||
with open(LOG_FILE,"w") as f:
|
with open(LOG_FILE,"w") as f:
|
||||||
f.write(json.dumps(logs))
|
f.write(json.dumps(logs))
|
||||||
|
|
||||||
@ -70,7 +81,6 @@ def home() :
|
|||||||
"""
|
"""
|
||||||
return render_template("index.html", **GLOBAL_CONTEXT)
|
return render_template("index.html", **GLOBAL_CONTEXT)
|
||||||
|
|
||||||
|
|
||||||
@app.route("/app")
|
@app.route("/app")
|
||||||
def select_dept() :
|
def select_dept() :
|
||||||
"""
|
"""
|
||||||
@ -94,7 +104,6 @@ def select_dept() :
|
|||||||
url_for("static", filename="style.css")
|
url_for("static", filename="style.css")
|
||||||
return render_template("dept-select.html", **context, **GLOBAL_CONTEXT)
|
return render_template("dept-select.html", **context, **GLOBAL_CONTEXT)
|
||||||
|
|
||||||
|
|
||||||
@app.route("/stats")
|
@app.route("/stats")
|
||||||
def stats():
|
def stats():
|
||||||
"""
|
"""
|
||||||
@ -139,41 +148,47 @@ def stats():
|
|||||||
context = {"MAX_LOG_DAYS":MAX_LOG_DAYS,"PING_WARN":PING_WARN,"depts":sort[:MAX_LOG_DEPT],"favs":sort_favs[:MAX_LOG_FAVS],"nbping":pings}
|
context = {"MAX_LOG_DAYS":MAX_LOG_DAYS,"PING_WARN":PING_WARN,"depts":sort[:MAX_LOG_DEPT],"favs":sort_favs[:MAX_LOG_FAVS],"nbping":pings}
|
||||||
return render_template("stats.html",**context, **GLOBAL_CONTEXT)
|
return render_template("stats.html",**context, **GLOBAL_CONTEXT)
|
||||||
|
|
||||||
|
|
||||||
@app.route("/app/free-rooms", methods=["POST", "GET"])
|
@app.route("/app/free-rooms", methods=["POST", "GET"])
|
||||||
def free_rooms() :
|
def free_rooms(api = False, rq = None) :
|
||||||
"""
|
"""
|
||||||
Affiche les salles libres dans les départements sélectionnés
|
Affiche les salles libres dans les départements sélectionnés
|
||||||
dans la page des départements.
|
dans la page des départements.
|
||||||
|
|
||||||
Parameters
|
Parameters
|
||||||
----------
|
----------
|
||||||
None
|
api : bool
|
||||||
|
Indique si la page est accédée par l'API.
|
||||||
|
|
||||||
|
rq : requests.request
|
||||||
|
Requête.
|
||||||
|
|
||||||
Returns
|
Returns
|
||||||
-------
|
-------
|
||||||
flask.render_template
|
flask.render_template
|
||||||
"""
|
"""
|
||||||
|
if not api :
|
||||||
|
rq = request
|
||||||
|
|
||||||
if GLOBAL_CONTEXT["DEBUG"]:
|
if GLOBAL_CONTEXT["DEBUG"]:
|
||||||
print(f"dept:\n\t{request.args.getlist('dept')}")
|
print(f"dept:\n\t{rq.args.getlist('dept')}")
|
||||||
print(f"favs:\n\t{request.args.getlist('favs')}")
|
print(f"favs:\n\t{rq.args.getlist('favs')}")
|
||||||
print(f"date:\n\t{request.args.get('date')}\t{request.args.get('time')}")
|
print(f"date:\n\t{rq.args.get('date')}\t{rq.args.get('time')}")
|
||||||
# Récupération des ID des départements depuis le formulaire :
|
# Récupération des ID des départements depuis le formulaire :
|
||||||
dident_list = list(request.args.getlist("dept"))
|
dident_list = list(rq.args.getlist("dept"))
|
||||||
if len(dident_list) > MAX_DEPT :
|
if len(dident_list) > MAX_DEPT :
|
||||||
return render_template("error.html", error="Trop de départements sélectionnés ! Vous pouvez en sélectionner "+str(MAX_DEPT)+" au maximum.")
|
return render_template("error.html", error="Trop de départements sélectionnés ! Vous pouvez en sélectionner "+str(MAX_DEPT)+" au maximum.")
|
||||||
if len(dident_list) == 0 :
|
if len(dident_list) == 0 :
|
||||||
return render_template("error.html", error="Il faut choisir au moins un département !")
|
return render_template("error.html", error="Il faut choisir au moins un département !")
|
||||||
|
|
||||||
# Récupération de l'éventuelle date personnalisée (depuis la page de sélection de date) :
|
# Récupération de l'éventuelle date personnalisée (depuis la page de sélection de date) :
|
||||||
date_uf = str(request.args.get("date"))
|
date_uf = str(rq.args.get("date"))
|
||||||
date_uf_sav = date_uf
|
date_uf_sav = date_uf
|
||||||
if date_uf == "None" :
|
if date_uf == "None" :
|
||||||
date_uf = [""]
|
date_uf = [""]
|
||||||
else :
|
else :
|
||||||
date_uf = date_uf.split("-")
|
date_uf = date_uf.split("-")
|
||||||
|
|
||||||
time_uf = str(request.args.get("time"))
|
time_uf = str(rq.args.get("time"))
|
||||||
time_uf_sav = time_uf
|
time_uf_sav = time_uf
|
||||||
if time_uf == "None" :
|
if time_uf == "None" :
|
||||||
time_uf = [""]
|
time_uf = [""]
|
||||||
@ -195,7 +210,7 @@ def free_rooms() :
|
|||||||
|
|
||||||
|
|
||||||
# Récupération des IDs des salles favorites :
|
# Récupération des IDs des salles favorites :
|
||||||
favs_ids = list(request.args.getlist("favs"))
|
favs_ids = list(rq.args.getlist("favs"))
|
||||||
if favs_ids == [None] :
|
if favs_ids == [None] :
|
||||||
favs_ids = []
|
favs_ids = []
|
||||||
|
|
||||||
@ -320,9 +335,27 @@ def free_rooms() :
|
|||||||
# Sauvegarde les logs dans un fichier cache
|
# Sauvegarde les logs dans un fichier cache
|
||||||
save_logs(logs)
|
save_logs(logs)
|
||||||
|
|
||||||
url_for("static", filename="style.css")
|
if api :
|
||||||
return render_template("free-rooms.html", **context, **GLOBAL_CONTEXT)
|
serial_context = context
|
||||||
|
for i in range(len(serial_context["free_rooms"])) :
|
||||||
|
fr_start = serial_context["free_rooms"][i].start
|
||||||
|
serial_context["free_rooms"][i].start = [fr_start.year, fr_start.month, fr_start.day, fr_start.hour, fr_start.minute, fr_start.second]
|
||||||
|
fr_end = serial_context["free_rooms"][i].end
|
||||||
|
serial_context["free_rooms"][i].end = [fr_end.year, fr_end.month, fr_end.day, fr_end.hour, fr_end.minute, fr_end.second]
|
||||||
|
serial_context["free_rooms"][i] = vars(serial_context["free_rooms"][i])
|
||||||
|
for i in range(len(serial_context["soon_rooms"])) :
|
||||||
|
fr_start = serial_context["soon_rooms"][i].start
|
||||||
|
serial_context["soon_rooms"][i].start = [fr_start.year, fr_start.month, fr_start.day, fr_start.hour, fr_start.minute, fr_start.second]
|
||||||
|
fr_end = serial_context["soon_rooms"][i].end
|
||||||
|
serial_context["soon_rooms"][i].end = [fr_end.year, fr_end.month, fr_end.day, fr_end.hour, fr_end.minute, fr_end.second]
|
||||||
|
serial_context["soon_rooms"][i] = vars(serial_context["soon_rooms"][i])
|
||||||
|
print(serial_context)
|
||||||
|
response = make_response(json.dumps(context))
|
||||||
|
response.headers["Content-Type"] = "application/json"
|
||||||
|
return response
|
||||||
|
else :
|
||||||
|
url_for("static", filename="style.css")
|
||||||
|
return render_template("free-rooms.html", **context, **GLOBAL_CONTEXT)
|
||||||
|
|
||||||
@app.route("/app/date-select", methods=["POST", "GET"])
|
@app.route("/app/date-select", methods=["POST", "GET"])
|
||||||
def date_select() :
|
def date_select() :
|
||||||
@ -349,14 +382,44 @@ def date_select() :
|
|||||||
|
|
||||||
return render_template("date-select.html", **context, **GLOBAL_CONTEXT)
|
return render_template("date-select.html", **context, **GLOBAL_CONTEXT)
|
||||||
|
|
||||||
|
@app.route("/api/depts_list")
|
||||||
|
def api_depts_get() :
|
||||||
|
"""
|
||||||
|
Renvoie la liste des départements (pour l'API).
|
||||||
|
|
||||||
|
Returns
|
||||||
|
-------
|
||||||
|
None.
|
||||||
|
|
||||||
|
"""
|
||||||
|
# Récupération de la liste des départements existants :
|
||||||
|
dept_filen = "data/dept_list.txt"
|
||||||
|
dept_list = ro.get_depts(dept_filen)
|
||||||
|
serial_dlist = [vars(d) for d in dept_list]
|
||||||
|
|
||||||
|
response = make_response(json.dumps(serial_dlist))
|
||||||
|
response.headers["Content-Type"] = "application/json"
|
||||||
|
return response
|
||||||
|
|
||||||
|
@app.route("/api/free_rooms")
|
||||||
|
def api_frooms() :
|
||||||
|
"""
|
||||||
|
Redirige vers le JSON des salles (pour l'API).
|
||||||
|
|
||||||
|
Returns
|
||||||
|
-------
|
||||||
|
None.
|
||||||
|
|
||||||
|
"""
|
||||||
|
return free_rooms(True, request)
|
||||||
|
|
||||||
@app.route("/sitemap.xml")
|
@app.route("/sitemap.xml")
|
||||||
def sitemap():
|
def sitemap():
|
||||||
sitemap_xml = render_template("sitemap.xml", **GLOBAL_CONTEXT)
|
sitemap_xml = render_template("sitemap.xml", **GLOBAL_CONTEXT)
|
||||||
response= make_response(sitemap_xml)
|
response = make_response(sitemap_xml)
|
||||||
response.headers["Content-Type"] = "application/xml"
|
response.headers["Content-Type"] = "application/xml"
|
||||||
return response
|
return response
|
||||||
|
|
||||||
|
|
||||||
@app.errorhandler(404)
|
@app.errorhandler(404)
|
||||||
def error(e):
|
def error(e):
|
||||||
"""
|
"""
|
||||||
|
Loading…
x
Reference in New Issue
Block a user