From 66cf0ada54140132554fbf8515e8098702ecfc0b Mon Sep 17 00:00:00 2001 From: Dominik George <nik@naturalnet.de> Date: Sat, 2 May 2020 14:30:39 +0200 Subject: [PATCH] Move group_by_periods to QUerySet --- aleksis/apps/chronos/models.py | 19 +++++++++++++++++++ aleksis/apps/chronos/util/build.py | 23 ++--------------------- 2 files changed, 21 insertions(+), 21 deletions(-) diff --git a/aleksis/apps/chronos/models.py b/aleksis/apps/chronos/models.py index 58eb83bf..13393a49 100644 --- a/aleksis/apps/chronos/models.py +++ b/aleksis/apps/chronos/models.py @@ -179,6 +179,25 @@ class LessonDataQuerySet(models.QuerySet): return self.annotate(_week=models.Value(week_num, models.IntegerField())) + def group_by_periods(self, is_person: bool = False) -> dict: + per_period = {} + for obj in self: + period = obj.period.period + weekday = obj.period.weekday + + if period not in per_period: + per_period[period] = [] if is_person else {} + + if not is_person and weekday not in per_period[period]: + per_period[period][weekday] = [] + + if is_person: + per_period[period].append(obj) + else: + per_period[period][weekday].append(obj) + + return per_period + class LessonPeriodQuerySet(LessonDataQuerySet): _period_path = "" diff --git a/aleksis/apps/chronos/util/build.py b/aleksis/apps/chronos/util/build.py index 47f6dc31..b8d1fb26 100644 --- a/aleksis/apps/chronos/util/build.py +++ b/aleksis/apps/chronos/util/build.py @@ -20,25 +20,6 @@ Holiday = apps.get_model("chronos", "Holiday") ExtraLesson = apps.get_model("chronos", "ExtraLesson") -def group_by_periods(objs: QuerySet, is_person: bool =False) -> dict: - per_period = {} - for obj in objs: - period = obj.period.period - weekday = obj.period.weekday - - if period not in per_period: - per_period[period] = [] if is_person else {} - - if not is_person and weekday not in per_period[period]: - per_period[period][weekday] = [] - - if is_person: - per_period[period].append(obj) - else: - per_period[period][weekday].append(obj) - return per_period - - def build_timetable( type_: Union[TimetableType, str], obj: Union[int, Person], date_ref: Union[CalendarWeek, date] ): @@ -72,7 +53,7 @@ def build_timetable( ) # Sort lesson periods in a dict - lesson_periods_per_period = group_by_periods(lesson_periods, is_person=is_person) + lesson_periods_per_period = lesson_periods.group_by_periods(is_person=is_person) # Get events if is_person: @@ -81,7 +62,7 @@ def build_timetable( extra_lessons = ExtraLesson.objects.filter(week=date_ref.week).filter_from_type(type_, obj) # Sort lesson periods in a dict - extra_lessons_per_period = group_by_periods(extra_lessons, is_person=is_person) + extra_lessons_per_period = extra_lessons.group_by_periods(is_person=is_person) # Get events if is_person: -- GitLab