Парсер: замечания отдельной строкой — уровня всей ячейки

В ячейке с несколькими занятиями (курсы по выбору) красная заметка,
занимающая строку(и) целиком, относится ко всем занятиям ячейки
(пара отменяется целиком) и раздаётся каждому занятию. Заметка,
написанная в одной строке с предметом/аудиторией, остаётся
привязанной к своему занятию. Многострочные standalone-заметки
сохраняют переводы строк.

Кейс: ПИЭ-13МО, понедельник, 5-я пара. Diff по 33 группам: затронуто
только поле note в multi-lesson ячейках; порядок «inline->ячейка».
This commit is contained in:
2026-09-14 01:37:53 +03:00
parent e61ff1d683
commit 419e65e960
2 changed files with 100 additions and 16 deletions

View File

@@ -347,3 +347,29 @@ def test_full_name_inline_after_subject():
assert result["subject"] == "Основы тестирования веб-приложений"
assert result["teacher"] == "Денис Верховцев (Сигма)"
assert result["room"] == "онлайн"
def test_cell_note_applies_to_all_lessons():
# ПИЭ-13МО, понедельник, 5-я пара: два курса по выбору, заметка о паре
raw = (
"к.в. Управление ИТ-проектами\nЕрофеев Александр Александрович (ПравоТех)\nонлайн\n"
"к.в. Математические методы и модели принятия решения Наука онлайн\n"
+ R + "14.09 пары не будет" + Cc
)
ls = lessons(raw)
assert len(ls) == 2
assert all(l["note"] == "14.09 пары не будет" for l in ls)
assert {l["subject"] for l in ls} == {
"Управление ИТ-проектами",
"Математические методы и модели принятия решения",
}
def test_inline_note_stays_with_its_lesson():
raw = (
"Русский язык\nШаманова М.В.\nауд. 312 " + R + "с 7.09 по 20.09 пары не будет" + Cc
+ "\n\nМатематика\nСмирнов А.В.\nауд. 203"
)
ls = lessons(raw)
assert ls[0]["note"] == "с 7.09 по 20.09 пары не будет"
assert ls[1]["note"] == ""