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
Разделить на три различимые части. Особое внимание — п. 3: сейчас логика «escape замечен в том же тике, что и успешная загрузка» встроена в общий поток и снабжена длинным пояснением, почему её нельзя проверять только при отсутствии CSV.
Файлы
src/wordstat/collector.py
tests/test_collector_batch.py
Требования
Чистый рефакторинг, поведение не меняется.
Инварианты:
DownloadNoNewPathError (подтип DownloadTimeoutError) отличается от «скачалось больше одного CSV» — на этом различии держится восстановление после перезаписи файла тем же именем (PR fix: keep collecting after empty top retry timeout #39);
session.downloaded_files — лог за всё время сессии, а не за текущий вызов; фильтрация по каталогу обязательна;
escape, замеченный в одном тике с успешной загрузкой, не теряется: он больше нигде не всплывёт.
ruff check . чист; мутации по границам.
Оценка
LOC
~150–250 (код ~90, тесты ~110)
Размер
M
Код
35–55 мин
Review
25–40 мин
Итого
60–95 мин
Множитель +20%: файловые гонки и escape-логика требуют аккуратных тестов; область уже была источником двух багов (#27, #38).
Приоритет: low — функция сложная, но стабильная; трогать её стоит последней, когда остальной рефакторинг устоится.
Часть эпика #40.
Что сделать
_download_current_view(collector.py:1247, 99 строк) совмещает три механизма:_resolved_file_snapshot, дедуп/tmpvs/private/tmp);DownloadEscapedError, история Скачанный CSV уходит в ~/Downloads мимо каталога прогона; сбой на одном виде обнуляет весь результат #27).Разделить на три различимые части. Особое внимание — п. 3: сейчас логика «escape замечен в том же тике, что и успешная загрузка» встроена в общий поток и снабжена длинным пояснением, почему её нельзя проверять только при отсутствии CSV.
Файлы
src/wordstat/collector.pytests/test_collector_batch.pyТребования
DownloadNoNewPathError(подтипDownloadTimeoutError) отличается от «скачалось больше одного CSV» — на этом различии держится восстановление после перезаписи файла тем же именем (PR fix: keep collecting after empty top retry timeout #39);session.downloaded_files— лог за всё время сессии, а не за текущий вызов; фильтрация по каталогу обязательна;ruff check .чист; мутации по границам.Оценка
Множитель +20%: файловые гонки и
escape-логика требуют аккуратных тестов; область уже была источником двух багов (#27, #38).Приоритет: low — функция сложная, но стабильная; трогать её стоит последней, когда остальной рефакторинг устоится.