feat(tradein/scraper-kit): migrate cian/yandex price-history & session to kit (#2306) #2324
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#2324
Loading…
Add table
Reference in a new issue
No description provided.
Delete branch "feat/tradein-migrate-price-history-kit"
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?
Closes #2306 (Group B эпика #2277 — scraper_kit migration).
Что сделано
Три файла переведены на импорт из
scraper_kit.*вместо legacyapp/services/scrapers/*:cian_price_history.py—fetch_detail/save_detail_enrichment→scraper_kit.providers.cian.detailcian_session.py—extract_state→scraper_kit.cian_state_parser(byte-identical, подтверждено diff'ом)yandex_price_history.py—ScrapedLot→scraper_kit.base(byte-identical field/method surface, duck-typing безisinstance)Публичный API всех трёх файлов не менялся — вызывающим (
admin.py,product_handlers.py,scheduler.py,cian_valuation.py) правки не понадобились (подтверждено grep'ом всех importers).Важная находка — proxy footgun (#806-related regression risk)
Kit-версия
fetch_detailчитаетcian_proxy_urlтолько если передан явныйconfig=(в отличие от legacy, который всегда читает
settings.cian_proxy_urlсам). Без этогоbackfill тихо потерял бы прокси. Фикс:
config=RealScraperConfig()на call site вcian_price_history.py. Верифицировано ревьюером (трассировка черезcurl_proxy_url()→RealScraperConfig.cian_proxy_url→ идентичное поведение legacy).Hardening после review
Ревьюер нашёл: ни parity-тест, ни существующие
test_backfill_wave2.pyтесты не ловили бырегрессию, если
config=RealScraperConfig()случайно уберут из call site. Усилил все 3 тестав
test_backfill_wave2.py—isinstance(call_kwargs["config"], RealScraperConfig). Доказановручную: временно убрал fix → тесты упали → вернул → тесты прошли (реальная regression-catch
proof, не просто добавленный assert).
Проверено
tests/test_backfill_wave2.py+tests/test_scraper_kit_pricehistory_session_parity.py—32/32 passed
(
test_search_cache_hit, подтверждено — этот PR не трогает ту область кода)