Скрипт, позволяющий сгенерировать ics-файл для расписания конкретной группы, или же для занятий указанных групп конкретного преподавателя. Файл подобного формата можно импортировать в большинство онлайн-календарей.
Особенности:
- для простоты работы, считается что большая перемена всегда происходит после второй пары;
- скрипт формирует 18-недельное расписание (16 основных учебных недель, плюс две зачетные недели);
- сдвоенные занятия (обычно это лабораторные работы или занятия по физ-ре) склеиваются в одно;
- скрипт позволяет использовать словарь аббревиатур для замены длинных названий предметов на что-то более короткое.
- скрипт генерирует стабильные идентификаторы событий, это значит что если вдруг вы допустите ошибку и решите перегенерировать файл, при импорте вы не получите дубликаты событий, у вас появятся только новые записи обновившихся событий.
Результат импорта ics-файла, сгенерированным скриптом в google-календарь:
Для работы скрипта требуется сторонние библиотеки:
pyyaml,requests,icalendar,
которые можно установить командой:
pip install icalendar pyyaml requestsСкрипт может работать в двух режимах:
- преподавательском,
- студенческом.
В режиме для преподавателя, скрипт парсит расписание всех перечисленных в конфиге групп на наличие у них занятий указанного преподавателя.
В студенческом режиме скрипт просто подготавливает файл расписания одной учебной группы.
Скрипт довольно тонко настраивается с помощью конфига, описываемого в формате yaml.
Основные опции скрипта:
educator— имя преподавателя (необходима в "преподавательском" режиме);groups— список групп (API МИЭТ отдает расписание только для конкретной группы);group— имя группы для студенческого режима;semester_starts_at— дата начала семестра;class_names_cast— словарь аббревиатур;
В студенческом режиме минимальная конфигурация должна содержать параметры:
group,semester_starts_at
В преподавательском режиме, минимальная конфигурация должна содержать параметры:
educator,groups,semester_starts_at
Оптимальная конфигурация обоих режимов дополнительно содержит словарь class_names_cast.
Пример конфигурации вы можете посмотреть в config.yaml.
В случае отсутствия в файле конфигурации параметра semester_starts_at, он будет определён автоматически по следующей логике:
- если семестр осенний, то дата его начала по умолчанию — это первый рабочий день начиная с первого сентября,
- если семестр весенний, то дата его начала по умолчанию — это второй понедельник февраля.
Дата начала осеннего семестра определяется достаточно точно, весеннего — очень неточно.
Полный список опций настройки скрипта:
educator— имя преподавателя (необходима в "преподавательском" режиме);groups— список групп (API МИЭТ отдает расписание только для конкретной группы);group— имя группы для студенческого режима;academic_hour_duration— длина академического часа;short_recreation_duration— длина короткой перемены;long_recreation_duration— длина большой перемены;semester_starts_at— дата начала семестра;class_names_cast— словарь аббревиатур;elective_courses— список дисциплин по выбору — используется для фильтрации невыбранных дисциплин (при пустом списке, в календарь попадут все дисциплины по выбору);add_weeklies— Добавлять ли еженедельные события с типом и номером учебной неделиcalendar_file_name— имя генерируемого файла.
# Запуск в режиме преподавателя с указанием конфиг-файла
python calendar_automation.py --mode educator --config config.yaml
# Запуск в режиме студента без указания конфиг-файла
python calendar_automation.py --mode student --group ИВТ-31
# Запуск в режиме студента с указанием конфиг-файла
python calendar_automation.py --mode student --config config.yaml
