This commit is contained in:
Antoine Waehren 2022-03-03 09:55:03 +01:00
commit f3cbd129e3
2 changed files with 39 additions and 46 deletions

View File

@ -25,6 +25,7 @@ import rooms_get as ro
# Globales # Globales
favorites = ["C" + str(i) + " MATH" for i in range(1,12)] + ["C42-CMI"] # TODO : Ne sera pas conservé favorites = ["C" + str(i) + " MATH" for i in range(1,12)] + ["C42-CMI"] # TODO : Ne sera pas conservé
favorites = []
links = [] # Liens vers les calendriers des salles des différents bâtiments de l'université links = [] # Liens vers les calendriers des salles des différents bâtiments de l'université

View File

@ -110,7 +110,7 @@ def sched_get(date, enddate = None, link = None) :
return r.content return r.content
def getrooms(datet, links=[]) : def getrooms(datet, links=[],min_occur=3) :
""" """
Crée une liste de toutes les salles, avec des informations si elles sont libres ou non. Crée une liste de toutes les salles, avec des informations si elles sont libres ou non.
@ -118,6 +118,12 @@ def getrooms(datet, links=[]) :
---------- ----------
datet : datetime.datetime() datet : datetime.datetime()
Date au format datetime. Date au format datetime.
Optionnels:
links : list, par défaut vide
liste des liens à consulter ( si est vide, ping l'ufr )
min_occur : nombre, par défaut à 3
Nombre minimum de fois qu'une salle doit être mentionnée pour être comptée
( permet d'éviter le flood de salles qui n'existe que pour les évals )
Returns Returns
------- -------
@ -134,37 +140,16 @@ def getrooms(datet, links=[]) :
cals = [icalendar.Calendar.from_ical(sched_get(datet))] cals = [icalendar.Calendar.from_ical(sched_get(datet))]
total_rooms = {} total_rooms = {}
rooms_count = {}
# default_hour_margin = 2 # default_hour_margin = 2
# Création du dico de toutes les salles (récupération de l'emploi du temps de l'année entière, pour être sûr d'obtenir toutes les salles disponibles): margintime = datetime.timedelta(weeks=4)
if datet.month >= 9 : # Si on est au début de l'année scolaire (par ex : en 2021, si l'année scolaire est 2021-2022)
year1 = datet.year # Année civile de début de l'année scolaire
year2 = datet.year + 1 # Année civile de fin de l'année scolaire
else :
year1 = datet.year - 1
year2 = datet.year
date1 = datetime.datetime(year1, 9, 1)
date2 = datetime.datetime(year2, 8, 1)
# Création du calendrier de l'année scolaire :
# On vérifie si le fichier existe :
if not os.path.exists("data/schedule" + str(year1) + "-" + str(year2) + ".ics") :
# On télécharge l'emploi du temps de l'année scolaire, s'il n'existe pas :
year_cal_file = open("data/schedule" + str(year1) + "-" + str(year2) + ".ics", "w")
year_cal = sched_get(date1, date2, links)
year_cal_file.writelines(year_cal.decode("utf-8"))
year_cal_file.close()
year_cal_file = open("data/schedule" + str(year1) + "-" + str(year2) + ".ics", "rb")
year_cals = [] year_cals = []
for i in links : for i in links : # Choper les liens mentionné, sur une période de quatres mois
year_cals.append(icalendar.Calendar.from_ical(year_cal_file.read(), link = i)) result = sched_get(datet, datet+margintime, links)
year_cals.append(icalendar.Calendar.from_ical(result))
if len(links) == 0 : # Par défaut, ne mets pas de lien, ce qui retourne celui de l'UFR if len(links) == 0 : # Par défaut, ne mets pas de lien, ce qui retourne celui de l'UFR
year_cals = [icalendar.Calendar.from_ical(year_cal_file.read())] year_cals = [icalendar.Calendar.from_ical(sched_get(datet,datet+margintime))]
# Ajout de toutes les salles contenues dans le calendrier de l'année scolaire : # Ajout de toutes les salles contenues dans le calendrier de l'année scolaire :
for cal in year_cals : # Bâtiments for cal in year_cals : # Bâtiments
@ -177,6 +162,9 @@ def getrooms(datet, links=[]) :
end = datet.replace(hour = 23, minute = 59, second = 59) # Par défaut, l'heure de fin de la prochaine période disponibilité est aujourd'hui à 23:59 end = datet.replace(hour = 23, minute = 59, second = 59) # Par défaut, l'heure de fin de la prochaine période disponibilité est aujourd'hui à 23:59
is_free = True # Par défaut, la salle est libre is_free = True # Par défaut, la salle est libre
total_rooms[roomname] = room(roomname, start, end, is_free) total_rooms[roomname] = room(roomname, start, end, is_free)
rooms_count[roomname] = 1
else:
rooms_count[roomname]+=1
# Ajout des infos supplémentaires sur les salles (heures de début-fin de dispo, indicateur de dispo), s'il y en a : # Ajout des infos supplémentaires sur les salles (heures de début-fin de dispo, indicateur de dispo), s'il y en a :
# Première boucle, pour déterminer les salles occupées : # Première boucle, pour déterminer les salles occupées :
@ -239,5 +227,9 @@ def getrooms(datet, links=[]) :
# occupied_at = total_rooms[roomname]["occupied_at"] # occupied_at = total_rooms[roomname]["occupied_at"]
# if dateend.timestamp() > total_rooms[roomname]["free_at"].timestamp() : # if dateend.timestamp() > total_rooms[roomname]["free_at"].timestamp() :
# free_at = total_rooms[roomname]["free_at"] # free_at = total_rooms[roomname]["free_at"]
# Filtrer les salles qui ne sont mentionnées qu'un certain nombre de fois
# Et qui n'on pas de virgule dans le nom
for roomname in rooms_count.keys():
if rooms_count[roomname]<min_occur or "," in roomname:
del(total_rooms[roomname])
return total_rooms return total_rooms