[tradein] scraper_kit F4 follow-up: сделать config mandatory в {cian,yandex}/newbuilding.py + домиграция на _base #2385

Open
opened 2026-07-04 06:44:00 +00:00 by lekss361 · 0 comments
Owner

Родительский: #2352 (Group F4). Follow-up от F4b (#2362) / F4c (#2363) — эти PR смигрировали serp/detail/session на build_browser_fetcher(), но НЕ трогали newbuilding.py каждого провайдера.

Почему отложено

cian/newbuilding.py и yandex/newbuilding.py конструируют BrowserFetcher из функций/классов, у которых config: ScraperConfig | None = None (genuinely Optional — callers routinely зовут без config: admin.py:1511, yandex_newbuilding_sweep.py:353, 8+ мест в test_yandex_newbuilding.py, и аналогично cian). Shared build_browser_fetcher() требует config mandatory (by design, чтобы закрыть footgun-класс — см. #2358). Прямая миграция:

  1. Уронила бы test_scraper_kit_newbuilding_endpoint.py (там есть кейс "config=None → endpoint=None passed explicitly" — тот самый регресс-тест из #2322).
  2. Потребовала бы сделать config mandatory во ВСЕХ callers — это уже не mechanical call-site swap, а мини-рефактор контракта.

Scope (mini-refactor, не mechanical)

  1. Сделать config: ScraperConfig mandatory в {cian,yandex}/newbuilding.py's public functions/classes (убрать | None = None).
  2. Обновить всех callers чтобы передавали config явно: admin.py, yandex_newbuilding_sweep.py, newbuilding_enrich_backfill.py, тесты.
  3. Затем домигрировать конструкцию BrowserFetcher на build_browser_fetcher() из _base.py.
  4. Обновить test_scraper_kit_newbuilding_endpoint.py (config-None кейс исчезает — заменить на config-обязателен-и-endpoint-прокинут).

Риск

Средний — трогает прод-callers (admin.py, sweep). Parity: golden-parity тесты не должны пострадать (это чистое ужесточение контракта + перенаправление конструктора). Тщательный test-прогон + grep всех callers обязателен.

Refs #2352, #2358, #2322

Родительский: #2352 (Group F4). Follow-up от F4b (#2362) / F4c (#2363) — эти PR смигрировали serp/detail/session на `build_browser_fetcher()`, но НЕ трогали `newbuilding.py` каждого провайдера. ## Почему отложено `cian/newbuilding.py` и `yandex/newbuilding.py` конструируют `BrowserFetcher` из функций/классов, у которых `config: ScraperConfig | None = None` (genuinely Optional — callers routinely зовут без config: `admin.py:1511`, `yandex_newbuilding_sweep.py:353`, 8+ мест в `test_yandex_newbuilding.py`, и аналогично cian). Shared `build_browser_fetcher()` требует `config` **mandatory** (by design, чтобы закрыть footgun-класс — см. #2358). Прямая миграция: 1. Уронила бы `test_scraper_kit_newbuilding_endpoint.py` (там есть кейс "config=None → endpoint=None passed explicitly" — тот самый регресс-тест из #2322). 2. Потребовала бы сделать config mandatory во ВСЕХ callers — это уже не mechanical call-site swap, а мини-рефактор контракта. ## Scope (mini-refactor, не mechanical) 1. Сделать `config: ScraperConfig` mandatory в `{cian,yandex}/newbuilding.py`'s public functions/classes (убрать `| None = None`). 2. Обновить всех callers чтобы передавали config явно: `admin.py`, `yandex_newbuilding_sweep.py`, `newbuilding_enrich_backfill.py`, тесты. 3. Затем домигрировать конструкцию `BrowserFetcher` на `build_browser_fetcher()` из `_base.py`. 4. Обновить `test_scraper_kit_newbuilding_endpoint.py` (config-None кейс исчезает — заменить на config-обязателен-и-endpoint-прокинут). ## Риск Средний — трогает прод-callers (`admin.py`, sweep). Parity: golden-parity тесты не должны пострадать (это чистое ужесточение контракта + перенаправление конструктора). Тщательный test-прогон + grep всех callers обязателен. Refs #2352, #2358, #2322
lekss361 added the
scope/backend
scrapers
tech-debt
tradein
labels 2026-07-04 10:23:47 +00:00
Sign in to join this conversation.
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#2385
No description provided.