Support pour liens customs

This commit is contained in:
theo@manjaro 2022-02-25 15:19:14 +01:00
parent 93011ac5ed
commit 3ea9ea0621
2 changed files with 43 additions and 27 deletions

View File

@ -25,6 +25,7 @@ import definitions as lib
# Globales # Globales
favorites = ["C"+str(i)+" MATH" for i in range(1,10)]+["C42-CMI"] favorites = ["C"+str(i)+" MATH" for i in range(1,10)]+["C42-CMI"]
links = []
# Fonctions : # Fonctions :
@ -50,8 +51,7 @@ def main() :
date = datetime.datetime.today() date = datetime.datetime.today()
else : else :
date = date_tools.date_input() date = date_tools.date_input()
available_rooms = ro.getrooms(date,links=links)
available_rooms = ro.getrooms(date)
print("Les salles suivantes sont disponibles à " + str(date.hour) + ":" + str(date.minute) + ", le " + str(date.day) + " :\n") print("Les salles suivantes sont disponibles à " + str(date.hour) + ":" + str(date.minute) + ", le " + str(date.day) + " :\n")
for room in available_rooms.values() : for room in available_rooms.values() :

View File

@ -2,7 +2,6 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
""" """
Created on Thu Feb 24 08:51:58 2022 Created on Thu Feb 24 08:51:58 2022
@author: antoine @author: antoine
""" """
@ -38,7 +37,7 @@ def room(name,occupied_at,free_at):
""" """
return {"name":name,"occupied_at":occupied_at,"free_at":free_at,"free":free_at.timestamp()>occupied_at.timestamp()} return {"name":name,"occupied_at":occupied_at,"free_at":free_at,"free":free_at.timestamp()>occupied_at.timestamp()}
def sched_get(date) : def sched_get(date,link=None) :
""" """
Récupère l'emploi du temps de toutes les salles (pour le moment, juste Récupère l'emploi du temps de toutes les salles (pour le moment, juste
de l'UFR) sur ADE depuis le site de l'Unistra. de l'UFR) sur ADE depuis le site de l'Unistra.
@ -48,22 +47,35 @@ def sched_get(date) :
date : datetime.datetime() date : datetime.datetime()
Date au format datetime. Date au format datetime.
Optionnels:
link:
Un lien vers lequel effectuer la recherche, des informations seront remplacées:
$YEAR$ l'année
$MONTH$ le mois
$DAY$ le jour
Par défaut, sera un lien des salles de l'UFR
Returns Returns
------- -------
Le texte du résultat de la requête. Le texte du résultat de la requête.
""" """
if not link:
link = "https://adecons.unistra.fr/jsp/custom/modules/plannings/anonymous_cal.jsp?resources=30626&projectId=8&calType=ical&firstDate=$YEAR$-$MONTH$-$DAY$&lastDate=$YEAR$-$MONTH$-$DAY$"
day = str(date.day) day = str(date.day)
month = str(date.month) month = str(date.month)
year = str(date.year) year = str(date.year)
r = requests.get("https://adecons.unistra.fr/jsp/custom/modules/plannings/anonymous_cal.jsp?resources=30626&projectId=8&calType=ical&firstDate="+year+"-"+month+"-"+day+"&lastDate="+year+"-"+month+"-"+day) finallink = link.replace("$DAY$",day)
finallink = finallink.replace("$MONTH$",month)
finallink = finallink.replace("$YEAR$",year)
r = requests.get(finallink)
return r.content return r.content
def getrooms(datet,links=[]) :
def getrooms(datet) :
""" """
Crée une liste de toute les salles, avec des informations si elles sont libres ou non Crée une liste de toute les salles, avec des informations si elles sont libres ou non
@ -80,29 +92,33 @@ def getrooms(datet) :
""" """
# Récupération des informations sur l'EDT téléchargé : # Récupération des informations sur l'EDT téléchargé :
cal = icalendar.Calendar.from_ical(sched_get(datet)) cals = []
for i in links:
cals.append(icalendar.Calendar.from_ical(sched_get(datet),link=i))
if len(links)==0: # Par défaut, ne mets pas de lien, ce qui retourne celui de l'ufr
cals = [icalendar.Calendar.from_ical(sched_get(datet))]
total_rooms = {} total_rooms = {}
default_hour_margin = 2 default_hour_margin = 2
for cal in cals:
for comp in cal.walk(): for comp in cal.walk():
if comp.name == "VEVENT" : if comp.name == "VEVENT" :
# Récupération des infos # Récupération des infos
datestart = comp.decoded("dtstart") datestart = comp.decoded("dtstart")
dateend = comp.decoded("dtend") dateend = comp.decoded("dtend")
roomname = str(comp.get("location")) roomname = str(comp.get("location"))
# On ignore si c'est avant la date actuelle ( avec une valeur loin dans le futur ) # On ignore si c'est avant la date actuelle ( avec une valeur loin dans le futur )
if datestart.timestamp()<datet.timestamp(): if datestart.timestamp()<datet.timestamp():
datestart = datet+datetime.timedelta(hours=default_hour_margin) # Par défaut, si il n'y a rien de précisé pour sa prochaine occupation, elle sera occupée dans 1 ans datestart = datet+datetime.timedelta(hours=default_hour_margin) # Par défaut, si il n'y a rien de précisé pour sa prochaine occupation, elle sera occupée dans 1 ans
if dateend.timestamp()<datet.timestamp(): if dateend.timestamp()<datet.timestamp():
dateend= datestart+datetime.timedelta(hours=default_hour_margin) # Par défaut, si il n'y a rien de précisé pour sa prochaine occupation, elle sera occupée dans 1 an après son occupation dateend= datestart+datetime.timedelta(hours=default_hour_margin) # Par défaut, si il n'y a rien de précisé pour sa prochaine occupation, elle sera occupée dans 1 an après son occupation
# J'enregistre dans le dico # J'enregistre dans le dico
if roomname in total_rooms.keys(): if roomname in total_rooms.keys():
if datestart.timestamp() > total_rooms[roomname]["occupied_at"].timestamp(): if datestart.timestamp() > total_rooms[roomname]["occupied_at"].timestamp():
datestart = total_rooms[roomname]["occupied_at"] datestart = total_rooms[roomname]["occupied_at"]
if dateend.timestamp() > total_rooms[roomname]["free_at"].timestamp(): if dateend.timestamp() > total_rooms[roomname]["free_at"].timestamp():
dateend= total_rooms[roomname]["free_at"] dateend= total_rooms[roomname]["free_at"]
total_rooms[roomname] = room(roomname,datestart,dateend) total_rooms[roomname] = room(roomname,datestart,dateend)
return total_rooms return total_rooms