chore(tradein/scrapers): удалить весь legacy scrapers/ каталог — final E (#2397, #2277) #2419

Merged
lekss361 merged 1 commit from chore/tradein-finalE-delete-scrapers-catalog into main 2026-07-04 13:11:14 +00:00
Owner

Summary

Umbrella #2397 final E — завершает декоммишн. Удаляет весь legacy каталог app/services/scrapers/ (16 файлов, ~7100 строк) + осиротевшие dev-скрипты. Разблокировано Part D (D1-D5 merged, #2410/#2411/#2415/#2414/#2412) — на текущем main 0 external runtime-импортёров любого app.services.scrapers.* в app/ (верифицировано grep'ом перед стартом). Прод 100% на scraper_kit.providers.*. Precedent: #2394, #2405 (E1), #2407 (E2).

Diff: +221 −19861 (81 файл). Base merge-base = 8030f8ec (D5); свежий main #2417 (a0c609ca) не пересекается по файлам.

Удалено

  • 16 catalog-файлов: scrapers/{__init__,avito,avito_detail,avito_exceptions,avito_shared,base,browser_fetcher,cian_newbuilding,cian_state_parser,cian_valuation,house_type_normalizer,price_brackets,repair_state_normalizer,snapshot_writer,yandex_helpers,yandex_newbuilding}.py.
  • 7 orphaned dev-скриптов (импортировали удалённые/уже-удалённые модули, 0 CI/Makefile-ссылок): scripts/{backfill_cian_zhk_url,backfill-house-imv,probe-imv-by-address,sweep-yandex-valuation-ekb,avito-playwright-sweep,probe-avito-1anchor,probe-parser-region-filter}.py.

Тест-хирургия (grep-driven, паттерн E1/E2)

  • DELETE (24 файла) — direct legacy-only unit-тесты (avito detail/anti-bot/reconnect/warmup/parse, browser_fetcher, price_brackets, base/save_listings, normalizers, cian/yandex newbuilding/valuation), 0 kit cross-cutting.
  • RETARGET на kit (13 файлов) — сохранены реальные assertions, импорты → scraper_kit.*: test_781_quality_gate.py (P0 регрессии #755/#753/#773/#754/#740), test_avito_newbuilding_sweep.py, test_pipeline_browser_routing.py, test_scraper_proxy.py, test_extval_house_id_write_path.py, test_snapshot_writer.py, test_estimator_cian_integration.py, test_geo_precision.py, test_yandex_price_history.py, test_yandex_scrapers_delay_wiring.py, test_avito_unix_date_tz_consistency.py, test_cian_resolve_zhk_url.py, test_scraped_at_bump_2206.py.
  • Golden-parity DELETE (legacy-эталон удалён → parity un-keepable, → follow-up ticket, НЕ hollow): test_scraper_kit_{avito,base,bisection,cian,yandex}_golden_parity.py, test_scraper_kit_pricehistory_session_parity.py, tests/scrapers/{test_avito_detail_kit_parity,test_admin_domclick_ingest_kit_parity}.py, + case test_scraper_kit_group_c_backfill_kit_parity.py::test_avito_fetch_detail_via_browser_fetcher_parity.

Non-trivial fixes при retarget (для review)

  • Kit AvitoScraper.__init__ требует mandatory configRealScraperConfig() на каждом retargeted call-site.
  • Kit save_listings требует инжект matcher: HouseMatcher + region_code (нет прямого патча match_or_create_house) → MagicMock() matcher (паттерн test_scraped_at_bump_2206._kit_matcher).
  • Kit cian_newbuilding AsyncSession теперь TYPE_CHECKING-only → patch.object(...AsyncSession) заменён на hasattr-негатив.
  • Kit avito/detail._build_detail_session делегирует в _base → патч-таргеты исправлены (один неверный таргет молча ушёл бы в реальную сеть — пойман до push).

Test plan

  • Full suite: 2255 passed, 6 skipped, 1 failed (#2208 flake, unrelated). Падение с 2811 ожидаемо (удалены legacy-only + parity, как #2394/E1/E2).
  • Import-sanity: import app.main; import app.scheduler_main → OK.
  • ruff check clean на всех тронутых.
  • Acceptance: grep -rln "app.services.scrapers" app/ scripts/пусто. В packages/ только strangler-mapping докстринги (не импорты).

Follow-up

Golden-parity потеряли legacy-оракул → отдельный ticket (kit standalone-покрытие, мирроря #2408): avito/base/bisection/cian/yandex golden-parity + pricehistory_session + avito_detail_kit_parity + admin_domclick_ingest_kit_parity + group_c avito-case.

Refs #2397, #2277

## Summary Umbrella #2397 **final E** — завершает декоммишн. Удаляет **весь** legacy каталог `app/services/scrapers/` (16 файлов, ~7100 строк) + осиротевшие dev-скрипты. Разблокировано Part D (D1-D5 merged, #2410/#2411/#2415/#2414/#2412) — на текущем main **0 external runtime-импортёров** любого `app.services.scrapers.*` в `app/` (верифицировано grep'ом перед стартом). Прод 100% на `scraper_kit.providers.*`. Precedent: #2394, #2405 (E1), #2407 (E2). Diff: **+221 −19861** (81 файл). Base merge-base = `8030f8ec` (D5); свежий main #2417 (`a0c609ca`) не пересекается по файлам. ## Удалено - **16 catalog-файлов**: `scrapers/{__init__,avito,avito_detail,avito_exceptions,avito_shared,base,browser_fetcher,cian_newbuilding,cian_state_parser,cian_valuation,house_type_normalizer,price_brackets,repair_state_normalizer,snapshot_writer,yandex_helpers,yandex_newbuilding}.py`. - **7 orphaned dev-скриптов** (импортировали удалённые/уже-удалённые модули, 0 CI/Makefile-ссылок): `scripts/{backfill_cian_zhk_url,backfill-house-imv,probe-imv-by-address,sweep-yandex-valuation-ekb,avito-playwright-sweep,probe-avito-1anchor,probe-parser-region-filter}.py`. ## Тест-хирургия (grep-driven, паттерн E1/E2) - **DELETE (24 файла)** — direct legacy-only unit-тесты (avito detail/anti-bot/reconnect/warmup/parse, browser_fetcher, price_brackets, base/save_listings, normalizers, cian/yandex newbuilding/valuation), 0 kit cross-cutting. - **RETARGET на kit (13 файлов)** — сохранены реальные assertions, импорты → `scraper_kit.*`: `test_781_quality_gate.py` (P0 регрессии #755/#753/#773/#754/#740), `test_avito_newbuilding_sweep.py`, `test_pipeline_browser_routing.py`, `test_scraper_proxy.py`, `test_extval_house_id_write_path.py`, `test_snapshot_writer.py`, `test_estimator_cian_integration.py`, `test_geo_precision.py`, `test_yandex_price_history.py`, `test_yandex_scrapers_delay_wiring.py`, `test_avito_unix_date_tz_consistency.py`, `test_cian_resolve_zhk_url.py`, `test_scraped_at_bump_2206.py`. - **Golden-parity DELETE** (legacy-эталон удалён → parity un-keepable, → follow-up ticket, НЕ hollow): `test_scraper_kit_{avito,base,bisection,cian,yandex}_golden_parity.py`, `test_scraper_kit_pricehistory_session_parity.py`, `tests/scrapers/{test_avito_detail_kit_parity,test_admin_domclick_ingest_kit_parity}.py`, + case `test_scraper_kit_group_c_backfill_kit_parity.py::test_avito_fetch_detail_via_browser_fetcher_parity`. ## Non-trivial fixes при retarget (для review) - Kit `AvitoScraper.__init__` требует mandatory `config` → `RealScraperConfig()` на каждом retargeted call-site. - Kit `save_listings` требует инжект `matcher: HouseMatcher` + `region_code` (нет прямого патча `match_or_create_house`) → `MagicMock()` matcher (паттерн `test_scraped_at_bump_2206._kit_matcher`). - Kit `cian_newbuilding` `AsyncSession` теперь TYPE_CHECKING-only → `patch.object(...AsyncSession)` заменён на `hasattr`-негатив. - Kit `avito/detail._build_detail_session` делегирует в `_base` → патч-таргеты исправлены (один неверный таргет молча ушёл бы в реальную сеть — пойман до push). ## Test plan - [x] Full suite: **2255 passed, 6 skipped, 1 failed** (#2208 flake, unrelated). Падение с 2811 ожидаемо (удалены legacy-only + parity, как #2394/E1/E2). - [x] Import-sanity: `import app.main; import app.scheduler_main` → OK. - [x] `ruff check` clean на всех тронутых. - [x] Acceptance: `grep -rln "app.services.scrapers" app/ scripts/` → **пусто**. В `packages/` только strangler-mapping докстринги (не импорты). ## Follow-up Golden-parity потеряли legacy-оракул → отдельный ticket (kit standalone-покрытие, мирроря #2408): avito/base/bisection/cian/yandex golden-parity + pricehistory_session + avito_detail_kit_parity + admin_domclick_ingest_kit_parity + group_c avito-case. Refs #2397, #2277
lekss361 added 1 commit 2026-07-04 13:00:17 +00:00
chore(tradein/scrapers): удалить весь legacy scrapers/ каталог — final E (#2397, #2277)
All checks were successful
CI Trade-In / changes (pull_request) Successful in 9s
CI / changes (pull_request) Successful in 9s
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 47s
27bbd579c3
Удаляет весь `app/services/scrapers/` (16 файлов, ~7100 строк) — Part D (D1-D5)
убрал всех внешних вызывающих, 0 runtime importers подтверждено grep'ом на main.

Заодно:
- удалены 7 осиротевших локальных probe/sweep-скриптов (tradein-mvp/scripts/),
  импортировавших уже-удалённые или удаляемые сейчас legacy-модули
- тест-хирургия по 65+ файлам: DELETE прямых legacy-юнит-тестов, RETARGET
  тестов, тестирующих ещё живую бизнес-логику (переключены на scraper_kit.*
  эквиваленты, включая quality-gate #781/#753/#754/#755/#773/#740), partial-delete
  golden-parity тестов, потерявших legacy-оракл
- kit save_listings/AvitoScraper/etc. требуют инжектируемые matcher/config —
  ретаргетированные тесты обновлены под новую сигнатуру (RealScraperConfig(),
  MagicMock HouseMatcher, region_code=66)

Полный pytest suite зелёный (2255 passed, 6 skipped) кроме известного флейка
#2208 (test_search_cache_hit, не связан со scrapers).
lekss361 merged commit 9c6afcc876 into main 2026-07-04 13:11:14 +00:00
lekss361 deleted branch chore/tradein-finalE-delete-scrapers-catalog 2026-07-04 13:11:15 +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#2419
No description provided.