aboutsummaryrefslogtreecommitdiff
path: root/management/commands/timetables.py
blob: 60c9eb5f7c0c677ab13e3734f5f9c2064d17a27c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
from django.core.management.base import BaseCommand, CommandError
from django.utils import timezone
from edt.models import Timetable, Group, Room, Course

from bs4 import BeautifulSoup

from ._private import delete_courses_in_week, get_events, get_weeks, get_xml, Week

import datetime
import requests


class Command(BaseCommand):
    help = "Fetches the specified celcat timetable"

    def handle(self, *args, **options):
        year, week, day = timezone.now().isocalendar()
        if day >= 6:
            year, week, _ = (timezone.now() + datetime.timedelta(weeks=1)).isocalendar()

        delete_courses_in_week(year, week)

        for timetable in Timetable.objects.all():
            soup = get_xml(timetable.url)
            weeks = get_weeks(soup)

            for name, type_, groups, rooms, begin, end in get_events(soup, weeks, week, timetable):
                course = Course.objects.create(name=name, type=type_, timetable=timetable, begin=begin, end=end)
                course.groups.add(*groups)
                course.rooms.add(*rooms)
                course.save()

        self.stdout.write(self.style.SUCCESS("Done."))