feat(tradein/estimator): switch core valuation call sites to scraper_kit (#2337) #2348
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#2348
Loading…
Add table
Reference in a new issue
No description provided.
Delete branch "feat/tradein-estimator-kit-switch"
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?
Summary
Финальный шаг Group E (scraper_kit migration epic #2277) — переключение импортов
estimator.py(core valuation) с legacyapp.services.scrapers.*наscraper_kit.providers.*. Самая рискованная часть эпика (регрессия = неверная оценка стоимости клиенту), последней в последовательности A→B→C→D→E1→E2→E3→E4.estimator.py: все 3 call sites (avito IMV ×2, cian valuation, yandex valuation) переключены на kit-эквиваленты, включая все 7 имён avito_imv (в т.ч. классы исключенийIMVAddressNotFoundError/IMVAuthError/IMVTransientError— иначеexceptна legacy-классах тихо перестал бы ловить kit-исключения из-за разной идентичности классов).config=RealScraperConfig()на всех 3 call sites +delay_provider=get_scraper_delayдля yandex — иначе kit молча отключает proxy/throttle-поведение, которое legacy включал всегда безусловно.logger.warning→logger.exception— Sentry вapp/main.py/app/scheduler_main.pyнастроенevent_level=ERROR, WARNING в GlitchTip как event не долетал (только breadcrumb), т.е. будущая config-регрессия была бы невидима в проде.house_imv_backfill.py::_process_one_house— тот же import switch + config=;RealScraperConfigимпорт сделан function-local (lazy) — module-level создавал бы circular import черезscraper_adapters.py, который на своём module-level импортирует функции изhouse_imv_backfill.py.test_backfill_wave2.py,test_estimator_{imv,cian,yandex}_integration.py) + regression-guard asserts наconfig=/delay_provider=kwargs.cian_history_backfill.pyумышленно НЕ тронут (4-й call siteestimate_via_cian_valuation, deferred на отдельный issue) — legacycian_valuation.pyостаётся живым по этой причине; legacyavito_imv.py/yandex_valuation.pyстановятся orphaned (0 importers), test-only.Wiring подтверждён 3 смерженными golden-parity PR: #2344 (E1/avito_imv), #2342 (E2/cian_valuation), #2345 (E3/yandex_valuation) — diff=0 legacy vs kit на реальных фикстурах.
Review
deep-code-reviewer— ✅ APPROVE (все 7 заявленных фактов проверены независимо: Sentry event_level семантика, circular-import fix, exception-identity necessity, cian_history_backfill deferral safety — все подтверждены как true и обоснованные, blocking issues не найдены).Test plan
test_search_api.py::test_search_cache_hit(401 vs 200, auth-фикстура) воспроизведён идентично на родительском коммите (до этого диффа) — подтверждено pre-existing, не связаноruff check/ruff format— cleanCloses #2337
Closes #2308