aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--management/commands/_private.py95
1 files changed, 49 insertions, 46 deletions
diff --git a/management/commands/_private.py b/management/commands/_private.py
index 0b26b4e..23083e1 100644
--- a/management/commands/_private.py
+++ b/management/commands/_private.py
@@ -80,6 +80,54 @@ def get_from_db_or_create(cls, **kwargs):
return obj
+def get_event(timetable, event, event_week):
+ """Renvoie une classe Course à partir d’un événement récupéré par BS4"""
+ # On récupère la date de l’évènement à partir de la semaine
+ # et de la semaine référencée, puis l’heure de début et de fin
+ date = event_week + datetime.timedelta(int(event.day.text))
+ begin = add_time(date, event.starttime.text)
+ end = add_time(date, event.endtime.text)
+
+ # Création de l’objet cours
+ course = Course.objects.create(timetable=timetable, begin=begin, end=end)
+
+ # On récupère les groupes concernés par les cours, on les
+ # « consolide », puis on les insère dans l’objet cours.
+ groups = [get_from_db_or_create(Group, timetable=timetable,
+ celcat_name=item.text)
+ for item in event.resources.group.find_all("item")]
+ consolidate_groups(groups)
+ course.groups.add(*groups)
+
+ # On récupère le champ « remarque »
+ if event.notes is not None:
+ course.notes = event.notes.text
+
+ # On récupère le nom du cours
+ if event.resources.module is not None:
+ course.name = event.resources.module.item.text
+ else:
+ # Il est possible qu’un cours n’ait pas de nom. Oui oui.
+ # Qui sont les concepteurs de ce système ? Quels sont leurs
+ # réseaux ?
+ # Bref, dans ce cas, on déplace le champ « remarque » de
+ # l’objet dans le champ « nom ».
+ course.name, course.notes = course.notes, None
+
+ # Récupération du type de cours
+ if event.category is not None:
+ course.type = event.category.text
+
+ # Si un cours a une salle attribuée (oui, il est possible qu’il n’y
+ # en ait pas… qui sont ils, leurs réseaux, tout ça…), on les insère
+ # dans la base de données, et on les ajoute dans l’objet cours
+ if event.resources.room is not None:
+ rooms = [get_from_db_or_create(Room, name=item.text)
+ for item in event.resources.room.find_all("item")]
+ course.rooms.add(*rooms)
+
+ return course
+
def get_events(timetable, soup, weeks_in_soup, year=None, week=None):
"""Récupère tous les cours disponibles dans l’emploi du temps Celcat.
Le traîtement se limitera à la semaine indiquée si il y en a une."""
@@ -94,52 +142,7 @@ def get_events(timetable, soup, weeks_in_soup, year=None, week=None):
year is None or week is None) and \
event.resources.group is not None and \
event.starttime is not None and event.endtime is not None:
- # On récupère la date de l’évènement à partir de la semaine
- # et de la semaine référencée, puis l’heure de début et de fin
- date = event_week + datetime.timedelta(int(event.day.text))
- begin = add_time(date, event.starttime.text)
- end = add_time(date, event.endtime.text)
-
- # Création de l’objet cours
- course = Course.objects.create(timetable=timetable, begin=begin,
- end=end)
-
- # On récupère les groupes concernés par les cours, on les
- # « consolide », puis on les insère dans l’objet cours.
- groups = [get_from_db_or_create(Group, timetable=timetable,
- celcat_name=item.text)
- for item in event.resources.group.find_all("item")]
- consolidate_groups(groups)
- course.groups.add(*groups)
-
- # On récupère le champ « remarque »
- if event.notes is not None:
- course.notes = event.notes.text
-
- # On récupère le nom du cours
- if event.resources.module is not None:
- course.name = event.resources.module.item.text
- else:
- # Il est possible qu’un cours n’ait pas de nom. Oui oui.
- # Qui sont les concepteurs de ce système ? Quels sont leurs
- # réseaux ?
- # Bref, dans ce cas, on déplace le champ « remarque » de
- # l’objet dans le champ « nom ».
- course.name, course.notes = course.notes, None
-
- # Récupération du type de cours
- if event.category is not None:
- course.type = event.category.text
-
- # Si un cours a une salle attribuée (oui, il est possible qu’il n’y
- # en ait pas… qui sont ils, leurs réseaux, tout ça…), on les insère
- # dans la base de données, et on les ajoute dans l’objet cours
- if event.resources.room is not None:
- rooms = [get_from_db_or_create(Room, name=item.text)
- for item in event.resources.room.find_all("item")]
- course.rooms.add(*rooms)
-
- yield course
+ yield get_event(timetable, event, event_week)
def get_update_date(soup):
# Explication de la regex