Ниже представлено краткое описание урока по Classroom. В значительной степени он сделан по образу уроков по другим платформ, однако имеет некоторые отличия:
Урок по Classroom состоит из двух файлов в папке Classroom
: classroom_class.py
и main_classroom.py
. Также для работы используется модуль api
и лист classroom
в таблице.
В файле расположены функции для взаимодействия с Classroom, Drive, Gmail.
Это основной файл урока. В нём находятся функции для старта урока, для завершения урока, для отслеживаний действий пользователя.
Функция вызывается из файла ядра flask_app
. Далее функция запрашивает id пользователя в Classroom, создаёт запись в базе данных, а также подключает уведомления из почты, чтобы узнать, когда пользователь создаст курс в Classroom. После этого функция отправляет пользователю первое задание.
Функция обрабатывает POST-запросы по адресу /classroom/mail/ о новых сообщениях в почте. Функция находит непрочитанные письма о том, что сервисный аккаунт приглашён в курс. Далее программа формирует список пользователей, начавших урок, и принимает от них приглашения, если они есть. Далее пользователю присылается следующий шаг.
Функция вызывается при каждом сообщении в отдельный бот. Далее текст сравнивается сообщения с кодом курса, после чего участник переходит на следующий шаг.
Функция обновляет запись в базе данных в соответствии с переданными аргументами.
Проверяет прохождение на шагах 3-9. На каждом шаге происходит проверка выполнения того или иного условия, далее запускает функция update_stage.
Запрашивает количественные показатели курса: количество объявлений, тем, материалов и заданий в курсе. Если какое-либо из значений увеличивается, вызывается функция check_step, которая проверяет выполнение текущего шага.
Функция вызывается каждый раз, когда приходит запрос по адресу /classroom/myhook/. В системе этот запрос посылает модуль api.
Функция рассчитывает итоговую оценку и комментарии и отправляет их пользователю.
Удаляет записи о пользователе из базы данных.
Вызывает функцию score_user, выставляет оценку в классрум, вызывает функцию delete_user для удаления пользователя.
Удаляет пользователя функцией delete_user.
Таким образом видно, что часть функций (первые) активируются вебхуком от gmail или zulip, в то время как основная часть шагов проверяется по запросу от модуля api.
Модуль api располагается в папке services/api/
. Логика модуля пока реализована просто: если в базе данных есть активные пользователи определённого урока, то каждые 15 секунд отправляется запрос в этот урок, иначе раз в минуту процесс повторяется.
В дальнейшем логика может быть усложнена.