refactor(tradein/admin): debug sweep endpoints на kit orchestration (#2397 slice A) #2400

Merged
lekss361 merged 2 commits from refactor/tradein-admin-debug-sweeps-to-kit into main 2026-07-04 09:16:58 +00:00
Owner

Summary

Umbrella #2397 slice A (эпик #2277 decommission legacy orchestration). Мигрирует 5 admin debug «запустить sweep вручную» эндпоинтов с legacy app.services.scrape_pipeline run_* на kit scraper_kit.orchestration.pipeline run_*. Отвязывает admin.py от legacy-оркестрации.

  • 5 эндпоинтов (avito/cian city-sweep, cian/yandex full-load, yandex city-sweep) переключены с добавлением DI: config=RealScraperConfig(), matcher=RealMatcherAdapter() (все 5), enrichment=RealEnrichmentJobs() (avito-city/yandex-full/yandex-city — kit-сигнатура требует; cian НЕ принимает), proxy_provider=_kit_proxy_provider() (существующий helper). Паттерн зеркалит scheduler_main._run_kit_scheduler + Group A #2305.
  • scrape_pipeline.py НЕ тронут (остальные импортёры — Part C/E).
  • Тест-фикс (2-й коммит): 4 endpoint-теста перенацелены с мёртвого app.services.scrape_pipeline.run_* на app.api.v1.admin.run_* + добавлены DI-guard assertions (config/matcher/proxy_provider/enrichment) — иначе мок не перехватывал и BackgroundTask гнал реальный sweep в сеть.

Review

deep-code-reviewer — прод-код верифицирован kwarg-by-kwarg + runtime-харнесс (DI на всех 5 корректна, config-footgun не материализовался, full param parity, proxy/shutdown семантика сохранена). Единственный блокер (4 теста с мёртвым mock-таргетом → hang/red CI) исправлен по его точной спецификации + закрыт coverage-gap (тесты теперь реально проверяют вызов kit с DI).

Test plan

  • 4 бывших-проблемных теста + смежные: 83 passed (теперь реально exercise'ят мок)
  • Full suite: 3276 passed, 6 skipped, 1 pre-existing unrelated fail (#2208)
  • ruff check/format clean (pinned 0.7.4); admin.py — 0 импортов scrape_pipeline

Refs #2397, #2277

## Summary Umbrella #2397 slice A (эпик #2277 decommission legacy orchestration). Мигрирует 5 admin debug «запустить sweep вручную» эндпоинтов с legacy `app.services.scrape_pipeline` `run_*` на kit `scraper_kit.orchestration.pipeline` `run_*`. Отвязывает admin.py от legacy-оркестрации. - 5 эндпоинтов (avito/cian city-sweep, cian/yandex full-load, yandex city-sweep) переключены с добавлением DI: `config=RealScraperConfig()`, `matcher=RealMatcherAdapter()` (все 5), `enrichment=RealEnrichmentJobs()` (avito-city/yandex-full/yandex-city — kit-сигнатура требует; cian НЕ принимает), `proxy_provider=_kit_proxy_provider()` (существующий helper). Паттерн зеркалит `scheduler_main._run_kit_scheduler` + Group A #2305. - `scrape_pipeline.py` НЕ тронут (остальные импортёры — Part C/E). - Тест-фикс (2-й коммит): 4 endpoint-теста перенацелены с мёртвого `app.services.scrape_pipeline.run_*` на `app.api.v1.admin.run_*` + добавлены DI-guard assertions (config/matcher/proxy_provider/enrichment) — иначе мок не перехватывал и BackgroundTask гнал реальный sweep в сеть. ## Review `deep-code-reviewer` — прод-код ✅ верифицирован kwarg-by-kwarg + runtime-харнесс (DI на всех 5 корректна, config-footgun не материализовался, full param parity, proxy/shutdown семантика сохранена). Единственный блокер (4 теста с мёртвым mock-таргетом → hang/red CI) исправлен по его точной спецификации + закрыт coverage-gap (тесты теперь реально проверяют вызов kit с DI). ## Test plan - [x] 4 бывших-проблемных теста + смежные: 83 passed (теперь реально exercise'ят мок) - [x] Full suite: 3276 passed, 6 skipped, 1 pre-existing unrelated fail (#2208) - [x] `ruff check`/`format` clean (pinned 0.7.4); admin.py — 0 импортов scrape_pipeline Refs #2397, #2277
lekss361 added 2 commits 2026-07-04 09:14:42 +00:00
Мигрирует 5 admin debug-роутов с legacy app.services.scrape_pipeline на
scraper_kit.orchestration.pipeline (эпик #2277 decommission, umbrella #2397):

- POST /scrape/avito-city-sweep -> run_avito_city_sweep
- POST /scrape/cian-city-sweep -> run_cian_city_sweep
- POST /scrape/cian-full-load -> run_cian_full_load
- POST /scrape/yandex-city-sweep -> run_yandex_city_sweep
- POST /scrape/yandex-full-load -> run_yandex_full_load

DI-паттерн зеркалит app.scheduler_main._run_kit_scheduler /
scraper_kit.orchestration.scheduler._job_* (уже используется в этом же файле
для Group A #2305 debug-роутов): config=RealScraperConfig(),
matcher=RealMatcherAdapter(), proxy_provider=_kit_proxy_provider() для всех
пяти + enrichment=RealEnrichmentJobs() там, где kit-сигнатура его требует
(avito_city_sweep, yandex_city_sweep, yandex_full_load — cian-варианты
enrichment не принимают). shutdown_requested не прокидывается — у admin
BackgroundTasks нет SIGTERM-drain семантики, дефолт kit (lambda: False)
эквивалентен прежнему поведению.

Разблокирует финальное удаление зависимости admin.py от scrape_pipeline.py.
Production-scheduler (app/services/scheduler.py, USE_KIT_SCHEDULER=False
ship-dark) остаётся на legacy — это отдельный, более крупный шаг миграции
SERP-оркестрации.
test(tradein/admin): перенацелить patch-таргеты на kit + DI-guard asserts (#2397 slice A)
All checks were successful
CI Trade-In / changes (pull_request) Successful in 7s
CI / changes (pull_request) Successful in 7s
CI Trade-In / frontend-checks (pull_request) Has been skipped
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 Trade-In / backend-tests (pull_request) Successful in 1m37s
d0b011d388
После миграции admin.py на scraper_kit.orchestration.pipeline (предыдущий
коммит) 4 endpoint-теста продолжали патчить устаревший
app.services.scrape_pipeline.run_* — имя, на которое admin.py больше не
ссылается. Мок не перехватывал вызов → FastAPI BackgroundTask реально
запускал kit-sweep (сетевой I/O), что локально (без :5432) тихо падало
на подключении к БД и глоталось except'ом, а на CI грозило зависанием/таймаутом.

Перенацелены patch-таргеты на app.api.v1.admin.run_* (namespace, куда
забинжен kit-импорт):
- test_city_sweep.py::test_start_endpoint_ok -> run_avito_city_sweep
- test_cian_city_sweep.py::test_cian_start_endpoint_ok -> run_cian_city_sweep
- test_yandex_city_sweep.py::test_yandex_start_endpoint_ok -> run_yandex_city_sweep
- test_sweep_imv_phase.py::test_sweep_endpoint_passes_enrich_imv -> run_avito_city_sweep

Добавлены DI-guard assertions (закрывают coverage-gap: раньше проверялся
только HTTP 200, не факт вызова kit с правильным DI) — mock_sweep.call_args.kwargs
проверяется на RealScraperConfig/RealMatcherAdapter/RealEnrichmentJobs (там, где
kit-сигнатура их требует) + наличие proxy_provider.
lekss361 merged commit 5d51eae705 into main 2026-07-04 09:16:58 +00:00
lekss361 deleted branch refactor/tradein-admin-debug-sweeps-to-kit 2026-07-04 09:16:58 +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#2400
No description provided.