Транспорт-своп для 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> |
||
|---|---|---|
| .. | ||
| Dockerfile | ||
| server.py | ||
| test_server.py | ||
| test_server_fetch_json.py | ||
| test_server_pacing.py | ||
| test_server_resource_block.py | ||
| test_server_smoke.py | ||