diff --git a/biscuit/apps/chronos/models.py b/biscuit/apps/chronos/models.py index 82680c95792a885d4b001530ff2bab785bfe2169..9bb1f77ccd3a157f924df5859fac3eebd45135dc 100644 --- a/biscuit/apps/chronos/models.py +++ b/biscuit/apps/chronos/models.py @@ -1,9 +1,14 @@ +from datetime import datetime +from typing import List, Tuple, Optional + from django.core import validators from django.db import models from django.utils.translation import ugettext_lazy as _ from .util import current_week +from biscuit.core.models import Person + class TimePeriod(models.Model): WEEKDAY_CHOICES = [ @@ -24,11 +29,11 @@ class TimePeriod(models.Model): time_start = models.TimeField(verbose_name=_('Time the period starts')) time_end = models.TimeField(verbose_name=_('Time the period ends')) - def __str__(self): + def __str__(self): str: return '%s, %d. period (%s - %s)' % (self.weekday, self.period, self.time_start, self.time_end) @classmethod - def get_times_dict(cls): + def get_times_dict(cls) -> Dict[int, Tuple[datetime, datetime]]: periods = {} for period in cls.objects.all(): periods[period.period] = (period.time_start, period.time_end) @@ -50,7 +55,7 @@ class Subject(models.Model): colour_bg = models.CharField(verbose_name=_('Background colour in timetable'), blank=True, validators=[ validators.RegexValidator(r'#[0-9A-F]{6}')], max_length=7) - def __str__(self): + def __str__(self) -> str: return '%s - %s' % (self.abbrev, self.name) @@ -60,7 +65,7 @@ class Room(models.Model): name = models.CharField(verbose_name=_('Long name'), max_length=30, unique=True) - def __str__(self): + def __str__(self) -> str: return '%s (%s)' % (self.name, self.short_name) @@ -84,29 +89,29 @@ class LessonPeriod(models.Model): room = models.ForeignKey('Room', models.CASCADE, null=True) - def get_substitution(self, week=None): + def get_substitution(self, week: Optional[int] = None) -> LessonSubstitution: wanted_week = week or current_week() return self.substitutions.filter(week=wanted_week).first() - def get_subject(self): + def get_subject(self) -> Optional[Subject]: if self.get_substitution(): return self.get_substitution().subject else: return self.lesson.subject - def get_teachers(self): + def get_teachers(self) -> models.query.QuerySet: if self.get_substitution(): return self.get_substitution().teachers else: return self.lesson.teachers - def get_room(self): + def get_room(self) -> Optional[Room]: if self.get_substitution(): return self.get_substitution().room else: return self.room - def get_groups(self): + def get_groups(self) -> models.query.QuerySet: return self.lesson.groups diff --git a/biscuit/apps/chronos/util.py b/biscuit/apps/chronos/util.py index b295eb04e09a2af5208713184338b3592629b0b1..4fdff2de99f33da620743bfb7153908844209453 100644 --- a/biscuit/apps/chronos/util.py +++ b/biscuit/apps/chronos/util.py @@ -1,13 +1,16 @@ from datetime import datetime +from typing import Optional + +from django.db import models from .models import LessonPeriod -def current_week(): +def current_week() -> int: return int(datetime.now().strftime('%V')) -def current_lesson_periods(when=None): +def current_lesson_periods(when: Optional[datetime] = None) -> models.query.QuerySet: now = when or datetime.now() return LessonPeriod.objects.filter(lesson__date_start__lte=now.date(), diff --git a/biscuit/apps/chronos/views.py b/biscuit/apps/chronos/views.py index 7822866a18270707919b382111f1cc041be07493..dc0ad16cfd349e56a482825a2e091c7b56d443ff 100644 --- a/biscuit/apps/chronos/views.py +++ b/biscuit/apps/chronos/views.py @@ -1,6 +1,7 @@ from collections import OrderedDict from django.contrib.auth.decorators import login_required +from django.http import HttpRequest, HttpResponse from django.shortcuts import redirect, render from django.urls import reverse from django.utils.translation import gettext_lazy as _ @@ -14,7 +15,7 @@ from .util import current_week @login_required @admin_required -def timetable(request): +def timetable(request: HttpRequest) -> HttpResponse: context = {} lesson_periods = LessonPeriod.objects.all()