Скрипт, позволяющий сгенерировать ics-файл для расписания конкретной группы, или же для занятий указанных групп конкретного преподавателя. Файл подобного формата можно импортировать в большинство онлайн-календарей. Скрипт способен обрабатывать ситуации начала семестра не с понедельника.
Для простоты работы, считается что большая перемена всегда происходит после второй пары. Скрипт генерирует занятие, которое повторяется 5 раз с периодичностью в 4 недели для каждой из недель (1-го числителя, 1-го знаменателя, 2-го числителя, 2-го знаменателя). Иными словами, если занятие проходит каждую неделю, вместо создания одного события, которое повторяется 20 раз каждую неделю, будет создано 4 события на 4 чередующиеся недели, каждое из которых повторяется 5 раз.
Событие повторяется 5 раз, а не 4, чтобы занятия попали и на 17-18ую недели. Можно генерировать и 16-недельное расписание, для этого необходимо изменить значение параметра repeat_number
на 4
.
Сдвоенные занятия (обычно это лабораторные работы или занятия по физ-ре) склеиваются в одно.
Скрипт позволяет использовать словарь аббревиатур для замены длинных названий предметов на что-то более короткое.
Для работы скрипта требуется сторонние библиотеки:
pyyaml
,requests
,icalendar
,
которые можно установить командой:
pip install icalendar pyyaml requests
Скрипт может работать в двух режимах:
- преподавательском,
- студенческом.
В режиме для преподавателя, скрипт парсит расписание всех перечисленных в конфиге групп на наличие у них занятий указанного преподавателя.
В студенческом режиме скрипт просто подготавливает файл расписания одной учебной группы.
Скрипт довольно тонко настраивается с помощью конфига, описываемого в формате yaml
. Список опций к настройке:
educator
— имя преподавателя (необходима в "преподавательском" режиме);groups
— список групп (API МИЭТ отдает расписание только для конкретной группы);group
— имя группы для студенческого режима;academic_hour_duration
— длина академического часа;short_recreation_duration
— длина короткой перемены;long_recreation_duration
— длина большой перемены;semester_starts_at
— дата начала семестра;class_names_cast
— словарь аббревиатур;repeat_number
— число 4-недельных повторений (4 для 16-ти недель, 5 для добавления 17-18-ых недель);add_weeklies
— Добавлять ли еженедельные события с типом и номером учебной неделиcalendar_file_name
— имя генерируемого файла.
В студенческом режиме минимальная конфигурация должна содержать параметры:
group
,semester_starts_at
В преподавательском режиме, минимальная конфигурация должна содержать параметры:
educator
,groups
,semester_starts_at
Оптимальная конфигурация обоих режимов дополнительно содержит словарь class_names_cast
.
Пример конфигурации вы можете посмотреть в config.yaml.
В случае отсутствия в файле конфигурации параметра semester_starts_at
, он будет определён автоматически по следующей логике:
- если семестр осенний, то дата его начала по умолчанию — это первый рабочий день начиная с первого сентября,
- если семестр весенний, то дата его начала по умолчанию — это второй понедельник февраля.
Дата начала осеннего семестра определяется достаточно точно, весеннего — очень неточно.
# Запуск в режиме преподавателя с указанием конфиг-файла
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