feat(scraper-kit): copy domclick provider with protocol injection, strangler (#2133 domclick) #2156

Merged
lekss361 merged 1 commit from feat/scraper-kit-provider-domclick into main 2026-07-02 16:08:10 +00:00
Owner

Часть #2133 (Epic #2126, шаг D — domclick). Strangler-copyapp/services/scrapers/domclick.py НЕ тронут, боевой на нём, деплой инертен.

Скопировано в scraper_kit/providers/domclick/

  • serp.py ← domclick.py (BFF JSON API), развязан от app.*
  • фикстура domclick_bff_offers_sample.json

Развязка

  • get_scraper_delay → инжект delay_provider
  • settings.browser_http_endpoint → инжект config: ScraperConfig (kit-BrowserFetcher требует endpoint явно)
  • base/domclick_exceptions/repair_state_normalizer/browser_fetcherscraper_kit.*
  • grep from app пусто (+ guard-тест)

Golden-parity (9 тестов)

_extract_json (bare/<pre>/QRATOR-block), _map_item (студия rooms=0, sentinel 0→None), _is_geo_ok (bbox), url-билдеры (5+5%2B) — байт-идентично старому.

Примечание для шага E/rewire

Воркер выявил: kit-BrowserFetcher требует endpoint явным аргументом, а avito-копия (D-avito) зовёт BrowserFetcher(source="avito") без него — латентный баг (не в рантайме при strangler, сработал бы на rewire). Domclick сделал config обязательным (корректно). Пофиксить avito в E/rewire.

Verify

  • app/services/scrapers/domclick.py не тронут; providers/init.py, pyproject/lock не тронуты (без конфликта с параллельными cian/yandex)
  • ruff/mypy clean; старые test_domclick_sweep 9 passed
Часть #2133 (Epic #2126, шаг D — domclick). **Strangler-copy** — `app/services/scrapers/domclick.py` НЕ тронут, боевой на нём, деплой инертен. ## Скопировано в `scraper_kit/providers/domclick/` - `serp.py` ← domclick.py (BFF JSON API), развязан от app.* - фикстура `domclick_bff_offers_sample.json` ## Развязка - `get_scraper_delay` → инжект `delay_provider` - `settings.browser_http_endpoint` → инжект `config: ScraperConfig` (kit-BrowserFetcher требует endpoint явно) - `base`/`domclick_exceptions`/`repair_state_normalizer`/`browser_fetcher` → `scraper_kit.*` - grep `from app` пусто (+ guard-тест) ## Golden-parity ✅ (9 тестов) `_extract_json` (bare/`<pre>`/QRATOR-block), `_map_item` (студия rooms=0, sentinel 0→None), `_is_geo_ok` (bbox), url-билдеры (`5+`→`5%2B`) — байт-идентично старому. ## Примечание для шага E/rewire Воркер выявил: kit-`BrowserFetcher` требует `endpoint` явным аргументом, а avito-копия (D-avito) зовёт `BrowserFetcher(source="avito")` без него — **латентный** баг (не в рантайме при strangler, сработал бы на rewire). Domclick сделал `config` обязательным (корректно). Пофиксить avito в E/rewire. ## Verify - `app/services/scrapers/domclick.py` не тронут; providers/__init__.py, pyproject/lock не тронуты (без конфликта с параллельными cian/yandex) - ruff/mypy clean; старые `test_domclick_sweep` 9 passed
lekss361 added 1 commit 2026-07-02 16:08:03 +00:00
feat(scraper-kit): copy domclick provider with protocol injection, strangler (#2133 domclick)
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
861467e589
lekss361 merged commit b7abaeb569 into main 2026-07-02 16:08:10 +00:00
lekss361 deleted branch feat/scraper-kit-provider-domclick 2026-07-02 16:08:11 +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#2156
No description provided.