diff --git a/date_tools.py b/date_tools.py index 282e9cf..6689409 100644 --- a/date_tools.py +++ b/date_tools.py @@ -21,7 +21,7 @@ import datetime # Fonctions : -def is_bissextile(year) : +def bissextile(year) : """ Indique si l'année 'year' est bissextile ou non. @@ -84,7 +84,7 @@ def date_input() : month = 0 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) day = 0 diff --git a/main_cli.py b/main_cli.py index 621364a..30fde6a 100644 --- a/main_cli.py +++ b/main_cli.py @@ -21,11 +21,11 @@ import datetime # Fichiers locaux : import date_tools import rooms_get as ro -import definitions as lib +# import definitions as lib # TODO : À quoi ça sert ? # Globales -favorites = ["C"+str(i)+" MATH" for i in range(1,10)]+["C42-CMI"] -links = [] +favorites = ["C"+str(i)+" MATH" for i in range(1,10)]+["C42-CMI"] # TODO : Ne sera pas conservé +links = [] # Liens vers les calendriers des salles des différents bâtiments de l'université # Fonctions : @@ -47,24 +47,29 @@ def main() : 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> ")) - if date_choice == 1 : + if date_choice == 1 : # Heure système date = datetime.datetime.today() - else : + else : # Heure mannuelle date = date_tools.date_input() 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() : - if room["name"] in favorites or len(favorites)==0: - if room["free"]: - deltasec = room["occupied_at"].timestamp()-date.timestamp() - print(" - " + room["name"]+" | occuppée dans : "+str(int(deltasec/60+0.5))+" minutes") - print("\nVoici celles occupées : \n") + 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"] : + 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)) + + # Salles libres prochainement : + print("\nLes salles suivantes seront disponibles prochainement : \n") for room in available_rooms.values() : - if room["name"] in favorites or len(favorites)==0: - if not room["free"]: - deltasec = room["free_at"].timestamp()-date.timestamp() - print(" - " + room["name"]+" | libre dans : "+str(int(deltasec/60+0.5))+" minutes") + if room["name"] in favorites or len(favorites) == 0 : + 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)) if __name__=="__main__": main() diff --git a/prototypes/interface/Schéma interface (Antoine).odg b/prototypes/interface/Schéma interface (Antoine).odg new file mode 100644 index 0000000..886202e Binary files /dev/null and b/prototypes/interface/Schéma interface (Antoine).odg differ diff --git a/rooms_get.py b/rooms_get.py index af9497d..0082e38 100644 --- a/rooms_get.py +++ b/rooms_get.py @@ -22,22 +22,30 @@ import datetime # 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 - 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()} + Retourne un dictionnaire contenant le nom, la prochaine date à laquelle elle est occupée, ainsi que la prochaine date à laquelle elle est libre -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 de l'UFR) sur ADE depuis le site de l'Unistra. @@ -49,15 +57,16 @@ def sched_get(date,link=None) : Optionnels: link: - Un lien vers lequel effectuer la recherche, des informations seront remplacées: - $YEAR$ l'année - $MONTH$ le mois - $DAY$ le jour - Par défaut, sera un lien des salles de l'UFR + Un lien vers lequel effectuer la recherche, des informations seront remplacées : + $YEAR$ : l'année + $MONTH$ : le mois + $DAY$ : le jour + Par défaut, sera un lien des salles de l'UFR. 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 -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 ---------- @@ -86,16 +96,16 @@ def getrooms(datet,links=[]) : Returns ------- - total_rooms : dico - Dico des salles, indexée par leurs nom. - Toutes les salles mentionnées dans le fichier, avec des informations + total_rooms : dict + Dictionnaire des salles, indexée par leurs nom. + Toutes les salles mentionnées dans le fichier, avec des informations. """ # Récupération des informations sur l'EDT téléchargé : cals = [] for i in links: - 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 + 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 cals = [icalendar.Calendar.from_ical(sched_get(datet))] total_rooms = {} @@ -103,22 +113,23 @@ def getrooms(datet,links=[]) : for cal in cals: for comp in cal.walk(): if comp.name == "VEVENT" : - # Récupération des infos + # 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() 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) + dateend = total_rooms[roomname]["free_at"] + total_rooms[roomname] = room(roomname, datestart, dateend) return total_rooms