Skip to content

fix(digest): treat graded assignments as submitted - #2

Merged
nowherewashere merged 2 commits into
nowherewashere:masterfrom
Alstrr:fix/graded-without-upload
Sep 20, 2026
Merged

nowherewashere merged 2 commits into
nowherewashere:masterfrom
Alstrr:fix/graded-without-upload

Conversation

@Alstrr

@Alstrr Alstrr commented Sep 20, 2026

Copy link
Copy Markdown
Contributor

Что изменено

  • задания с выставленной оценкой больше не считаются несданными, даже если Moodle оставляет статус new
  • добавлен регрессионный тест для оценки без прикреплённого файла

Почему

Moodle может поставить оценку за очную защиту, не создавая submission. Из-за этого работа с grade и status="new" ошибочно попадала в просроченные и в раздел «Горит».

Проверка

  • python -m unittest discover -s tests -t . — 146 тестов успешно, 1 пропущен
  • проверено на реальной сводке через study state --no-save

nowherewashere added a commit that referenced this pull request Sep 20, 2026
К #2: Moodle отдаёт feedback.grade.grade = -1.00000 (ASSIGN_GRADE_NOT_SET),
когда преподаватель сохранил отзыв без оценки. grade_of() возвращает None для
отрицательных и нечисловых значений; им пользуются сводка (статус, пересдачи)
и study task. Тест на -1 рядом с тестом из #2.
@nowherewashere
nowherewashere merged commit 9e444b4 into nowherewashere:master Sep 20, 2026
nowherewashere added a commit that referenced this pull request Sep 20, 2026
…антикой Moodle

moodle.submission_state(assign, status, now): статус с учётом группового ответа
(teamsubmission), оценки без файла (#2), очного задания без плагинов ответа
(offline), индивидуального продления (extensionduedate заменяет срок и поднимает
cutoff), «приём ещё не открыт» (allowsubmissionsfromdate) и «приём закрыт» —
по lastattempt.canedit (серверный submissions_open: cutoff, продление, locked,
запись), а не по cutoffdate; cansubmit — кнопка, не признак. Ею пользуются
и сводка, и study task (раньше карточка не знала про #2).

Сводка: «приём закрыт» / «заблокировано» / «откроется DD.MM» в «Состоянии»;
закрытое и очное — не в «Горит» (у РУДН cutoff = срок у 42 из 43 заданий:
после срока сдаётся только «Пересдача», и она в «Горит» остаётся); продление
переносит работу из просроченного в сроки, снимок хранит исходный срок, чтобы
не было «срок сдвинут» каждый день; пересдача нужна и при закрытом оригинале.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants