feat(scraper-kit): copy avito providers with protocol injection, strangler (#2133 avito) #2155

Merged
lekss361 merged 1 commit from feat/scraper-kit-provider-avito into main 2026-07-02 15:58:01 +00:00
Owner

Часть #2133 (Epic #2126, шаг D — avito). Strangler-copy — старые app/services/scrapers/avito*.py НЕ тронуты, боевой avito на них, деплой инертен. Консолидация дублей = шаг E.

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

  • serp.py ← avito.py (SERP ядро), detail.py, houses.py, imv.py, shared.py (RUS_MONTHS/_unix_to_date)
  • scraper_kit/geo.py — чистые bbox-хелперы (из geocoder)

Развязка от app.* (grep пусто, тест-guard)

  • settings → инжект ScraperConfig Protocol (AvitoScraper(config, *, delay_provider=None))
  • get_scraper_delay → инжект delay_provider
  • is_within_ekb_bbox_widescraper_kit.geo
  • match_or_create_house → инжект HouseMatcher в save_house_catalog_enrichment(..., matcher)
  • внутр. импорты → scraper_kit.*

Deps

  • curl-cffi>=0.7.0 добавлен в scraper-kit pyproject (единственный новый; уже был в lock → 0 конфликтов). Для cian/yandex/domclick после — deps устаканены.

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

Старый парсер ≡ новый на общих фикстурах: SERP _parse_html (model_dump() идентичен, ekb_only=False/True), _extract_total_count, sortTimeStamp/_unix_to_date, detail parse_detail_html (asdict идентичен) + no-app-imports guard.

Verify

  • боевые app/services/scrapers/avito* не тронуты (git status пусто)
  • ruff clean; import smoke OK; регрессия 57 passed
Часть #2133 (Epic #2126, шаг D — avito). **Strangler-copy** — старые `app/services/scrapers/avito*.py` НЕ тронуты, боевой avito на них, деплой инертен. Консолидация дублей = шаг E. ## Скопировано в `scraper_kit/providers/avito/` - `serp.py` ← avito.py (SERP ядро), `detail.py`, `houses.py`, `imv.py`, `shared.py` (RUS_MONTHS/`_unix_to_date`) - `scraper_kit/geo.py` — чистые bbox-хелперы (из geocoder) ## Развязка от app.* (grep пусто, тест-guard) - `settings` → инжект `ScraperConfig` Protocol (`AvitoScraper(config, *, delay_provider=None)`) - `get_scraper_delay` → инжект `delay_provider` - `is_within_ekb_bbox_wide` → `scraper_kit.geo` - `match_or_create_house` → инжект `HouseMatcher` в `save_house_catalog_enrichment(..., matcher)` - внутр. импорты → `scraper_kit.*` ## Deps - `curl-cffi>=0.7.0` добавлен в scraper-kit pyproject (единственный новый; уже был в lock → 0 конфликтов). Для cian/yandex/domclick после — deps устаканены. ## Golden-parity ✅ (9 тестов) Старый парсер ≡ новый на общих фикстурах: SERP `_parse_html` (`model_dump()` идентичен, ekb_only=False/True), `_extract_total_count`, sortTimeStamp/`_unix_to_date`, detail `parse_detail_html` (`asdict` идентичен) + no-app-imports guard. ## Verify - боевые `app/services/scrapers/avito*` не тронуты (git status пусто) - ruff clean; import smoke OK; регрессия 57 passed
lekss361 added 1 commit 2026-07-02 15:57:51 +00:00
feat(scraper-kit): copy avito providers with protocol injection, strangler (#2133 avito)
All checks were successful
CI / changes (pull_request) Successful in 8s
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
b72503cc8c
lekss361 merged commit df5e9003df into main 2026-07-02 15:58:01 +00:00
lekss361 deleted branch feat/scraper-kit-provider-avito 2026-07-02 15:58:02 +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#2155
No description provided.