fix(tradein): avito sweep page-level retry — transient page error no longer aborts run #1755
No reviewers
Labels
No labels
admin
analytics
auth
automation
bug
business
chore
ci
compliance
data
data-moat
docs
duplicate
dx
enhancement
Fable 5 ревью
feedback/max
generative
GG-форсайт
needs-discussion
needs-human
observability
pause-bots
performance
priority/p0
priority/p1
priority/p2
priority/p3
scope/backend
scope/db
scope/devops
scope/frontend
scope/qa
scrapers
security
site-finder
stage/1
stage/2
status/blocked
status/done
status/needs-analysis
status/needs-fix
status/qa
status/ready
status/review
status/wip
tech-debt
tradein
ux
week ревью 1
wontfix
вторичка
ИРД
No milestone
No project
No assignees
2 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: lekss361/gendesign#1755
Loading…
Add table
Reference in a new issue
No description provided.
Delete branch "fix/avito-sweep-page-retry"
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?
Проблема (P2)
fetch_city_wide,fetch_by_roomsи_paginate_sweep(бэкает citywide +fetch_newbuildings) на transient browser/fetch-ошибке делалиbreak→ один сбой страницы N обрывал ВЕСЬ прогон (citywide) или категорию (byrooms), теряя хвост. Унаследовано от старого anchor-свипа; один apw-блип резал прогон.Решение
Новый helper
_fetch_serp_html_with_retry(url, page, *, max_retries=2)— до 3 попыток:AvitoBlockedError/AvitoRateLimitedError→ re-raise немедленно (hard-block, не retry);Exception→ warning + короткий backoff (max(2.0, min(request_delay_sec, 4.0))) + retry; после исчерпания → re-raise (внешний loop решает break);None(non-200/конец пагинации) → возврат как есть, без retry.fetch_city_wide/fetch_by_rooms/_paginate_sweepзовут helper вместо прямого_fetch_serp_html. Семантика внешнегоbreakсохранена — но теперь срабатывает только на persistent failure (после retry), а не на первом transient-блипе.html is None → breakбез изменений.Не тронуты
fetch_all_secondary/_walk_price_range/_fetch_rooms_page_html(своя retry-логика из #1753).Тесты
tests/scrapers/test_avito_sweep_retry.py(нов, 8): retry-recovers, re-raise после исчерпания, Blocked/RateLimited не-retry (call_count==1), None-no-retry, 2 integrationfetch_city_wide(transient page выживает; persistent page=3 → graceful break, страницы 1-2 сохранены).Full suite (prescribed deselects): 1970 passed, 1 skipped, 0 failed. Ruff clean.
✅ APPROVE — clean worktree head
6c132d7f.P2 resilience fix, корректен:
html is None → breakбез изменений.Тесты на чистом дереве: 1970 passed, 0 failed. Ruff clean. Merge (merge style).