Ajout de mon prototype d'interface pour l'application mobile.
Suppression de l'import de 'definitions' dans 'main_cli' Modification de l'affichage de la prochaine occupation de la salle, ou de la prochaine libération : affichage de l'heure précise plutôt que du temps en minutes restant Diverses améliorations de lisibilité du code, des commentaires, des docstrings...
This commit is contained in:
parent
3ea9ea0621
commit
f8ff4ee9f6
|
@ -21,7 +21,7 @@ import datetime
|
||||||
|
|
||||||
# Fonctions :
|
# Fonctions :
|
||||||
|
|
||||||
def is_bissextile(year) :
|
def bissextile(year) :
|
||||||
"""
|
"""
|
||||||
|
|
||||||
Indique si l'année 'year' est bissextile ou non.
|
Indique si l'année 'year' est bissextile ou non.
|
||||||
|
@ -84,7 +84,7 @@ def date_input() :
|
||||||
|
|
||||||
month = 0
|
month = 0
|
||||||
while month not in range(1, 13) :
|
while month not in range(1, 13) :
|
||||||
month = int(input("Entrer le mois.\n"))
|
month = int(input("Entrer le mois.\n> "))
|
||||||
|
|
||||||
mdays = month_days(month, year)
|
mdays = month_days(month, year)
|
||||||
day = 0
|
day = 0
|
||||||
|
|
35
main_cli.py
35
main_cli.py
|
@ -21,11 +21,11 @@ import datetime
|
||||||
# Fichiers locaux :
|
# Fichiers locaux :
|
||||||
import date_tools
|
import date_tools
|
||||||
import rooms_get as ro
|
import rooms_get as ro
|
||||||
import definitions as lib
|
# import definitions as lib # TODO : À quoi ça sert ?
|
||||||
|
|
||||||
# Globales
|
# Globales
|
||||||
favorites = ["C"+str(i)+" MATH" for i in range(1,10)]+["C42-CMI"]
|
favorites = ["C"+str(i)+" MATH" for i in range(1,10)]+["C42-CMI"] # TODO : Ne sera pas conservé
|
||||||
links = []
|
links = [] # Liens vers les calendriers des salles des différents bâtiments de l'université
|
||||||
|
|
||||||
|
|
||||||
# Fonctions :
|
# Fonctions :
|
||||||
|
@ -47,24 +47,29 @@ def main() :
|
||||||
while date_choice not in (1,2) :
|
while date_choice not in (1,2) :
|
||||||
date_choice = int(input("Souhaitez-vous afficher les salles disponibles maintenant (1), où à une date précise (2) ?\n> "))
|
date_choice = int(input("Souhaitez-vous afficher les salles disponibles maintenant (1), où à une date précise (2) ?\n> "))
|
||||||
|
|
||||||
if date_choice == 1 :
|
if date_choice == 1 : # Heure système
|
||||||
date = datetime.datetime.today()
|
date = datetime.datetime.today()
|
||||||
else :
|
else : # Heure mannuelle
|
||||||
date = date_tools.date_input()
|
date = date_tools.date_input()
|
||||||
available_rooms = ro.getrooms(date,links=links)
|
available_rooms = ro.getrooms(date,links=links)
|
||||||
|
|
||||||
print("Les salles suivantes sont disponibles à " + str(date.hour) + ":" + str(date.minute) + ", le " + str(date.day) + " :\n")
|
# Salles libres à la date indiquée :
|
||||||
|
print("\nLes salles suivantes sont disponibles à " + str(date.hour) + ":" + str(date.minute) + ", le " + str(date.date()) + " :\n")
|
||||||
for room in available_rooms.values() :
|
for room in available_rooms.values() :
|
||||||
if room["name"] in favorites or len(favorites)==0:
|
if room["name"] in favorites or len(favorites) == 0 : # TODO : Changer le comportement de ce 'if' : il faudrait afficher toutes les salles, mais d'abord les favorites
|
||||||
if room["free"]:
|
if room["free"] :
|
||||||
deltasec = room["occupied_at"].timestamp()-date.timestamp()
|
deltasec = room["occupied_at"].timestamp() - date.timestamp()
|
||||||
print(" - " + room["name"]+" | occuppée dans : "+str(int(deltasec/60+0.5))+" minutes")
|
# print(" - " + room["name"]+" | occupée dans : "+str(int(deltasec/60+0.5))+" minutes")
|
||||||
print("\nVoici celles occupées : \n")
|
print(" - " + room["name"] + " | occupée à : " + str(room["occupied_at"].hour) + ":" + str(room["occupied_at"].minute))
|
||||||
|
|
||||||
|
# Salles libres prochainement :
|
||||||
|
print("\nLes salles suivantes seront disponibles prochainement : \n")
|
||||||
for room in available_rooms.values() :
|
for room in available_rooms.values() :
|
||||||
if room["name"] in favorites or len(favorites)==0:
|
if room["name"] in favorites or len(favorites) == 0 :
|
||||||
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))
|
||||||
|
|
||||||
if __name__=="__main__":
|
if __name__=="__main__":
|
||||||
main()
|
main()
|
||||||
|
|
Binary file not shown.
83
rooms_get.py
83
rooms_get.py
|
@ -22,22 +22,30 @@ import datetime
|
||||||
|
|
||||||
# Fonctions :
|
# Fonctions :
|
||||||
|
|
||||||
def room(name,occupied_at,free_at):
|
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
|
Retourne un dictionnaire 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,link=None) :
|
Parameters
|
||||||
|
----------
|
||||||
|
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.
|
||||||
|
|
||||||
|
Returns
|
||||||
|
-------
|
||||||
|
dict
|
||||||
|
Un dictionnaire 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, link=None) :
|
||||||
"""
|
"""
|
||||||
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
|
||||||
de l'UFR) sur ADE depuis le site de l'Unistra.
|
de l'UFR) sur ADE depuis le site de l'Unistra.
|
||||||
|
@ -49,15 +57,16 @@ def sched_get(date,link=None) :
|
||||||
|
|
||||||
Optionnels:
|
Optionnels:
|
||||||
link:
|
link:
|
||||||
Un lien vers lequel effectuer la recherche, des informations seront remplacées:
|
Un lien vers lequel effectuer la recherche, des informations seront remplacées :
|
||||||
$YEAR$ l'année
|
$YEAR$ : l'année
|
||||||
$MONTH$ le mois
|
$MONTH$ : le mois
|
||||||
$DAY$ le jour
|
$DAY$ : le jour
|
||||||
Par défaut, sera un lien des salles de l'UFR
|
Par défaut, sera un lien des salles de l'UFR.
|
||||||
|
|
||||||
Returns
|
Returns
|
||||||
-------
|
-------
|
||||||
Le texte du résultat de la requête.
|
bytes
|
||||||
|
Le texte du résultat de la requête.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
@ -75,9 +84,10 @@ def sched_get(date,link=None) :
|
||||||
|
|
||||||
return r.content
|
return r.content
|
||||||
|
|
||||||
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 toute les salles, avec des informations si elles sont libres ou non.
|
||||||
|
|
||||||
Parameters
|
Parameters
|
||||||
----------
|
----------
|
||||||
|
@ -86,16 +96,16 @@ def getrooms(datet,links=[]) :
|
||||||
|
|
||||||
Returns
|
Returns
|
||||||
-------
|
-------
|
||||||
total_rooms : dico
|
total_rooms : dict
|
||||||
Dico des salles, indexée par leurs nom.
|
Dictionnaire des salles, indexée par leurs nom.
|
||||||
Toutes les salles mentionnées dans le fichier, avec des informations
|
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é :
|
||||||
cals = []
|
cals = []
|
||||||
for i in links:
|
for i in links:
|
||||||
cals.append(icalendar.Calendar.from_ical(sched_get(datet),link=i))
|
cals.append(icalendar.Calendar.from_ical(sched_get(datet), link = i))
|
||||||
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
|
||||||
cals = [icalendar.Calendar.from_ical(sched_get(datet))]
|
cals = [icalendar.Calendar.from_ical(sched_get(datet))]
|
||||||
|
|
||||||
total_rooms = {}
|
total_rooms = {}
|
||||||
|
@ -103,22 +113,23 @@ def getrooms(datet,links=[]) :
|
||||||
for cal in cals:
|
for cal in cals:
|
||||||
for comp in cal.walk():
|
for comp in cal.walk():
|
||||||
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 )
|
|
||||||
if datestart.timestamp()<datet.timestamp():
|
# On ignore si c'est avant la date actuelle (avec une valeur loin dans le futur)
|
||||||
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 datestart.timestamp() < datet.timestamp():
|
||||||
if 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
|
||||||
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
|
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
|
# Enregistrement dans le dictionnaire :
|
||||||
if roomname in total_rooms.keys():
|
if roomname in total_rooms.keys():
|
||||||
if datestart.timestamp() > total_rooms[roomname]["occupied_at"].timestamp():
|
if datestart.timestamp() > total_rooms[roomname]["occupied_at"].timestamp():
|
||||||
datestart = total_rooms[roomname]["occupied_at"]
|
datestart = total_rooms[roomname]["occupied_at"]
|
||||||
if dateend.timestamp() > total_rooms[roomname]["free_at"].timestamp():
|
if dateend.timestamp() > total_rooms[roomname]["free_at"].timestamp():
|
||||||
dateend= total_rooms[roomname]["free_at"]
|
dateend = total_rooms[roomname]["free_at"]
|
||||||
total_rooms[roomname] = room(roomname,datestart,dateend)
|
total_rooms[roomname] = room(roomname, datestart, dateend)
|
||||||
|
|
||||||
return total_rooms
|
return total_rooms
|
||||||
|
|
Loading…
Reference in New Issue