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
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é

View File

@ -110,7 +110,7 @@ def sched_get(date, enddate = None, link = None) :
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.
@ -118,6 +118,12 @@ def getrooms(datet, links=[]) :
----------
datet : datetime.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
-------
@ -134,37 +140,16 @@ def getrooms(datet, links=[]) :
cals = [icalendar.Calendar.from_ical(sched_get(datet))]
total_rooms = {}
rooms_count = {}
# 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):
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")
margintime = datetime.timedelta(weeks=4)
year_cals = []
for i in links :
year_cals.append(icalendar.Calendar.from_ical(year_cal_file.read(), link = i))
for i in links : # Choper les liens mentionné, sur une période de quatres mois
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
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 :
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
is_free = True # Par défaut, la salle est libre
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 :
# 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"]
# if dateend.timestamp() > total_rooms[roomname]["free_at"].timestamp() :
# 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