You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
обработка сбоя одного вида (view_errors, спасение CSV, пропуск остальных).
Выделить п. 1–2 и п. 4 в отдельные функции; п. 5 — в собственный обработчик. Цель: тело цикла читается как последовательность именованных шагов, каждый вложенный try живёт внутри своей маленькой функции.
Целевой размер _collect_one — ≤ 80 строк (сейчас 293).
Файлы
src/wordstat/collector.py — _collect_one, новые helper'ы
tests/test_collector_batch.py
Требования
Чистый рефакторинг, поведение не меняется; существующие тесты зелёными без правок (кроме переехавших приватных имён — перечислить).
Инварианты, которые нельзя растерять (каждый документирует реальный баг):
порядок «скачать → распарсить → записать parquet → убрать raw» — при CsvFormatError CSV обязан остаться на диске;
fail-closed для dynamics (_is_untrustworthy_empty_export);
изоляция сбоя вида: одна упавшая вкладка не роняет фразу, остальные виды собираются;
спасение source в run-каталог при любом сбое после скачивания.
ruff check . чист.
Мутации по границам try/finally обязательны.
Оценка
LOC
~250–400 (код ~160, тесты ~190)
Размер
L
Код
60–90 мин
Review
40–60 мин
Итого
100–150 мин
Множитель +20%: горячий путь с обработкой ошибок, тесты на изоляцию сбоев требуют отдельных сценариев на каждый вид. Лимит 1000 строк не достигается.
Часть эпика #40. Делать после подзадачи про подготовку прогона.
Что сделать
Ядро
_collect_one— циклfor view_index, view in enumerate(pending_views):на 112 строк с двумя вложеннымиtryи логикой пяти разных обязанностей:_retry_empty_export, PR fix: keep collecting after empty top retry timeout #39);view_errors, спасение CSV, пропуск остальных).Выделить п. 1–2 и п. 4 в отдельные функции; п. 5 — в собственный обработчик. Цель: тело цикла читается как последовательность именованных шагов, каждый вложенный
tryживёт внутри своей маленькой функции.Целевой размер
_collect_one— ≤ 80 строк (сейчас 293).Файлы
src/wordstat/collector.py—_collect_one, новые helper'ыtests/test_collector_batch.pyТребования
CsvFormatErrorCSV обязан остаться на диске;dynamics(_is_untrustworthy_empty_export);sourceв run-каталог при любом сбое после скачивания.ruff check .чист.try/finallyобязательны.Оценка
Множитель +20%: горячий путь с обработкой ошибок, тесты на изоляцию сбоев требуют отдельных сценариев на каждый вид. Лимит 1000 строк не достигается.
Приоритет: high — это и есть главная цель эпика.