gendesign/tradein-mvp/backend/app/services
bot-backend 47880bfab6
All checks were successful
CI / changes (pull_request) Successful in 10s
CI Trade-In / changes (pull_request) Successful in 10s
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 1m42s
fix(tradein/scrapers): wire proxy_pool into Avito legacy pipeline, rotate on ban (#2202)
Боевой оркестратор (scrape_pipeline.py) читал только статический
settings.scraper_proxy_url — ни один боевой скрейпер не использовал
proxy_pool/scrape_proxies (git grep "acquire(" = 0 хитов). Бан на общем
IP выносил avito+cian+yandex+domklik разом.

Подключён pool-aware proxy acquisition/rotation в 3 curl-режим Avito
entry points (run_avito_pipeline, run_avito_city_sweep,
run_avito_newbuilding_sweep), за флагом use_proxy_pool_curl (default
False — ship-dark, поведение не меняется пока явно не включат):
- _pool_proxy_dict(): health-filtered acquire() lease, fallback на
  статический прокси при пустом пуле/ошибке/флаге off.
- _rotate_pool_proxy(): на бан — mark_health(ok=False) → acquire()
  замены → ТОЛЬКО ПОСЛЕ release(current_lease). Порядок принципиален:
  release ДО acquire() позволял пулу молча вернуть тот же только что
  забаненный прокси (один бан не достигает MAX_CONSECUTIVE_FAILS=3,
  leased_by IS NULL фильтр не исключал бы его) — найдено на pre-push
  review, воспроизведено и закрыто регрессионным тестом с CURRENT id
  ниже GOOD id (оригинальный тест проходил случайно из-за id tie-break).
- run_id прокинут в acquire() на обоих sweep call sites — scrape_proxies
  .leased_by несёт реальный run id для диагностики, не NON_RUN_LEASE_MARKER.

Cian/Yandex/DomClick (browser-mode, отдельный сервис) и
run_avito_full_load (использует AvitoScraper напрямую, много вызывающих
кода за пределами scrape_pipeline) — вне скоупа, задокументировано как
follow-up в PR description.

Refs #2202
2026-07-04 00:45:25 +03:00
..
exporters chore(tradein): полное выключение источника n1 — миграция 165 + вычистка backend/ops (#2204) 2026-07-03 10:08:56 +03:00
matching fix(tradein/pii): удалить телефоны продавцов (NULL) + PII клиента (DROP) (#2217, #1969) 2026-07-03 23:00:42 +03:00
scrapers fix(tradein/pii): удалить телефоны продавцов (NULL) + PII клиента (DROP) (#2217, #1969) 2026-07-03 23:00:42 +03:00
__init__.py feat: add tradein-mvp subproject (Trade-In Estimator под /trade-in) 2026-05-21 00:25:39 +03:00
account_quota.py fix(tradein): atomic conditional quota increment — close TOCTOU (#747) (#749) 2026-05-30 15:52:34 +00:00
brand.py feat: add tradein-mvp subproject (Trade-In Estimator под /trade-in) 2026-05-21 00:25:39 +03:00
buildings_query.py fix(tradein/sale-share): гард по этажности — отсечь near-neighbor mis-match 2026-06-29 00:31:09 +03:00
cache.py feat(tradein): Phase 3.2 — /api/v1/search endpoint + Redis cache (#479) 2026-05-23 14:44:22 +00:00
cian_price_history.py fix(week-review): автофиксы код-ревью — 169 issue (label «week ревью 1») 2026-06-15 20:21:11 +05:00
cian_session.py feat(tradein): dedicated Cian mobile proxy — separate egress from Avito (#923) 2026-05-31 19:30:14 +00:00
dadata.py fix(week-review): автофиксы код-ревью — 169 issue (label «week ревью 1») 2026-06-15 20:21:11 +05:00
estimator.py fix(tradein/estimator): дедуп кросс-source дублей в anchor-пути (#2265 follow-up) (#2311) 2026-07-03 20:35:37 +00:00
gar_flats_loader.py feat(tradein): канонический матч ГАР↔houses (0%→41% yield) + tradein_canon_addr + --match-only (#2063) 2026-06-28 15:50:07 +00:00
geocoder.py feat(tradein/matching): fias_exact tier + estimate fias persist + suggest fias_id contract 2026-07-02 20:49:04 +03:00
house_dedup_merge.py fix(tradein/dedup): drop geo-guard in fias-pass — same-fias identity outranks proximity (#2187) 2026-07-02 21:35:20 +03:00
house_imv_backfill.py feat(tradein-imv): route IMV backfill через BrowserFetcher.fetch_json за dormant-флагом (#915 Stage 3) (#1916) 2026-06-26 09:54:28 +00:00
house_metadata.py feat(tradein): postgres_fdw live read of gendesign.cad_buildings (replaces snapshot) (#493) 2026-05-24 08:57:30 +00:00
image_sanitizer.py fix(week-review): автофиксы код-ревью — 169 issue (label «week ревью 1») 2026-06-15 20:21:11 +05:00
location_coef.py feat(tradein): location-coef MVP через FDW-мост к OSM POI Птицы (#2045) 2026-07-03 23:44:55 +03:00
product_handlers.py feat(tradein): location-coef MVP через FDW-мост к OSM POI Птицы (#2045) 2026-07-03 23:44:55 +03:00
proxy_pool.py feat(proxy-pool): pool service (acquire/release/health) + healthcheck scheduler task (#2162) 2026-07-02 16:41:39 +00:00
rosreestr_poll.py feat(tradein): scheduled monthly Rosreestr new-quarter poll → ingest alert (#888) (#894) 2026-05-31 13:13:55 +00:00
sber_index.py fix(tradein): correct SberIndex hedonic/asking dataset-paths + 404 warning (#902) 2026-06-17 22:50:52 +03:00
scheduler.py feat(tradein): location-coef MVP через FDW-мост к OSM POI Птицы (#2045) 2026-07-03 23:44:55 +03:00
scrape_pipeline.py fix(tradein/scrapers): wire proxy_pool into Avito legacy pipeline, rotate on ban (#2202) 2026-07-04 00:45:25 +03:00
scrape_runs.py fix(tradein): persist scrape_runs.total_seen/new_count from sweep counters (#1926) (#1928) 2026-06-26 18:09:17 +00:00
scraper_adapters.py feat(proxy-pool): P4 — browser dynamic pool-proxy (acquire→/fetch→relaunch) + orchestration wiring, ship-dark (#2164) 2026-07-02 19:20:29 +00:00
scraper_settings.py chore(tradein): деактивировать N1.ru scraper — источник переехал в Cian 2026-06-16 14:50:51 +03:00
search_query.py feat(tradein): segment=vtorichka|novostroyki|all query-param on listings (#1188) 2026-06-17 21:43:01 +03:00
yandex_address_backfill.py fix(tradein): yandex address-enrich — city-agnostic title regex (спутники ЕКБ) (#875) 2026-05-31 09:08:29 +00:00
yandex_price_history.py feat(tradein): populate offer_price_history for yandex from gate price.previous/trend 2026-06-18 14:23:23 +03:00
zhkh_flats_loader.py fix(tradein): cadastre ЖКХ-fallback + COALESCE merge-key + median-floors guard 2026-06-29 01:32:48 +03:00