aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlban Gruin2018-12-31 13:31:16 +0100
committerAlban Gruin2018-12-31 13:31:16 +0100
commitcc92838a22eeb406474f7f5fa48eb42fa5ee4e4f (patch)
tree4941e32f67d20842cbf8ce41e37e5d3e305094de
parent171472d7dc42e2d3b390ad8b052c7e88fca21722 (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.py25
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):