From 32de39531d99105f5e1c35f257418297708a2a81 Mon Sep 17 00:00:00 2001
From: Dominik George <dominik.george@teckids.org>
Date: Sun, 27 Oct 2019 21:44:37 +0100
Subject: [PATCH] Add documentation for LessonPeriodQuerySet methods.

---
 biscuit/apps/chronos/models.py | 33 +++++++++++++++++++++++++++++++++
 1 file changed, 33 insertions(+)

diff --git a/biscuit/apps/chronos/models.py b/biscuit/apps/chronos/models.py
index e85a855b..0e054fb9 100644
--- a/biscuit/apps/chronos/models.py
+++ b/biscuit/apps/chronos/models.py
@@ -33,15 +33,21 @@ class LessonPeriodQuerySet(models.QuerySet):
     """ Overrides default QuerySet to add specific methods for lesson data. """
 
     def in_week(self, wanted_week: CalendarWeek):
+        """ Filter for all lessons within a calendar week. """
+
         return self.filter(
             lesson__date_start__lte=wanted_week[0] + timedelta(days=1) * (models.F('period__weekday') - 1),
             lesson__date_end__gte=wanted_week[0] + timedelta(days=1) * (models.F('period__weekday') - 1)
         ).annotate_week(wanted_week)
 
     def within_dates(self, start: date, end: date):
+        """ Filter for all lessons within a date range. """
+
         return self.filter(lesson__date_start__gte=start, lesson__date_end__lte=end)
 
     def on_day(self, day: date):
+        """ Filter for all lessons on a certain day. """
+
         week, weekday = week_weekday_from_date(day)
 
         return self.within_dates(day, day).filter(
@@ -49,6 +55,8 @@ class LessonPeriodQuerySet(models.QuerySet):
         ).annotate_week(week)
 
     def at_time(self, when: Optional[datetime] = None):
+        """ Filter for the lessons taking place at a certain point in time. """
+
         now = when or datetime.now()
         week, weekday = week_weekday_from_date(now.date())
 
@@ -61,22 +69,32 @@ class LessonPeriodQuerySet(models.QuerySet):
         ).annotate_week(week)
 
     def filter_participant(self, person: Union[Person, int]):
+        """ Filter for all lessons a participant (student) attends. """
+
         return self.filter(
                 Q(lesson__groups__members=person) | Q(lesson__groups__parent_groups__members=person))
 
     def filter_group(self, group: Union[Group, int]):
+        """ Filter for all lessons a group (class) regularly attends. """
+
         return self.filter(
                 Q(lesson__groups=group) | Q(lesson__groups__parent_groups=group))
 
     def filter_teacher(self, teacher: Union[Person, int]):
+        """ Filter for all lessons given by a certain teacher. """
+
         return self.filter(
                 Q(substitutions__teachers=teacher, substitutions__week=models.F('_week')) | Q(lesson__teachers=teacher))
 
     def filter_room(self, room: Union[Room, int]):
+        """ Filter for all lessons taking part in a certain room. """
+
         return self.filter(
                 Q(substitutions__room=room, substitutions__week=models.F('_week')) | Q(room=room))
 
     def annotate_week(self, week: Union[CalendarWeek, int]):
+        """ Annotate all lessons in the QuerySet with the number of the provided calendar week. """
+
         if isinstance(week, CalendarWeek):
             week_num = week.week
         else:
@@ -87,6 +105,13 @@ class LessonPeriodQuerySet(models.QuerySet):
         )
 
     def next(self, reference: LessonPeriod, offset: Optional[int] = 1) -> LessonPeriod:
+        """ Get another lesson in an ordered set of lessons.
+
+        By default, it returns the next lesson in the set. By passing the offset argument,
+        the n-th next lesson can be selected. By passing a negative number, the n-th
+        previous lesson can be selected.
+        """
+
         index = list(self.values_list('id', flat=True)).index(reference.id)
 
         next_index = index + offset
@@ -99,6 +124,14 @@ class LessonPeriodQuerySet(models.QuerySet):
         return self.annotate_week(week).all()[next_index]
 
     def filter_from_query(self, query_data: QueryDict):
+        """ Apply all filters from a GET or POST query.
+
+        This method expects a QueryDict, like the GET or POST attribute of a Request
+        object, that contains one or more of the keys group, teacher or room.
+
+        All three fields are filtered, in order.
+        """
+
         if query_data.get('group', None):
             return self.filter_group(int(query_data['group']))
         if query_data.get('teacher', None):
-- 
GitLab