feat(scraper-kit): protocol boundaries (matcher/config/session/jobs) + backend adapters (#2131) #2151
No reviewers
Labels
No labels
admin
analytics
auth
automation
bug
business
chore
ci
compliance
data
data-moat
docs
duplicate
dx
enhancement
Fable 5 ревью
feedback/max
generative
GG-форсайт
needs-discussion
needs-human
observability
pause-bots
performance
priority/p0
priority/p1
priority/p2
priority/p3
scope/backend
scope/db
scope/devops
scope/frontend
scope/qa
scrapers
security
site-finder
stage/1
stage/2
status/blocked
status/done
status/needs-analysis
status/needs-fix
status/qa
status/ready
status/review
status/wip
tech-debt
tradein
ux
week ревью 1
wontfix
вторичка
ИРД
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: lekss361/gendesign#2151
Loading…
Add table
Reference in a new issue
No description provided.
Delete branch "feat/scraper-kit-contracts"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Закрывает #2131 (Epic #2126, шаг B). Подготовка к переносу кода (C-G) — только новые файлы, код скрапперов не двигается, адаптеры пока не используются в рантайме (инертно).
Что
packages/scraper-kit/src/scraper_kit/contracts.py— 4 Protocol'а (HouseMatcher,ScraperConfig,SessionFactory,EnrichmentJobs), БЕЗ импортовapp.*(verified)tradein-mvp/backend/app/services/scraper_adapters.py— 4 адаптера надapp.services.matching/geocoder/cian_session/config/dbtradein-mvp/backend/tests/test_scraper_adapters_contracts.py— 5 тестов (static_checkдля mypy + runtimeisinstanceпротив@runtime_checkable+ guard «contracts не тянет app»)Зафиксированные сигнатуры (для шага C)
HouseMatcher.match_or_create_house(db, ext_source, ext_id, address?, lat?, lon?, *, year_built?, building_cadastral_number?, cadastral_number?, source_url?) -> tuple[int, float, str](house_id, confidence, method)upsert_listing_source(db, *, listing_id, ext_source, ext_id, method, confidence, price_rub?, area_m2?, floor?, rooms_count?, source_url?, source_data?) -> NoneScraperConfig— 11 полей (scraper_fetch_mode, browser_http_endpoint, *_proxy_url, delays, glitchtip_dsn)SessionFactory.__call__() -> Session;EnrichmentJobs(imv_backfill async / dedup_merge sync / yandex_address_backfill async)Доменные результат-типы в contracts оставлены
Any(не тянуть app.*), адаптер аннотирует точно черезTYPE_CHECKING.Verify
from scraper_kit.contracts import ...OK;import app.services.scraper_adaptersOKpytest tests/test_scraper_adapters_contracts.py→ 5 passed