Скрипт, позволяющий сгенерировать 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