Рефакторинг рендера [этап 2/6]: футер merged-групп из настоящего Message, выпил конвертера #29
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Часть эпика «Рефакторинг пайплайна рендера». Спека:
plans/2026-07-05-render-pipeline-refactor.md(v5), раздел «Этап 2». Зависимость: этап 1 (#28). Line-refs действительны дляf9550d8.Цель
Убрать обратный ход данных: сейчас для merged-групп отрендеренный dict конвертируется обратно в мок-Message (
processed_message_to_tg_message, rss_generator.py:156–201) ради повторного рендера футера — при том, что оригинальныеMessageлежат вgroup. Футеры N сообщений группы рендерятся и выбрасываются, затем футер генерируется заново из мока, теряющего paid/custom-реакции и дату в правильной TZ.Пункты реестра §3, фиксируемые этим этапом
Правки (merged-ветка
_render_messages_groups, branch:241–286)Инвариант эквивалентности: критерий выбора main совпадает с текущим (
msg['text']truthy ⇔m.text or m.caption;process_messageкладёт вtextименноmessage.text or message.caption or ''; порядок processed_messages = порядок group).Дополнительно:
post_parser.py::_reactions_views_linksпустаяreactions_htmlНЕ добавляется вfirst_line_parts(сейчас reactions-объект с пустым списком даётappend("")→ ведущий | , branch:1081–1104).processed_message_to_tg_messageцеликом и импортSimpleNamespace(если больше не нужен).message-flagsв golden-сравнении, введённую этапом 0: порядок флагов теперь детерминирован, нормализация лишь маскировала бы регрессии.Тесты
mergedприсутствует;TZ=Europe/Moscow+time.tzset()): дата merged-футера совпадает с датой футера одиночного поста того же сообщения. TZ ОБЯЗАТЕЛЬНО восстанавливается в teardown (fixture/try-finally) — иначе не-UTC протечёт в golden-тесты, которым conftest запинил UTC.DoD
Функция-конвертер удалена; pytest + golden зелёные (golden-дифф — только пп.6/8/15 с комментарием).
Общие правила эпика
Ветка
refactor/render-pipelineот f9550d8; один этап = один коммит; комментарии — English; точечные правки; новые тесты — на naive-датах.