Skip to content

Модуль проверки отчетов в формате OpenOffice (2024) #16

Open
@markpolyak

Description

@markpolyak

Задача

Реализовать модуль для проверки отчетов студентов, выполненных в формате OpenOffice (odt).

Описание входных и выходных данных

Входные данные:

  • файл с отчетом в виде потока байт;
  • словарь с информацией о студенте;
  • словарь с информацией об отчете.

Выходные данные:
Список строк с описанием ошибок в отчете, по одной строке на каждую ошибку. Пример:

[
  "Неправильное название предмета",
  "Неверное ФИО студента",
  "Неверная дата"
]

Информация о студенте

{
  "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 <аргументы>.

В отчете необходимо проверять:

  • титульный лист на соответствие заданным во входных данных параметрам:
    • тип задания (лабораторная работа, курсовой проект и т.п.),
    • ФИО студента,
    • группа студента,
    • название предмета,
    • название задания (лабораторной работы),
    • ФИО преподавателя,
    • должность преподавателя,
    • год выполнения отчета внизу титульного листа (проверять по дате загрузки отчета)
  • содержимое отчета на наличие обязательных разделов, если таковые были указаны.

Программа должна поддерживать произвольный шаблон титульного листа, как скачанный с сайта ГУАП, так и упрощенный, а также любые их вариации, в т.ч. с любым оформлением (размер шрифта; выделение слов жирным, курсивом и т.п.; использование невидимых таблиц для форматирования текста, использование разрывов страниц и пр.).

Порядок выполнения работы

  1. Провести анализ существующих библиотек языка Python для парсинга файлов заданного формата. Составить сравнительную таблицу, указав, в том числе: дату выхода последней версии библиотеки; лицензию, по которой распространяется библиотека; наличие внешних зависимостей, которые необходимо устанавливать отдельно; количество звезд на гитхабе, количество форков и открытых Issues; наличие подробной документации; и др.
  2. Проанализировать функциональные возможности найденых библиотек для решения поставленной задачи.
  3. Согласовать окончательный выбор библиотеки для парсинга файлов.
  4. Реализовать поставленную задачу.
  5. Подготовить тестовые данные (файлы с отчетами в нужном формате) для проверки корректности работы программы. На каждый проверяемый в отчете элемент должен быть как минимум один отдельный тест, в котором проверяется, что в случае некорректного заполнения соответствующей части отчета, написанная программа генерирует все необходимые сообщения о содержащейся в отчете ошибке. Предусмотреть тесты с различными вариантами оформления отчета (в т.ч. титульного листа). Также тестовые данные должны включать несколько правильно выполненных отчетов, а также неправильно выполненные отчеты, содержащие сразу несколько ошибок.
  6. Подготовить тесты с использованием библиотеки pytest.
  7. Написать CI/CD процесс с использованием GitHub Actions для автоматического запуска тестов при изменении файла (-ов) в репозитории, в которых реализован функционал данной задачи.

Metadata

Metadata

Labels

No labels
No labels

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions