gendesign/backend
bot-backend cb5e2d4f70
All checks were successful
CI Trade-In / changes (pull_request) Successful in 7s
CI / changes (pull_request) Successful in 9s
CI Trade-In / backend-tests (pull_request) Has been skipped
CI Trade-In / browser-tests (pull_request) Has been skipped
CI Trade-In / frontend-checks (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Successful in 2m16s
CI / backend-tests (pull_request) Successful in 17m10s
fix(ptica): серия WAF-блоков прерывает батч каталога, а не гонит его до конца (#2464)
scrape_catalog_object гасил WafBlockedError и возвращал его как обычную неудачу,
поэтому батч-цикл шёл дальше и слал ЖИВОЙ запрос на каждый оставшийся obj_id в
уже забаненную сессию.

Цена. Замер прода 20.08: в очереди 13200 объектов из 13801, а DOM.РФ отдаёт
страницу «Доступ заблокирован [403]» с капчей (#2443). Один прогон «Загрузить
все» выдал бы 13200 живых запросов в забаненную сессию — ровно то, что углубляет
бан. Анти-бан-комментарий к BrowserSession в этом же файле предупреждает про тот
же path family, из-за которого бан и случился.

Правка из двух частей: per-object функция пробрасывает WAF (это не «объект не
дошёл», а закрытая дверь), батч-цикл считает ПОДРЯД идущие блоки и прерывается на
третьем. Порог не единица намеренно: одиночный блок бывает переходным, три
подряд — стена. Прерванный батч помечается в stats (aborted_on_waf), а stats
уходит в результат задачи через **stats — видно в логе прогона.

Про двусторонность честно: части проверяются по-разному.

  • Проброс WAF — ДВУСТОРОННЕ. Тест подменяет fetch_catalog_object_html
    (настоящий источник блока) и гоняет НАСТОЯЩУЮ функцию: на origin/main
    «DID NOT RAISE», потому что там исключение гасится.
  • Предохранитель — логики этой на origin/main нет, поэтому тесты подменяют
    scrape_catalog_object и меряют новый цикл в изоляции (сколько объектов он
    успел тронуть). На двустороннюю проверку они не претендуют, и это написано
    в шапке файла.

Первая версия теста этого не различала: подменяла scrape_catalog_object и на main
падала с пробросом исключения — то есть по «нет такого кода», а не по неверному
поведению. Перестроено.

Контроли: одиночный блок не рвёт прогон; успех между блоками сбрасывает счётчик;
обычный сбой сети по-прежнему гасится в False (иначе один битый объект рвал бы
батч); здоровый батч проходит все объекты.

Прогоны: tests/services/scrapers + tests/workers — 525 passed rc=0.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-20 15:33:32 +05:00
..
alembic fix(week-review): backend-аудит v2 — 82 фиксов (#1660) 2026-06-17 17:13:38 +00:00
app fix(ptica): серия WAF-блоков прерывает батч каталога, а не гонит его до конца (#2464) 2026-08-20 15:33:32 +05:00
db/init ops: alembic baseline, pre-commit, TIGER cleanup, pg_dump scripts 2026-04-26 13:08:51 +03:00
output feat(geo): NSPD bulk-fetcher без Playwright + resume-friendly UI 2026-05-11 08:53:28 +03:00
scripts feat(scripts): Potrace floor-plan vectorization spike (#299) (#1663) 2026-06-17 17:12:48 +00:00
tests fix(ptica): серия WAF-блоков прерывает батч каталога, а не гонит его до конца (#2464) 2026-08-20 15:33:32 +05:00
.dockerignore fix(scraper): диагностируем «кнопка не работает» — Redis lock + task_received log 2026-04-28 23:17:42 +03:00
.env.example refactor(security): убрать мёртвую проверку админского токена (#2775) (#2776) 2026-08-07 09:30:23 +00:00
.env.runtime.example sprint1: nspd scraper industrialization, per-bucket elasticity, cadastre cross-check, sentry releases 2026-04-30 21:51:19 +03:00
.gitignore fix(ptica): фильтр класса в velocity ссылался на алиас, которого нет в CTE (#2464-G) (#2865) 2026-08-13 17:46:27 +00:00
alembic.ini ops: alembic baseline, pre-commit, TIGER cleanup, pg_dump scripts 2026-04-26 13:08:51 +03:00
debug.log feat(geo): NSPD bulk-fetcher без Playwright + resume-friendly UI 2026-05-11 08:53:28 +03:00
Dockerfile feat(sf): OCR-пайплайн изъятия ЕКБ (Tesseract rus) → land_reservation (#1062) 2026-06-07 18:07:06 +03:00
pyproject.toml feat(exporters): серверный статик-рендер карт для PDF-отчёта (#2259 PR-C Maps) (#2286) 2026-07-03 10:29:23 +00:00
uv.lock feat(exporters): серверный статик-рендер карт для PDF-отчёта (#2259 PR-C Maps) (#2286) 2026-07-03 10:29:23 +00:00