aboutsummaryrefslogtreecommitdiff
path: root/management/commands
diff options
context:
space:
mode:
authorAlban Gruin2018-09-03 13:50:59 +0200
committerAlban Gruin2018-09-06 21:03:49 +0200
commit066391b376649214266f48ab95a021cb98b9dfa2 (patch)
tree745df9c04b8aaf417d85e556deb875acb877fcf3 /management/commands
parentac1e21312beefeaa29cf8c580ef9094abf370969 (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>
Diffstat (limited to 'management/commands')
-rw-r--r--management/commands/timetables.py42
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