Скорректирован сценарий запуска, исправление бага с предметом
This commit is contained in:
@@ -495,6 +495,40 @@ def _normalize_marker_of(line: str) -> Optional[str]:
|
||||
return _normalize_marker(num or None)
|
||||
|
||||
|
||||
def _merge_detached_fragments(lessons: list[Lesson]) -> list[Lesson]:
|
||||
"""Достраивает занятие из оторвавшихся пустой строкой преподавателя/аудитории.
|
||||
|
||||
Пустая строка внутри ячейки (или красная заметка, снятая с целой строки)
|
||||
отрывает хвост от предмета: «Предмет\nЛарина Ю.А.\n\n ауд.210» разбирается
|
||||
как занятие без аудитории и «ауд. 210» без предмета — в индексе аудиторий
|
||||
от такого занятия остаётся только список групп. Кусок без предмета цепляем
|
||||
к предыдущему занятию, но только если у того этих полей ещё нет, иначе
|
||||
это похоже на отдельное занятие параллельной подгруппы.
|
||||
"""
|
||||
merged: list[Lesson] = []
|
||||
for lesson in lessons:
|
||||
prev = merged[-1] if merged else None
|
||||
if (
|
||||
prev is not None
|
||||
and prev.subject
|
||||
and not lesson.subject
|
||||
and (lesson.teacher or lesson.room)
|
||||
and (not lesson.marker or lesson.marker == prev.marker)
|
||||
and (not lesson.teacher or not prev.teacher)
|
||||
and (not lesson.room or not prev.room)
|
||||
):
|
||||
notes = [n for n in (prev.note + "\n" + lesson.note).split("\n") if n]
|
||||
merged[-1] = replace(
|
||||
prev,
|
||||
teacher=lesson.teacher or prev.teacher,
|
||||
room=lesson.room or prev.room,
|
||||
note="\n".join(dict.fromkeys(notes)),
|
||||
)
|
||||
else:
|
||||
merged.append(lesson)
|
||||
return merged
|
||||
|
||||
|
||||
def parse_lesson_cell(cell_text: str) -> list[Lesson]:
|
||||
"""Текст ячейки -> список занятий.
|
||||
|
||||
@@ -525,6 +559,8 @@ def parse_lesson_cell(cell_text: str) -> list[Lesson]:
|
||||
lesson = replace(lesson, marker=last_marker)
|
||||
lessons.append(lesson)
|
||||
|
||||
lessons = _merge_detached_fragments(lessons)
|
||||
|
||||
if not cell_notes:
|
||||
return lessons
|
||||
if not lessons:
|
||||
|
||||
Reference in New Issue
Block a user