fix(tradein/scraper-kit): проброс endpoint= в yandex/cian newbuilding BrowserFetcher (#2322) #2356

Merged
lekss361 merged 2 commits from fix/tradein-scraper-kit-newbuilding-endpoint into main 2026-07-04 00:17:10 +00:00
Owner

Summary

Group F1 (эпик #2277, scraper_kit migration). Фикс известного бага #2322: scraper_kit/providers/{yandex,cian}/newbuilding.py конструировали BrowserFetcher(source=...) без обязательного (без дефолта) kwarg endpoint=TypeError на любом реальном вызове, при этом сигнатуры даже не выставляли config наружу.

  • cian/newbuilding.py::fetch_newbuilding() — добавлен config: ScraperConfig | None = None (keyword-only), проброшен как endpoint=config.browser_http_endpoint if config is not None else None (паттерн 1:1 с уже существующим resolve_cian_zhk_url_via_search в том же файле).
  • yandex/newbuilding.py::YandexNewbuildingScraper.__init__ + resolve_yandex_jk_slug() — тот же паттерн.
  • Regression-тест test_scraper_kit_newbuilding_endpoint.py (6 тестов) — spy на реальный конструктор BrowserFetcher, проверяет фактические kwargs (source=, endpoint=), включая backward-compat кейс без config=.
  • Доп. фикс, найден при review этого же PR и независимо подтверждён F3-аудитом (#2351): scraper_kit/orchestration/pipeline.py:2459run_cian_city_sweep's houses-фаза звала fetch_newbuilding(zhk_url) без config=, хотя config — mandatory параметр enclosing-функции, тривиально в scope. Сейчас dormant (USE_KIT_SCHEDULER=False + cian_city_sweep.enabled=false в SQL seed), но при включении — падал бы AssertionError на каждый дом silently. Однострочный фикс, довёл проводку до конца в этом же PR.
  • Продовые caller'ы (admin.py, cian_history_backfill.py, newbuilding_enrich_backfill.py, yandex_newbuilding_sweep.py) намеренно НЕ трогали — все ещё импортируют legacy-модули (issue #2322's DoD, домиграция — отдельный будущий шаг).

Review

code-reviewer APPROVE (1 non-blocking finding про pipeline.py:2459, зафиксирован и исправлен в этом же PR).

Test plan

  • 6 новых regression-тестов + relevant test files: passed
  • Regression доказан вручную (stash фикса → 3/6 падают с ожидаемой TypeError, restore → зелёные)
  • Full backend suite: 3248 passed, 6 skipped, 1 pre-existing unrelated fail (test_search_cache_hit)
  • ruff check/ruff format — clean

Closes #2322

## Summary Group F1 (эпик #2277, scraper_kit migration). Фикс известного бага #2322: `scraper_kit/providers/{yandex,cian}/newbuilding.py` конструировали `BrowserFetcher(source=...)` без обязательного (без дефолта) kwarg `endpoint=` — `TypeError` на любом реальном вызове, при этом сигнатуры даже не выставляли `config` наружу. - `cian/newbuilding.py::fetch_newbuilding()` — добавлен `config: ScraperConfig | None = None` (keyword-only), проброшен как `endpoint=config.browser_http_endpoint if config is not None else None` (паттерн 1:1 с уже существующим `resolve_cian_zhk_url_via_search` в том же файле). - `yandex/newbuilding.py::YandexNewbuildingScraper.__init__` + `resolve_yandex_jk_slug()` — тот же паттерн. - Regression-тест `test_scraper_kit_newbuilding_endpoint.py` (6 тестов) — spy на реальный конструктор `BrowserFetcher`, проверяет фактические kwargs (`source=`, `endpoint=`), включая backward-compat кейс без `config=`. - **Доп. фикс, найден при review этого же PR и независимо подтверждён F3-аудитом (#2351):** `scraper_kit/orchestration/pipeline.py:2459` — `run_cian_city_sweep`'s houses-фаза звала `fetch_newbuilding(zhk_url)` без `config=`, хотя `config` — mandatory параметр enclosing-функции, тривиально в scope. Сейчас dormant (`USE_KIT_SCHEDULER=False` + `cian_city_sweep.enabled=false` в SQL seed), но при включении — падал бы `AssertionError` на каждый дом silently. Однострочный фикс, довёл проводку до конца в этом же PR. - Продовые caller'ы (`admin.py`, `cian_history_backfill.py`, `newbuilding_enrich_backfill.py`, `yandex_newbuilding_sweep.py`) намеренно НЕ трогали — все ещё импортируют legacy-модули (issue #2322's DoD, домиграция — отдельный будущий шаг). ## Review `code-reviewer` — ✅ APPROVE (1 non-blocking finding про `pipeline.py:2459`, зафиксирован и исправлен в этом же PR). ## Test plan - [x] 6 новых regression-тестов + relevant test files: passed - [x] Regression доказан вручную (stash фикса → 3/6 падают с ожидаемой TypeError, restore → зелёные) - [x] Full backend suite: 3248 passed, 6 skipped, 1 pre-existing unrelated fail (`test_search_cache_hit`) - [x] `ruff check`/`ruff format` — clean Closes #2322
lekss361 added 2 commits 2026-07-04 00:12:31 +00:00
fix(tradein/scraper-kit): проброс config= в pipeline.py::fetch_newbuilding call
All checks were successful
CI Trade-In / changes (pull_request) Successful in 8s
CI / changes (pull_request) Successful in 8s
CI Trade-In / frontend-checks (pull_request) Has been skipped
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
CI Trade-In / backend-tests (pull_request) Successful in 1m37s
ccf716119c
Найдено при code-review этого же PR (F1, #2349) и независимо подтверждено
F3-аудитом (#2351): run_cian_city_sweep's houses-фаза звала
fetch_newbuilding(zhk_url) без config=, хотя config — mandatory параметр
enclosing-функции, тривиально в scope. Сейчас dormant (USE_KIT_SCHEDULER=False +
cian_city_sweep.enabled=false в SQL seed), но при включении флага/расписания
каждый house молча падал бы AssertionError (перехватывается except → houses_failed,
sweep не крашится целиком, но newbuilding-enrichment был бы 100% failing silently).
lekss361 merged commit 1e5fc13635 into main 2026-07-04 00:17:10 +00:00
lekss361 deleted branch fix/tradein-scraper-kit-newbuilding-endpoint 2026-07-04 00:17:10 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: lekss361/gendesign#2356
No description provided.