Changement de l'enregistrement des salles (dictionnaire 'rooms')

Diverses améliorations de lisibilité, des commentaires, des docstrings, ...
This commit is contained in:
antux18 2022-02-26 16:39:29 +01:00
parent f8ff4ee9f6
commit eaa21bea86
2 changed files with 53 additions and 26 deletions

View File

@ -24,7 +24,7 @@ import rooms_get as ro
# import definitions as lib # TODO : À quoi ça sert ?
# Globales
favorites = ["C"+str(i)+" MATH" for i in range(1,10)]+["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é
links = [] # Liens vers les calendriers des salles des différents bâtiments de l'université
@ -60,7 +60,7 @@ def main() :
if room["free"] :
deltasec = room["occupied_at"].timestamp() - date.timestamp()
# print(" - " + room["name"]+" | occupée dans : "+str(int(deltasec/60+0.5))+" minutes")
print(" - " + room["name"] + " | occupée à : " + str(room["occupied_at"].hour) + ":" + str(room["occupied_at"].minute))
print(" - " + room["name"] + " | occupée à : " + str(room["occupied_at"].hour + 1) + ":" + str(room["occupied_at"].minute) + " (dans " + str(int(deltasec/60+0.5 + 60)) + " minutes)") # TODO : Obligé d'ajouter 1 heure (problème de fuseau horaire ?)
# Salles libres prochainement :
print("\nLes salles suivantes seront disponibles prochainement : \n")
@ -69,7 +69,7 @@ def main() :
if not room["free"] :
deltasec = room["free_at"].timestamp() - date.timestamp()
# print(" - " + room["name"]+" | libre dans : "+str(int(deltasec/60+0.5))+" minutes")
print(" - " + room["name"] + " | libre à : " + str(room["free_at"].hour) + ":" + str(room["free_at"].minute))
print(" - " + room["name"] + " | libre à : " + str(room["free_at"].hour + 1) + ":" + str(room["free_at"].minute) + " (dans " + str(int(deltasec/60+0.5) + 60) + " minutes)") # TODO : Obligé d'ajouter 1 heure (problème de fuseau horaire ?)
if __name__=="__main__":
main()

View File

@ -30,10 +30,10 @@ def room(name, occupied_at, free_at):
----------
name : str
Le nom de la salle.
occupied_at : datetime.datetime
La prochaine heure à laquelle elle est occupée.
free_at : datetime.datetime
La prochaine heure à laquelle est est libre.
occupied_at : datetime.datetime or None
La prochaine heure à laquelle elle est occupée, ou None si salle déjà occupée.
free_at : datetime.datetime or None
La prochaine heure à laquelle est est libre, ou None, si elle est déjà libre.
Returns
-------
@ -42,7 +42,12 @@ 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()}
free = False # Indique si la salle est libre ou non
if free_at == None :
free = True
# 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}
def sched_get(date, link=None) :
@ -87,7 +92,7 @@ def sched_get(date, link=None) :
def getrooms(datet, links=[]) :
"""
Crée une liste de toute 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.
Parameters
----------
@ -97,7 +102,7 @@ def getrooms(datet, links=[]) :
Returns
-------
total_rooms : dict
Dictionnaire des salles, indexée par leurs nom.
Dictionnaire des salles, indexées par leur nom.
Toutes les salles mentionnées dans le fichier, avec des informations.
"""
@ -109,27 +114,49 @@ def getrooms(datet, links=[]) :
cals = [icalendar.Calendar.from_ical(sched_get(datet))]
total_rooms = {}
default_hour_margin = 2
for cal in cals:
for comp in cal.walk():
# default_hour_margin = 2
for cal in cals : # Bâtiments
for comp in cal.walk() : # Événements
if comp.name == "VEVENT" :
# Récupération des infos :
datestart = comp.decoded("dtstart")
dateend = comp.decoded("dtend")
roomname = str(comp.get("location"))
# On ignore si c'est avant la date actuelle (avec une valeur loin dans le futur)
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
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
# Soit l'événement se passe maintenant (salle occupée maintenant) :
if datestart.timestamp() <= datet.timestamp() and dateend.timestamp() > datet.timestamp() :
occupied_at = None
free_at = dateend
total_rooms[roomname] = room(roomname, occupied_at, free_at)
# Soit l'événement se passe prochainement (salle occupée à l'occasion de cet événement) :
elif datestart.timestamp() > datet.timestamp() :
if roomname not in total_rooms.keys() :
occupied_at = datestart
free_at = None
total_rooms[roomname] = room(roomname, occupied_at, free_at)
elif total_rooms[roomname]["occupied_at"] != None : # Dans ce cas, il n'y a pas d'événement en cours, donc la salle est libre maintenant
if datestart.timestamp() < total_rooms[roomname]["occupied_at"].timestamp() :
occupied_at = datestart
free_at = None
total_rooms[roomname] = room(roomname, occupied_at, free_at)
# Dans les autres cas, l'événement est passé, donc on l'ignore et on passe au suivant.
# # On ignore si c'est avant la date actuelle (avec une valeur loin dans le futur)
# 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
# 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
# Enregistrement dans le dictionnaire :
if roomname in total_rooms.keys():
if datestart.timestamp() > total_rooms[roomname]["occupied_at"].timestamp():
datestart = total_rooms[roomname]["occupied_at"]
if dateend.timestamp() > total_rooms[roomname]["free_at"].timestamp():
dateend = total_rooms[roomname]["free_at"]
total_rooms[roomname] = room(roomname, datestart, dateend)
# Plus nécessaire, car on ne s'occupe plus des événements passés :
# if roomname in total_rooms.keys() :
# if datestart.timestamp() > total_rooms[roomname]["occupied_at"].timestamp() :
# occupied_at = total_rooms[roomname]["occupied_at"]
# if dateend.timestamp() > total_rooms[roomname]["free_at"].timestamp() :
# free_at = total_rooms[roomname]["free_at"]
return total_rooms