Les salles enregistrent maintenant la prochaine fois qu'elle seront
libre/occupées
This commit is contained in:
parent
8d69bd9e28
commit
8bf1b698b8
@ -48,8 +48,9 @@ def main() :
|
|||||||
else :
|
else :
|
||||||
date = date_tools.date_input()
|
date = date_tools.date_input()
|
||||||
|
|
||||||
available_rooms = lib.intersection(ro.free_at(date),ro.free_at(date+datetime.timedelta(minutes=30)))
|
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 :
|
for room in available_rooms.values() :
|
||||||
print(" - " + room)
|
if room["free"]:
|
||||||
|
print(" - " + room["name"])
|
||||||
|
109
rooms_get.py
109
rooms_get.py
@ -19,12 +19,25 @@ Created on Thu Feb 24 08:51:58 2022
|
|||||||
# Modules :
|
# Modules :
|
||||||
import requests
|
import requests
|
||||||
import icalendar
|
import icalendar
|
||||||
|
import datetime
|
||||||
# Variables générales :
|
|
||||||
rooms_filen = "rooms.txt"
|
|
||||||
|
|
||||||
# Fonctions :
|
# Fonctions :
|
||||||
|
|
||||||
|
def room(name,occupied_at,free_at):
|
||||||
|
"""
|
||||||
|
Retourne un dico contenant le nom, la prochaine date à laquelle elle est occupée, ainsi que la prochaine date à laquelle elle est libre
|
||||||
|
Arguments :
|
||||||
|
name : String
|
||||||
|
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
|
||||||
|
Retourne:
|
||||||
|
Un dico contenant ces trois informations, avec le même nom en clef, en plus de si elle est actuellement libre
|
||||||
|
"""
|
||||||
|
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) :
|
||||||
"""
|
"""
|
||||||
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
|
||||||
@ -46,15 +59,13 @@ def sched_get(date) :
|
|||||||
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)
|
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)
|
||||||
print(r.content)
|
|
||||||
|
|
||||||
return r.content
|
return r.content
|
||||||
|
|
||||||
|
|
||||||
def used_rooms_get(datet) :
|
def getrooms(datet) :
|
||||||
"""
|
"""
|
||||||
Créé la liste des salles occupées à la date 'datet' d'après
|
Crée une liste de toute les salles, avec des informations si elles sont libres ou non
|
||||||
l'emploi du temps des salles.
|
|
||||||
|
|
||||||
Parameters
|
Parameters
|
||||||
----------
|
----------
|
||||||
@ -63,71 +74,35 @@ def used_rooms_get(datet) :
|
|||||||
|
|
||||||
Returns
|
Returns
|
||||||
-------
|
-------
|
||||||
used_rooms : list
|
total_rooms : dico
|
||||||
Liste des salles occupées. total_rooms : list
|
Dico des salles, indexée par leurs nom.
|
||||||
Toutes les salles mentionnées dans le fichier
|
Toutes les salles mentionnées dans le fichier, avec des informations
|
||||||
"""
|
"""
|
||||||
|
|
||||||
# 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))
|
cal = icalendar.Calendar.from_ical(sched_get(datet))
|
||||||
|
|
||||||
used_rooms = []
|
total_rooms = {}
|
||||||
total_rooms = []
|
default_hour_margin = 2
|
||||||
|
|
||||||
for comp in cal.walk():
|
for comp in cal.walk():
|
||||||
if comp.name == "VEVENT" :
|
if comp.name == "VEVENT" :
|
||||||
ev_dstart = comp.decoded("dtstart")
|
# Récupération des infos
|
||||||
ev_dend = comp.decoded("dtend")
|
datestart = comp.decoded("dtstart")
|
||||||
roomname = str(comp.get("location"))
|
dateend = comp.decoded("dtend")
|
||||||
if not roomname in total_rooms:
|
roomname = str(comp.get("location"))
|
||||||
total_rooms.append(roomname)
|
# On ignore si c'est avant la date actuelle ( avec une valeur loin dans le futur )
|
||||||
if ev_dstart.timestamp() <= datet.timestamp() and ev_dend.timestamp() > datet.timestamp() :
|
if datestart.timestamp()<datet.timestamp():
|
||||||
if not roomname in used_rooms :
|
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
|
||||||
used_rooms.append(roomname)
|
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
|
||||||
|
|
||||||
|
# J'enregistre dans le dico
|
||||||
|
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)
|
||||||
|
|
||||||
return total_rooms, used_rooms
|
return total_rooms
|
||||||
|
|
||||||
def available_rooms_get(total_rooms, used_rooms) :
|
|
||||||
"""
|
|
||||||
Créé la liste des salles disponibles d'après la liste des salles occupées
|
|
||||||
'used_rooms'.
|
|
||||||
|
|
||||||
Parameters
|
|
||||||
----------
|
|
||||||
used_rooms : list
|
|
||||||
Liste des salles occupées.
|
|
||||||
total_rooms : list
|
|
||||||
Liste de toute les salles
|
|
||||||
|
|
||||||
Returns
|
|
||||||
-------
|
|
||||||
available_rooms : list
|
|
||||||
Liste des salles disponibles.
|
|
||||||
|
|
||||||
"""
|
|
||||||
|
|
||||||
available_rooms = []
|
|
||||||
|
|
||||||
for room in total_rooms :
|
|
||||||
if room not in used_rooms :
|
|
||||||
available_rooms.append(room)
|
|
||||||
|
|
||||||
return available_rooms
|
|
||||||
|
|
||||||
def free_at(datet):
|
|
||||||
"""
|
|
||||||
Retourne la liste des salles dispo à cette date
|
|
||||||
|
|
||||||
Parameters
|
|
||||||
----------
|
|
||||||
datet: datetime.Date
|
|
||||||
La date à laquelle se fixer
|
|
||||||
|
|
||||||
Returns
|
|
||||||
-------
|
|
||||||
available_rooms : list
|
|
||||||
Liste des salles disponibles.
|
|
||||||
"""
|
|
||||||
total,used = used_rooms_get(datet)
|
|
||||||
free = available_rooms_get(total,used)
|
|
||||||
return free
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user