feat(scraper-kit): copy core layer (base/save_listings/transport) with protocol injection, strangler (#2132) #2153

Merged
lekss361 merged 2 commits from feat/scraper-kit-core-copy into main 2026-07-02 15:43:16 +00:00
Owner

Закрывает #2132 (Epic #2126, шаг C). Strangler-copy — новый код в пакете, старые app/services/scrapers/* НЕ тронуты, боевые скрапперы остаются на них. Деплой инертен (новый код не в рантайм-графе). Переключение боевых скрапперов + удаление дублей = отдельный поздний rewire-шаг.

Что скопировано в scraper_kit/

  • base.pyScrapedLot, BaseScraper, save_listings, _link_listing_to_house, snapshot-hook. Развязка от app.*:
    • save_listings(db, lots, *, matcher: HouseMatcher, region_code: int, ...) — matcher-инжект вместо прямого import matching; region_code параметром (хардкод 66 → :region_code)
  • browser_fetcher.py (endpoint инжектится), + механическая копия snapshot_writer/price_brackets/repair_state_normalizer/cian_state_parser/yandex_helpers/avito_exceptions/domclick_exceptions

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

Старый app.services.scrapers.base vs новый scraper_kit.base на одном входе через recording-mock — идентично:

  • полная последовательность db.execute(sql, params) байт-в-байт (INSERT/prior-SELECT/FK-UPDATE/reconcile)
  • region_code-инжекция (, 66,:region_code@66), matcher kwargs, reconcile-ветка (dedup-коллизия), (inserted,updated) counts, dedup/card/price хеши
  • фикстуры: avito без адреса, cian full, студия rooms=0, yandex source_id=None, drift-коллизия

Verify

  • старые app/services/scrapers/* не тронуты (git status их не показывает)
  • grep "from app" в scraper_kit/ пусто (тест-guard стережёт)
  • ruff/mypy clean; старые тесты 64 passed

⚠️ Порядок мержа

Ветка застекана поверх B (#2151) т.к. worktree-main был stale. B уже в main (squash) — проверяю что B-файлы не всплывут дублями.

Закрывает #2132 (Epic #2126, шаг C). **Strangler-copy** — новый код в пакете, старые `app/services/scrapers/*` НЕ тронуты, боевые скрапперы остаются на них. Деплой инертен (новый код не в рантайм-графе). Переключение боевых скрапперов + удаление дублей = отдельный поздний rewire-шаг. ## Что скопировано в `scraper_kit/` - **`base.py`** — `ScrapedLot`, `BaseScraper`, `save_listings`, `_link_listing_to_house`, snapshot-hook. Развязка от `app.*`: - `save_listings(db, lots, *, matcher: HouseMatcher, region_code: int, ...)` — matcher-инжект вместо прямого import matching; `region_code` параметром (хардкод 66 → `:region_code`) - `browser_fetcher.py` (endpoint инжектится), + механическая копия `snapshot_writer`/`price_brackets`/`repair_state_normalizer`/`cian_state_parser`/`yandex_helpers`/`avito_exceptions`/`domclick_exceptions` ## Golden-parity ✅ (8 тестов) Старый `app.services.scrapers.base` vs новый `scraper_kit.base` на одном входе через recording-mock — идентично: - полная последовательность `db.execute(sql, params)` байт-в-байт (INSERT/prior-SELECT/FK-UPDATE/reconcile) - region_code-инжекция (`, 66,` ≡ `:region_code`@66), matcher kwargs, reconcile-ветка (dedup-коллизия), (inserted,updated) counts, dedup/card/price хеши - фикстуры: avito без адреса, cian full, студия rooms=0, yandex source_id=None, drift-коллизия ## Verify - старые `app/services/scrapers/*` не тронуты (git status их не показывает) - `grep "from app"` в scraper_kit/ пусто (тест-guard стережёт) - ruff/mypy clean; старые тесты 64 passed ## ⚠️ Порядок мержа Ветка застекана поверх B (#2151) т.к. worktree-main был stale. B уже в main (squash) — проверяю что B-файлы не всплывут дублями.
lekss361 added 2 commits 2026-07-02 15:42:23 +00:00
feat(scraper-kit): protocol boundaries (matcher/config/session/jobs) + backend adapters (#2131)
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
0b99882034
feat(scraper-kit): copy core layer (base/save_listings/transport) with protocol injection, strangler — old untouched (#2132)
All checks were successful
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 / changes (pull_request) Successful in 7s
1fdc459c24
lekss361 merged commit 5c17d21f6c into main 2026-07-02 15:43:16 +00:00
lekss361 deleted branch feat/scraper-kit-core-copy 2026-07-02 15:43:16 +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#2153
No description provided.