aboutsummaryrefslogtreecommitdiff
path: root/management/commands/_private.py
diff options
context:
space:
mode:
Diffstat (limited to 'management/commands/_private.py')
-rw-r--r--management/commands/_private.py59
1 files changed, 38 insertions, 21 deletions
diff --git a/management/commands/_private.py b/management/commands/_private.py
index 2d01e67..e018e3a 100644
--- a/management/commands/_private.py
+++ b/management/commands/_private.py
@@ -93,50 +93,67 @@ def get_from_db_or_create(cls, **kwargs):
return obj
-def get_events(timetable, year, week, soup, weeks_in_soup):
+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."""
for event in soup.find_all("event"):
- title = None
- type_ = None
- groups = None
- rooms = None
- notes = None
-
- if weeks_in_soup[event.rawweeks.text].number == week and \
- weeks_in_soup[event.rawweeks.text].year == year and \
+ event_week = weeks_in_soup[event.rawweeks.text]
+
+ # On passe le traitement si la semaine de l’événement ne correspond pas
+ # à la semaine passée, ou qu’il ne contient pas de groupe ou n’a pas de
+ # date de début ou de fin.
+ if (event_week.number == week and event_week.year == year or \
+ 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:
- date = weeks_in_soup[event.rawweeks.text].get_day(int(
- event.day.text))
-
+ # On récupère la date de l’évènement à partir de la semaine
+ # et de la semaine référencée, puis la date de début et de fin
+ date = event_week.get_day(int(event.day.text))
begin = add_time(date, datetime.datetime.strptime(
event.starttime.text, "%H:%M"))
end = add_time(date, datetime.datetime.strptime(
event.endtime.text, "%H:%M"))
+ # 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:
- notes = event.notes.text
+ course.notes = event.notes.text
+ # On récupère le nom du cours
if event.resources.module is not None:
- title = event.resources.module.item.text
- elif notes is not None:
- title = notes
- notes = None
+ course.name = event.resources.module.item.text
else:
- title = "Aucune information"
-
+ # 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:
- type_ = event.category.text
+ 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 title, type_, groups, rooms, notes, begin, end
+ yield course
def get_update_date(soup):
# Explication de la regex