refactor(tradein/scrapers): удалить 6 осиротевших legacy scraper-модулей + тест-хирургия (#2397 Part E2) #2407
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#2407
Loading…
Add table
Reference in a new issue
No description provided.
Delete branch "chore/tradein-partE2-delete-orphaned-scrapers"
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
Umbrella #2397 Part E2 (эпик #2277). Продолжение E1 (#2405, merged — удалил
scrape_pipeline.py, последнего non-test импортёра этих модулей). Удаляет 6 legacy scraper-провайдеров, ставших 0-runtime-importer (прод-консюмеры уже на kit:admin.py/cian_history_backfill.py→scraper_kit.providers.cian.detail,admin.py:61→ kitCianScraper, и т.д.). Независимо подтверждено adversarial per-module аудитом + E1 deep-review.Удалено:
app/services/scrapers/):cian.py,cian_detail.py,yandex_realty.py,domclick.py,domclick_exceptions.py,avito_houses.py.scripts/local-sweep-ekb{,-cian,-yandex}.py.test_cian_detail.py,test_cian_serp_scraper.py,scrapers/test_cian_exhaustive.py,test_yandex_realty_serp.py,scrapers/test_domclick.py,test_avito_houses_dedup.py,test_avito_houses_parse.py,test_houses_rating_filter_entries_1789.py,test_scraper_kit_domclick_golden_parity.py,scrapers/test_admin_{avito,cian,yandex}_kit_parity.py.НЕ удалено (остаётся LIVE — Part-D tasks импортируют):
avito.py,avito_detail.py,avito_exceptions.py,avito_shared.py,base.py,browser_fetcher.py,cian_state_parser.py,cian_newbuilding.py,cian_valuation.py,house_type_normalizer.py,price_brackets.py,repair_state_normalizer.py,snapshot_writer.py,yandex_helpers.py,yandex_newbuilding.py. Директорияscrapers/+__init__.pyсохранены (полное удаление каталога — «final E», после Part D).⚠️ Отклонения от наивного плана (важно для review)
Grep-верификация вскрыла mixed live+legacy файлы, где полное удаление уронило бы coverage ещё-live модулей → CONVERT (вырезаны только legacy-ветки), не delete:
test_scraper_kit_bisection_parity.py— сохранён avito-bisection parity (был в одних parametrize со cian/domclick/yandex).test_scraper_kit_group_c_backfill_kit_parity.py— убран толькоtest_cian_fetch_detail_*; avito/house_imv_backfill/cian_history_backfill/ekb_geoportal parity сохранён.test_scraper_kit_pricehistory_session_parity.py— убраны 2 fetch_detail-теста;cian_state_parser/base.ScrapedLot(live) сохранены.test_yandex_scrapers_delay_wiring.py(yandex_newbuilding live),test_scraper_proxy.py(redundant сtest_kit_serp_proxy_pool.py).scrapers/test_avito_unix_date_tz_consistency.py— не был в наивном списке, ловился только по bare-name importfrom app.services.scrapers import avito, avito_houses, avito_shared→ ретаргет наscraper_kit.providers.avito.houses(иначе ImportError на коллекции).RETARGET на kit (символ жив, источник сменён):
test_domclick_sweep.py(_map_item),test_yandex_city_sweep.py(DEFAULT_PRICE_RANGES/ROOM_PATH),test_pipeline_browser_routing.py(fetch_house_catalog+KitAvitoBlockedError),test_snapshot_writer.py+test_backfill_wave2.py(DetailEnrichment/save_detail_enrichment).Coverage-loss (осознанно, как в E1 — для deep-review)
Удаление legacy-эталонов сняло offline-parity-проверку kit-парсинга:
parse_houses_state/_parse_house_page(рейтинг из reviews.filterEntries #1789) и SERP_entity_to_lot/_format_address/_parse_serp_html(cian/yandex). Проверить в review, что у kit есть собственное standalone-покрытие этих парсеров; если нет — follow-up (аналог #2406).Test plan
tradein-mvp/backend, venv py3.12, tradein pg :5432): 2811 passed, 6 skipped, 1 failed — единственный fail = известный flaketest_search_cache_hit(#2208), не регрессия. Падение числа тестов ожидаемо.import app.main; import app.scheduler_main→ OK.ruff checkclean на всех тронутых файлах.grep -rn -E "scrapers\.(cian|cian_detail|yandex_realty|domclick|domclick_exceptions|avito_houses)\b" app/ scripts/ packages/→ только strangler-докстринги / past-tense.Diff: +161 −13256 (36 файлов). Merge-base =
84716e61(E1 merge) = current main → merge чистый.Refs #2397, #2277
app.services.scrapers.{cian,cian_detail,yandex_realty,domclick,domclick_exceptions, avito_houses} имели 0 runtime-импортёров после E1 (scrape_pipeline.py удалён, #2405) — admin.py/cian_history_backfill.py уже на scraper_kit.providers.*. Удаление: - 6 модулей целиком (avito_houses.py, cian.py, cian_detail.py, domclick.py, domclick_exceptions.py, yandex_realty.py) - 3 осиротевших dev-sweep скрипта (local-sweep-ekb{,-cian,-yandex}.py) — эксклюзивно драйвили удалённые легаси-скраперы, kit-путь их заменяет Тесты (18 файлов DELETE — эксклюзивно тестировали удалённые модули или были чистым legacy-vs-kit parity, чей легаси-эталон исчез): test_cian_detail.py, test_cian_serp_scraper.py, tests/scrapers/test_cian_exhaustive.py, test_yandex_realty_serp.py, tests/scrapers/test_domclick.py, test_avito_houses_dedup.py, test_avito_houses_parse.py, test_houses_rating_filter_entries_1789.py, test_scraper_kit_domclick_golden_parity.py, tests/scrapers/test_admin_{avito,cian,yandex}_kit_parity.py. CONVERT (файл покрывает СМЕШАННЫЙ live+legacy набор — вырезаны только секции удалённых модулей, live-покрытие сохранено): - test_scraper_kit_cian_golden_parity.py — SERP/`_format_address`/detail (cian.py/cian_detail.py) убраны; extract_state (cian_state_parser, live)/ valuation (cian_valuation, live)/newbuilding (cian_newbuilding, live)/ no-app-imports guard — остались - test_scraper_kit_yandex_golden_parity.py — SERP `_entity_to_lot`/ `_parse_gate_json`/`_build_url` (yandex_realty) убраны; normalize_house_type (live)/newbuilding parse (yandex_newbuilding, live)/no-app-imports guard — остались - test_scraper_kit_bisection_parity.py — cian/domclick/yandex-ветки убраны; avito-ветка (live, единственная оставшаяся легаси-бисекция) — осталась полностью, включая full-seed-grid - test_scraper_kit_group_c_backfill_kit_parity.py — cian fetch_detail browser_fetcher parity-тест убран; avito/house_imv_backfill/ cian_history_backfill/ekb_geoportal тесты — остались - test_scraper_kit_pricehistory_session_parity.py — fetch_detail config-injection/proxy-wiring тесты (cian_detail) убраны; extract_state (cian_state_parser, live)/ScrapedLot (base, live) parity — остались - test_yandex_scrapers_delay_wiring.py — yandex_realty delay-тест убран (kit-эквивалент уже покрыт test_kit_serp_proxy_pool.py); yandex_newbuilding (live)/yandex_detail/yandex_valuation (kit) тесты — остались - test_scraper_proxy.py — yandex_realty BrowserFetcher-тест убран (redundant с test_kit_serp_proxy_pool.py::test_yandex_serp_no_pool_by_default) RETARGET на kit (символ живёт, только источник поменялся): - test_domclick_sweep.py — `_map_item` → scraper_kit.providers.domclick.serp - test_yandex_city_sweep.py — DEFAULT_PRICE_RANGES/ROOM_PATH → scraper_kit.providers.yandex.serp - test_pipeline_browser_routing.py — fetch_house_catalog → scraper_kit.providers.avito.houses (+ KitAvitoBlockedError для firewall-теста) - test_snapshot_writer.py — DetailEnrichment/save_detail_enrichment → scraper_kit.providers.cian.detail (byte-identical strangler-копия) - test_backfill_wave2.py — DetailEnrichment → scraper_kit.providers.cian.detail - tests/scrapers/test_avito_unix_date_tz_consistency.py — avito_houses → scraper_kit.providers.avito.houses (houses-ветка _unix_to_date/RUS_MONTHS consolidation-проверки) Stale-комментарии поправлены в cian_price_history.py, tests/scrapers/ test_domclick_detail.py (описывали ещё-живой domclick.py/domclick_exceptions.py). grep -rn scrapers\.\(cian\|cian_detail\|yandex_realty\|domclick\|domclick_exceptions\| avito_houses\) app/ scripts/ packages/ — только historical footnotes ("strangler-копия app.services.scrapers.X", past-tense "удалён/deleted"). Backend suite: 2811 passed, 6 skipped, 1 failed (known flake test_search_cache_hit #2208, не регрессия). ruff check чист на всех изменённых файлах.