diff options
Diffstat (limited to 'management/commands/timetables.py')
-rw-r--r-- | management/commands/timetables.py | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/management/commands/timetables.py b/management/commands/timetables.py new file mode 100644 index 0000000..58897a1 --- /dev/null +++ b/management/commands/timetables.py @@ -0,0 +1,38 @@ +from django.core.management.base import BaseCommand, CommandError +from django.utils import timezone +from edt.models import Group, Room, Course + +from bs4 import BeautifulSoup + +from ._private import get_events, get_weeks, get_xml, Week + +import datetime +import requests + +class Command(BaseCommand): + help = "Fetches the specified celcat timetable" + + def add_arguments(self, parser): + parser.add_argument("url", type=str) + + def handle(self, *args, **options): + url = options["url"] + + _, week, day = timezone.now().isocalendar() + if day >= 6: + _, week, _ = (timezone.now() + datetime.timedelta(weeks=1)).isocalendar() + + soup = get_xml(url) + weeks = get_weeks(soup) + + for name, type_, groups, rooms, begin, end in get_events(soup, weeks, week): + + course = Course.objects.create(begin=begin, end=end) + + course.name = name + course.type = type_ + course.groups.add(*groups) + course.rooms.add(*rooms) + course.save() + + self.stdout.write(self.style.SUCCESS("Done.")) |