Changement de l'enregistrement des salles (dictionnaire 'rooms')
Diverses améliorations de lisibilité, des commentaires, des docstrings, ...
This commit is contained in:
parent
f8ff4ee9f6
commit
eaa21bea86
@ -24,7 +24,7 @@ import rooms_get as ro
|
|||||||
# import definitions as lib # TODO : À quoi ça sert ?
|
# import definitions as lib # TODO : À quoi ça sert ?
|
||||||
|
|
||||||
# Globales
|
# 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é
|
links = [] # Liens vers les calendriers des salles des différents bâtiments de l'université
|
||||||
|
|
||||||
|
|
||||||
@ -60,7 +60,7 @@ def main() :
|
|||||||
if room["free"] :
|
if room["free"] :
|
||||||
deltasec = room["occupied_at"].timestamp() - date.timestamp()
|
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 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 :
|
# Salles libres prochainement :
|
||||||
print("\nLes salles suivantes seront disponibles prochainement : \n")
|
print("\nLes salles suivantes seront disponibles prochainement : \n")
|
||||||
@ -69,7 +69,7 @@ def main() :
|
|||||||
if not room["free"] :
|
if not room["free"] :
|
||||||
deltasec = room["free_at"].timestamp() - date.timestamp()
|
deltasec = room["free_at"].timestamp() - date.timestamp()
|
||||||
# print(" - " + room["name"]+" | libre dans : "+str(int(deltasec/60+0.5))+" minutes")
|
# 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__":
|
if __name__=="__main__":
|
||||||
main()
|
main()
|
||||||
|
73
rooms_get.py
73
rooms_get.py
@ -30,10 +30,10 @@ def room(name, occupied_at, free_at):
|
|||||||
----------
|
----------
|
||||||
name : str
|
name : str
|
||||||
Le nom de la salle.
|
Le nom de la salle.
|
||||||
occupied_at : datetime.datetime
|
occupied_at : datetime.datetime or None
|
||||||
La prochaine heure à laquelle elle est occupée.
|
La prochaine heure à laquelle elle est occupée, ou None si salle déjà occupée.
|
||||||
free_at : datetime.datetime
|
free_at : datetime.datetime or None
|
||||||
La prochaine heure à laquelle est est libre.
|
La prochaine heure à laquelle est est libre, ou None, si elle est déjà libre.
|
||||||
|
|
||||||
Returns
|
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) :
|
def sched_get(date, link=None) :
|
||||||
@ -87,7 +92,7 @@ def sched_get(date, link=None) :
|
|||||||
|
|
||||||
def getrooms(datet, links=[]) :
|
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
|
Parameters
|
||||||
----------
|
----------
|
||||||
@ -97,7 +102,7 @@ def getrooms(datet, links=[]) :
|
|||||||
Returns
|
Returns
|
||||||
-------
|
-------
|
||||||
total_rooms : dict
|
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.
|
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))]
|
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 cal in cals : # Bâtiments
|
||||||
for comp in cal.walk():
|
for comp in cal.walk() : # Événements
|
||||||
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)
|
# Soit l'événement se passe maintenant (salle occupée maintenant) :
|
||||||
if datestart.timestamp() < datet.timestamp():
|
if datestart.timestamp() <= datet.timestamp() and dateend.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
|
occupied_at = None
|
||||||
if dateend.timestamp() < datet.timestamp():
|
free_at = dateend
|
||||||
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
|
total_rooms[roomname] = room(roomname, occupied_at, free_at)
|
||||||
|
|
||||||
# Enregistrement dans le dictionnaire :
|
# Soit l'événement se passe prochainement (salle occupée à l'occasion de cet événement) :
|
||||||
if roomname in total_rooms.keys():
|
elif datestart.timestamp() > datet.timestamp() :
|
||||||
if datestart.timestamp() > total_rooms[roomname]["occupied_at"].timestamp():
|
if roomname not in total_rooms.keys() :
|
||||||
datestart = total_rooms[roomname]["occupied_at"]
|
occupied_at = datestart
|
||||||
if dateend.timestamp() > total_rooms[roomname]["free_at"].timestamp():
|
free_at = None
|
||||||
dateend = total_rooms[roomname]["free_at"]
|
total_rooms[roomname] = room(roomname, occupied_at, free_at)
|
||||||
total_rooms[roomname] = room(roomname, datestart, dateend)
|
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 :
|
||||||
|
|
||||||
|
# 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
|
return total_rooms
|
||||||
|
Loading…
Reference in New Issue
Block a user