gendesign/tradein-mvp/browser
Light1YT 0d010a707c
All checks were successful
CI / changes (pull_request) Successful in 7s
CI / backend-tests (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Has been skipped
feat(tradein-imv): route IMV backfill через BrowserFetcher.fetch_json за dormant-флагом (#915 Stage 3)
Транспорт-своп для avito IMV backfill: вместо curl_cffi 4 IMV-запроса
(warm-up → coords → position → get-data) ходят через камуфокс in-page fetch
(/fetch-json sidecar). Same-origin avito.ru + прокси + warmed-cookies +
реальный fingerprint обходят datacenter-403 (#562/#853) без отдельного
IMV-прокси. За dormant-флагом avito_imv_use_browser_fetcher (default False) —
деплой не меняет prod IMV-поведение.

- avito_imv.py: _BrowserResponse + _BrowserSessionAdapter (мимикрия под
  curl_cffi session/response: .get/.post/.close, .status_code/.text/.json/
  .raise_for_status). evaluate_via_imv получает browser_fetcher kwarg; при
  его наличии адаптер вместо curl-сессии (browser-путь не требует curl_cffi).
- config.py: avito_imv_use_browser_fetcher (ENV AVITO_IMV_USE_BROWSER_FETCHER).
- house_imv_backfill.py: backfill_house_imv при флаге открывает ОДИН
  BrowserFetcher(source="avito") на батч и прокидывает в _process_one_house →
  evaluate_via_imv. Флаг OFF → browser_fetcher=None → curl-путь как раньше.
  Backfill-only: estimator и sweep-путь (process_houses_imv_batch) не тронуты.
- browser_fetcher.py: _post_fetch_json защищён от ответа без status/body keys.
- test_server_fetch_json.py: тест crash-retry ветки _do_fetch_json (relaunch
  + второй _fetch_json_once после browser-crash).
- tests: _BrowserResponse/_BrowserSessionAdapter юниты, evaluate_via_imv
  browser happy-path + 403→IMVAuthError, backfill flag on/off проводка.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-26 14:42:26 +05:00
..
Dockerfile fix(browser): pageError.location needs valid defaults, not just optional chaining (#918 follow-up) (#927) 2026-05-31 20:15:39 +00:00
server.py feat(tradein-browser): additive POST /fetch-json + BrowserFetcher.fetch_json (#915 Stage 2) (#1915) 2026-06-26 09:30:35 +00:00
test_server.py feat(browser): block font/media + per-provider page pacing — снизить proxy fan-out (#1812) 2026-06-19 21:28:09 +03:00
test_server_fetch_json.py feat(tradein-imv): route IMV backfill через BrowserFetcher.fetch_json за dormant-флагом (#915 Stage 3) 2026-06-26 14:42:26 +05:00
test_server_pacing.py feat(scrapers): live pacing-регулятор (GET/PUT /scraper/pacing) + data-quality coverage endpoint 2026-06-20 12:47:03 +03:00
test_server_resource_block.py feat(browser): block font/media + per-provider page pacing — снизить proxy fan-out (#1812) 2026-06-19 21:28:09 +03:00
test_server_smoke.py feat(browser): per-provider concurrency — параллель между поставщиками, ≤1 коннект на поставщика (#1793) 2026-06-19 18:52:55 +03:00