From cc92838a22eeb406474f7f5fa48eb42fa5ee4e4f Mon Sep 17 00:00:00 2001 From: Alban Gruin Date: Mon, 31 Dec 2018 13:31:16 +0100 Subject: ups2018: get_weeks() retourne la vraie liste des semaines présentes Change la fonction get_weeks() du parseur UPS2018 pour créer la liste des semaines présentes à partir de la liste des événements. Avant, cette liste contenait seulement la semaine courante, ce qui posait problème quand une mise à jour était faite avec les paramètres `--all --force' : les cours à partir de la semaine courante étaient supprimés, mais les cours rajoutés étaient ceux du mois entier. Il était donc possible de se retrouver avec des cours en doublons entre la première semaine du mois courant et la semaine courante. Il peut éventuellement y avoir un défaut avec cette technique : si tous les cours des premières semaines du mois ont été retirées de l’emploi du temps parce qu’ils ont étés annulés, les premières semaines ne se trouveront pas dans la liste des semaines disponibles, et ces cours resterons dans la base de celcatsanitizer, alors qu’ils ont étés annulés. Il serait peut-être plus judicieux de créer une liste de manière statique, en prenant comme seule valeur la première semaine du mois. La fonction get_weeks() calcule donc le début de chaque événement et vérifie si son titre ne contient pas « global event » pour ne pas le prendre en compte. Pour éviter de faire ces opérations deux fois, ces données sont stockées dans l’événement. Signed-off-by: Alban Gruin --- management/parsers/ups2018.py | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/management/parsers/ups2018.py b/management/parsers/ups2018.py index f1da5bf..6d39c8f 100644 --- a/management/parsers/ups2018.py +++ b/management/parsers/ups2018.py @@ -92,9 +92,7 @@ class Parser(AbstractParser): def __get_event(self, event, today, beginning_of_month, end_of_month, year, week): - begin = timezone.make_aware( - datetime.strptime(event["start"], "%Y-%m-%dT%H:%M:%S") - ) + begin = event["begin"] end = timezone.make_aware( datetime.strptime(event["end"], "%Y-%m-%dT%H:%M:%S") ) @@ -108,7 +106,7 @@ class Parser(AbstractParser): if event_year != year or event_week != week: return - data = event["text"].split("
") + data = event["data"] rooms = None if data[0] == "Global Event": return @@ -185,10 +183,23 @@ class Parser(AbstractParser): return None # Pas de date de mise à jour dans ce format def get_weeks(self): - # FIXME: détection automatique à partir des événements présents - beginning, _ = get_week(*get_current_week()) - self.weeks = {"1": beginning} + weeks = set() + for i, month in enumerate(self.events): + for event in month: + begin = timezone.make_aware( + datetime.strptime(event["start"], "%Y-%m-%dT%H:%M:%S") + ) + + data = event["text"].split("
") + + event["begin"] = begin + event["data"] = data + + if data[0] != "Global Event": + beginning, _ = get_week(*begin.isocalendar()[:2]) + weeks.add(beginning) + self.weeks = {str(i + 1): week for i, week in enumerate(sorted(weeks))} return self.weeks def ajax_req(self, month): -- cgit v1.2.1