Description
Задача
Реализовать модуль для проверки отчетов студентов, выполненных в формате MS Word (docx).
Описание входных и выходных данных
Входные данные:
- файл с отчетом в виде потока байт;
- словарь с информацией о студенте;
- словарь с информацией об отчете.
Выходные данные:
Список строк с описанием ошибок в отчете, по одной строке на каждую ошибку. Пример:
[
"Неправильное название предмета",
"Неверное ФИО студента",
"Неверная дата"
]
Информация о студенте
{
"name": "Иван",
"surname": "Иванов",
"patronymic": "Иванович",
"group": "4931"
}
Поле patronymic
может быть пустым (None
в Python) или ключ может отсутствовать вовсе. Поле group
может содержать буквы, поэтому тип - строка.
Информация об отчете
{
"subject_name": "Операционные системы",
"task_name": "ЛР1. Знакомство с командным интерпретатором bash",
"task_type": "Лабораторная работа",
"teacher": {
"name": "Юлия",
"surname": "Антохина",
"patronymic": "Анатольевна",
"status": "Ректор, д.т.н., проф."
},
"report_structure": [
"Цель", "Задание", "Результат выполнения", "Выводы"
],
"uploaded_at": "2022-06-01T00:00:00Z"
}
Поле uploaded_at
содержит дату загрузки студентом отчета в личный кабинет в формате ISO 8601 в часовом поясе UTC.
Требования к работе модуля
Для решения поставленной задачи необходимо написать функцию на Python, принимающую на вход все необходимые данные. Файл с кодом должен позволять как использование написанной функции в другом модуле с помощью команды import
, так и самостоятельное выполнение кода как отдельного приложения с помощью команды python <имя_файла>.py <аргументы>
.
В отчете необходимо проверять:
- титульный лист на соответствие заданным во входных данных параметрам:
- тип задания (лабораторная работа, курсовой проект и т.п.),
- ФИО студента,
- группа студента,
- название предмета,
- название задания (лабораторной работы),
- ФИО преподавателя,
- должность преподавателя,
- год выполнения отчета внизу титульного листа (проверять по дате загрузки отчета)
- содержимое отчета на наличие обязательных разделов, если таковые были указаны.
Программа должна поддерживать произвольный шаблон титульного листа, как скачанный с сайта ГУАП, так и упрощенный, а также любые их вариации, в т.ч. с любым оформлением (размер шрифта; выделение слов жирным, курсивом и т.п.; использование невидимых таблиц для форматирования текста, использование разрывов страниц и пр.).
Порядок выполнения работы
- Провести анализ существующих библиотек языка Python для парсинга файлов заданного формата. Составить сравнительную таблицу, указав, в том числе: дату выхода последней версии библиотеки; лицензию, по которой распространяется библиотека; наличие внешних зависимостей, которые необходимо устанавливать отдельно; количество звезд на гитхабе, количество форков и открытых Issues; наличие подробной документации; и др.
- Проанализировать функциональные возможности найденых библиотек для решения поставленной задачи.
- Согласовать окончательный выбор библиотеки для парсинга файлов.
- Реализовать поставленную задачу.
- Подготовить тестовые данные (файлы с отчетами в нужном формате) для проверки корректности работы программы. На каждый проверяемый в отчете элемент должен быть как минимум один отдельный тест, в котором проверяется, что в случае некорректного заполнения соответствующей части отчета, написанная программа генерирует все необходимые сообщения о содержащейся в отчете ошибке. Предусмотреть тесты с различными вариантами оформления отчета (в т.ч. титульного листа). Также тестовые данные должны включать несколько правильно выполненных отчетов, а также неправильно выполненные отчеты, содержащие сразу несколько ошибок.
- Подготовить тесты с использованием библиотеки
pytest
. - Написать CI/CD процесс с использованием GitHub Actions для автоматического запуска тестов при изменении файла (-ов) в репозитории, в которых реализован функционал данной задачи.