Задание в ТУИС приходит из двух ручек, и раньше об этом знала только сводка: mod_assign_get_assignments отдаёт всё про приём ответа, но молчит о заданиях с ограничением доступа, а core_course_get_contents отдаёт их без данных о сдаче. Теперь слияние вынесено в реестр, и одно и то же задание везде видно одинаково.
- Реестр заданий (
study/assigns.py):works()сливает источники поcmid,find()ищет по номеру работы, id и cmid,modules()отдаёт прочие элементы со сроком. На нём стоят сводка,study task,study assignsи предполётstudy submit. study task <код> <NN|id|cmid>открывает и задание, закрытое ограничением доступа: срок, описание модуля и причина из ТУИС («Вы принадлежите к группе …») вместо «в курсе нет задания». Принимает cmid — тот самый номер, которым задание называет сводка.study assigns --course <код>печатает такие задания строками (cmid, срок, причина) вместо счётчика «Скрыто ограничением доступа: N»; без курса поведение прежнее — состав пришлось бы спрашивать по каждому курсу. Курс, который в ТУИС ничего не принимает, так и говорит.study submitс id, которого нет в mod_assign (часто это cmid из сводки), отказывает сразу и объясняет почему — раньше шёл за статусом и получал невнятную ошибку Moodle.- Сводка не изменилась ни на строку, но теперь стоит на реестре; порядок сроков стал детерминированным: срок → курс → название, а не «как ответил ТУИС».
- Курс без папки больше не молчит: строка «Без папки (файлы не скачиваются): … —
CODE <id> <папка>илиCOURSE_IGNORE» держится в каждой сводке, пока курс не заведён или не в игноре. Объявление «Новый курс в ТУИС» бывает один раз, и его легко пропустить. - Имена работ: «Решение задачи 3 ИДЗ» → «Задача 3» в таблицах, поиск по номеру работает и для них.
- Сбой состава курса больше не уносит список и не молчит в карточке: ошибка мягкая и печатается строкой «Не удалось: …», как в сводке.
Внутри: soft переехал в config, lab_number — в fmt, KINDS/DATE_IDS/SUBMISSION — в assigns. Тестов 176, CI зелёный на 3.8 и 3.12 под Linux, macOS и Windows.