diff options
author | Alban Gruin | 2018-12-31 13:31:16 +0100 |
---|---|---|
committer | Alban Gruin | 2018-12-31 13:31:16 +0100 |
commit | cc92838a22eeb406474f7f5fa48eb42fa5ee4e4f (patch) | |
tree | 4941e32f67d20842cbf8ce41e37e5d3e305094de | |
parent | 171472d7dc42e2d3b390ad8b052c7e88fca21722 (diff) |
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 <alban at pa1ch dot fr>
-rw-r--r-- | management/parsers/ups2018.py | 25 |
1 files 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("<br>") + 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("<br>") + + 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): |