gendesign/tradein-mvp/backend/app/api
lekss361 ee87575052 fix(tradein/avito): anti-bot hardening — sleep + abort + shared session
Production был заблокирован 23.05 17:48-17:55 MSK из-за tight loop без delay
в detail enrichment (~20 req/sec к Avito). Все 3 подряд runs получили 403.

Bundled fix:
1. AvitoBlockedError / AvitoRateLimitedError (новый avito_exceptions.py)
2. fetch_around, fetch_detail, fetch_house_catalog — raise на HTTP 403/429
3. scrape_pipeline: shared AsyncSession через весь sweep (один TLS handshake)
4. asyncio.sleep с +-20% random jitter между detail requests (default 7s)
5. Early abort: после 3 consecutive blocks — abort sweep + propagate
6. scrape_runs.mark_rate_limited (status=rate_limited vs failed/done)
7. detail_top_n default 20->10 в CitySweepStartRequest
8. logger.error вместо warning для 403/429 -> GlitchTip alert

Confirmed root cause: prod logs показали 403 в 40-60ms intervals
(blast pattern без delay между fetch_detail calls).
2026-05-23 23:00:23 +03:00
..
v1 fix(tradein/avito): anti-bot hardening — sleep + abort + shared session 2026-05-23 23:00:23 +03:00
__init__.py feat: add tradein-mvp subproject (Trade-In Estimator под /trade-in) 2026-05-21 00:25:39 +03:00