diff options
author | Alban Gruin | 2018-09-03 13:50:59 +0200 |
---|---|---|
committer | Alban Gruin | 2018-09-06 21:03:49 +0200 |
commit | 066391b376649214266f48ab95a021cb98b9dfa2 (patch) | |
tree | 745df9c04b8aaf417d85e556deb875acb877fcf3 | |
parent | ac1e21312beefeaa29cf8c580ef9094abf370969 (diff) |
timetables: ne rien faire si une source ne contient pas de semaines
Correction d’un bogue qui faisait planter le parseur si on demandait
une mise à jour complète alors que la source ne contenait pas de
semaines. Désormais, si une source ne contient pas de semaines, la
date de mise à jour de la source est modifiée, et aucun cours n’est
supprimé ou rajouté.
Signed-off-by: Alban Gruin <alban at pa1ch dot fr>
-rw-r--r-- | management/commands/timetables.py | 42 |
1 files changed, 23 insertions, 19 deletions
diff --git a/management/commands/timetables.py b/management/commands/timetables.py index c5159b7..ee33f7e 100644 --- a/management/commands/timetables.py +++ b/management/commands/timetables.py @@ -81,25 +81,29 @@ def process_timetable_week(source, force, parser, year=None, week=None): new_update_date is not None and last_update_date >= new_update_date: return - if year is not None and week is not None: - # On efface la semaine à partir de maintenant si jamais - # on demande le traitement d’une seule semaine - delete_courses_in_week(source, year, week, today) - else: - # Sinon, on efface tous les cours à partir de maintenant. - # Précisément, on prend la plus grande valeur entre la première semaine - # présente dans Celcat et maintenant. - delete_from = min(parser.weeks.values()) - if not force: - # Si jamais on force la MàJ, on efface tout à partir de la - # première semaine - delete_from = max(delete_from, today) - Course.objects.filter(source=source, begin__gte=delete_from).delete() - - # Tous les cours commençant sur la période traitée - # sont parsés, puis enregistrés dans la base de données. - for course in parser.get_events(today, year, week): - course.save() + # Pas de traitement si il n’y a pas de semaine dans l’emploi du temps + if len(parser.weeks.values()): + if year is not None and week is not None: + # On efface la semaine à partir de maintenant si jamais + # on demande le traitement d’une seule semaine + delete_courses_in_week(source, year, week, today) + else: + # Sinon, on efface tous les cours à partir de maintenant. + # Précisément, on prend la plus grande valeur entre la + # première semaine présente dans Celcat et maintenant. + delete_from = min(parser.weeks.values()) + if not force: + # Si jamais on force la MàJ, on efface tout à partir de la + # première semaine + delete_from = max(delete_from, today) + + Course.objects.filter( + source=source, begin__gte=delete_from).delete() + + # Tous les cours commençant sur la période traitée + # sont parsés, puis enregistrés dans la base de données. + for course in parser.get_events(today, year, week): + course.save() # On renseigne la date de mise à jour de Celcat, à des fins de statistiques source.last_update_date = new_update_date |