forked from Matvey-Doshchechnikov/lab_grader_web
-
Notifications
You must be signed in to change notification settings - Fork 7
Open
Description
Цель
Реализовать модуль, который запускает проверку на плагиат с использованием сервиса MOSS (через библиотеку mosspy), парсит результаты и обновляет Google Таблицу, где хранятся оценки студентов.
Требования
Задание на 3
- Написать скрипт, который:
- Загружает index.html с отчётом MOSS по заранее предоставленной ссылке.
- Извлекает из него пары совпадающих студентов, проценты и количество совпавших строк.
- Сохраняет результат в results.json (см. ниже).
Задание на 4
Реализовать:
- Запуск проверки через pymoss.
- Скачивание index.html.
- Парсинг совпадений.
- Обновление Google-таблицы:
- В нужной ячейке в строке студента создать комментарий с текстом "подозрение на плагиат" в столбце соответствующем лабораторной работе. Если комментарий (-ии) к этой ячейке уже есть, добавить новый комментарий в конец существующей ветки комментариев. Обязательно пометить ячейку залив ее желтым цветом.
- В столбец "Заимствования" добавить текст вроде "Плагиат ЛР2: совпадение с petrov21 (89%)."
Задание на 5
Помимо задания на 4 дополнительно реализовать два или более пунктов:
- Использование порога (например, игнорировать совпадения < 50%).
- Предусмотреть возможность подгрузки в moss результатов выполнения лабораторных работ студентами прошлых лет. Предполагается, что исходный код студентов предыдущих курсов хранится локально, скачивать его из гитхаба не нужно. В случае, если будет найден плагиат между двумя репозиториями студентов прошлых лет - игнорировать. Если плагиат между студентом прошлых лет и нынешним - оставить комментарий и раскрасить ячейку (см. выше) для нынешнего студента, а информацию о студенте одного из прошлых потоков игнорировать, т.к. этого студента нет в текущей гугл-таблице.
- Поддержка compare50 в виде альтернативного движка для проверки на плагиат.
- Добавление ссылки на локальный HTML-отчёт, скачанный с помощью pymoss.
Архитектура
Использовать шаблон «Стратегия».
Определить абстрактный интерфейс PlagiarismChecker и создать реализацию для MossChecker.
Пример (перечень входных и выходных аргументов можно менять):
from abc import ABC, abstractmethod
class PlagiarismChecker(ABC):
def __init__(self, lab_id: str, language: str):
self.lab_id = lab_id
self.language = language
@abstractmethod
def run_check(self) -> str:
"""Запускает проверку, возвращает путь к отчёту"""
@abstractmethod
def parse_results(self, report_path: str) -> list[dict]:
"""Извлекает пары совпадений"""Содержимое results.json, который должен генерироваться в случае выполнения задания на 3:
[
{
"student1": "ivanov-dev",
"student2": "petrov21",
"match1": "89%",
"match2": "87%",
"lines": 56,
"lab_id": "ЛР2"
},
{
"student1": "sidorov-a",
"student2": "ivanov-dev",
"match1": "65%",
"match2": "64%",
"lines": 33,
"lab_id": "ЛР2"
}
]Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels