gendesign/tradein-mvp/backend/app/services
bot-backend 8761602e9b
All checks were successful
CI Trade-In / changes (pull_request) Successful in 8s
CI / changes (pull_request) Successful in 10s
CI Trade-In / browser-tests (pull_request) Has been skipped
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 5m5s
chore(tradein/proxy): последние две ручки admin.py — через фабрику фетчера; снят форс pool-режима у cian-history (#3197, #3386)
Два хвоста одной темы — проводка пула прокси в контейнере backend.

#3197: `cian-login` и `domclick-detail-debug` были последними прямыми
конструкциями `BrowserFetcher(source=, endpoint=)` мимо `build_browser_fetcher`.
Без `proxy_provider`/`use_pool`/`environment` сайдкар брал свой env-узел
`SCRAPER_PROXY_URL` (на проде выключенный узел 9: 407 → camoufox `InvalidIP`), а
прод-отказ «пул пуст» (#2616) на этих путях был мёртв — он смотрит на
`environment`, который до конструктора не доезжал. Соседи по эпику уже переведены
(#3382 cian, #3389 yandex). Прямых конструкций без провайдера вне тестов больше
не осталось: остальные (backfill-задачи, pipeline) пул получают своими kwargs,
а `endpoint=None`-ветки providers — это документированный `config=None` для
офлайн-тестов.

#3386: `_PoolCurlConfig` в `cian_price_history` форсил `use_proxy_pool_curl=True`,
потому что у контейнера `backend` не было переменной. #3387 задал
`USE_PROXY_POOL_CURL: "true"` сервису `backend` в compose — зашитая константа
стала лишней и делала рубильник неотключаемым ровно на этом пути (докстринг при
этом описывал уже неверную причину). Теперь `RealScraperConfig()` напрямую.

Тесты меряют значения, а не наличие kwarg'а: на откате исходников красные
4 параметризации нового `test_3197_admin_debug_browser_pool_wiring`
(`assert None is not None` — провайдер не передан) и
`test_price_history_honours_flag_off` (`assert ['cian'] == []` — пул дёргался при
выключенном флаге).
2026-09-06 17:22:46 +05:00
..
exporters fix(tradein/pdf): клиентский PDF не называет площадки-источники — «Источник N», как в веб-отчёте (#3341) 2026-09-03 11:58:45 +03:00
matching feat(tradein/matching): region_code у houses — вывод, а не выдумка (#3051 п.4) 2026-08-27 13:51:48 +05:00
payments fix(payments): обрыв соединения и Init без PaymentURL перестают запирать покупателя 2026-09-06 00:11:35 +05:00
tgbot fix(tradein/support): один повтор терял каждое одиннадцатое сообщение в поддержку 2026-09-01 09:53:21 +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): резолвить роль из реестра, roles.yaml — только fallback (#3316) 2026-09-02 14:49:27 +05:00
auth_session.py feat(tradein): переключаемый реестр людей — подготовка переезда «Меры» в БД auth [PR-2b/6] 2026-08-01 02:50:14 +03:00
backfill_block_breaker.py fix(tradein): вид блока решает обрыв по доле и статус прогона (#3288 часть B) 2026-09-06 00:09:37 +05:00
brand.py fix(tradein/pdf): МЕРА branding + 4-page report, no empty pages (#2513) 2026-07-13 18:04:07 +00:00
buildings_query.py fix(tradein/sale-share): гард по этажности — отсечь near-neighbor mis-match 2026-06-29 00:31:09 +03:00
cache.py chore(format): нормализация под ruff 0.15.20 — 161 файл, только формат (#2864) (#3022) 2026-08-21 12:01:52 +00:00
cian_price_history.py chore(tradein/proxy): последние две ручки admin.py — через фабрику фетчера; снят форс pool-режима у cian-history (#3197, #3386) 2026-09-06 17:22:46 +05:00
cian_session.py fix(tradein/scrapers): три прод-пути остались на chrome120, пока kit ушёл на chrome146 2026-08-27 18:18:05 +03:00
dadata.py fix(tradein/geocoder): local houses fallback + downgrade DaData CLEAN-disabled noise 2026-08-15 18:08:09 +03:00
data_erasure.py fix(tradein/privacy): нормализация телефона к каноническому РФ-виду при erasure (#2547) 2026-08-06 19:59:34 +03:00
domclick_session.py fix(tradein): сигналы о сбоях наконец становятся событиями, а протухание кук предупреждает заранее (#2674) 2026-08-06 02:29:11 +05:00
domrf_kapremont_loader.py fix(tradein/ingest): 4 data-integrity дефекта в бэкфилле годов и импорте ДКП 2026-07-12 22:12:31 +03:00
estimator.py fix(#3398): пустой пул в фоновой догрузке — WARNING без трейсбека (общая функция); комментарий про stateless 2026-09-06 11:58:42 +05:00
gar_flats_loader.py chore(tradein): четыре символа, на которые нет ни одной ссылки 2026-08-29 15:59:54 +03:00
geocoder.py fix(tradein): подсказки адреса — пустые части адреса выпадают, а не печатаются 2026-08-30 14:58:03 +05:00
house_dedup_merge.py fix(tradein/dedup): остаток схлопывания домов становится измеряемым числом, а не оценкой (#2690) (#2820) 2026-08-10 11:18:19 +00:00
house_imv_backfill.py fix(tradein/imv): «временная» ошибка снова временная — 1390 домов возвращаются в очередь (#2843) 2026-08-12 16:06:24 +00:00
house_metadata.py chore(format): нормализация под ruff 0.15.20 — 161 файл, только формат (#2864) (#3022) 2026-08-21 12:01:52 +00:00
identity_store.py feat(tradein): переключаемый реестр людей — подготовка переезда «Меры» в БД auth [PR-2b/6] 2026-08-01 02:50:14 +03:00
image_sanitizer.py fix(tradein/photos): защита от pixel-flood DoS в image_sanitizer 2026-07-12 22:12:12 +03:00
location_index.py feat(tradein/geo): реестр регионов — единственный источник гео-границ (#3051, шард 1a) 2026-08-26 18:39:28 +05:00
product_handlers.py fix(#3197): no_proxy_stop=1 как у соседей, INFO на финале хендлера, докстринг фабрики 2026-09-06 06:27:40 +05:00
proxy_egress.py fix(tradein/proxy): учитывать историю банов при выборе egress-узла (#2877) 2026-08-13 17:47:01 +00:00
proxy_pool.py feat(tradein/proxy): прогон знает свой узел, а снятый бан перестаёт стирать историю (#3404) 2026-09-06 13:05:20 +03:00
proxy_rotation.py feat(tradein/proxy_rotation): ротация IP через mobileproxy.space (aproxy.site) (#3298) 2026-08-31 11:01:41 +00:00
regions.py feat(tradein/geo): реестр регионов — единственный источник гео-границ (#3051, шард 1a) 2026-08-26 18:39:28 +05:00
rosreestr_poll.py fix(tradein): чинит такт загрузки СберИндекса — иначе новый ERROR стал бы ложной тревогой (#2674) 2026-08-06 02:53:26 +05:00
sber_index.py fix(tradein/sber): сторож мерит отставание загрузки, а не календарь (#2846) (#2849) 2026-08-12 19:36:20 +00:00
scheduler.py docs(#3390): убрать ложные «counters ЗАМЕНЯЕТ» из комментариев/докстрингов; гейт test_3168 — честная формулировка 2026-09-06 12:34:53 +05:00
scrape_runs.py refactor(tradein/runs): одна реализация scrape_runs — kit, семантика counters мерж (#3390) 2026-09-06 11:45:56 +05:00
scraper_adapters.py feat(tradein/proxy): прогон знает свой узел, а снятый бан перестаёт стирать историю (#3404) 2026-09-06 13:05:20 +03:00
scraper_settings.py chore(tradein): деактивировать N1.ru scraper — источник переехал в Cian 2026-06-16 14:50:51 +03:00
search_query.py fix(tradein/matching): честность тиров сопоставления домов (#2674) 2026-08-06 04:37:12 +05:00
street_scheme.py feat(mera/b2c): улица сделки доезжает до витрины готовой схемой, а не геометрией 2026-08-29 23:25:44 +05:00
user_events.py feat(tradein/audit): request-audit middleware + estimate_request logging → user_events (#2519) 2026-07-13 20:09:22 +00:00
yandex_address_backfill.py style(tradein): уложить перенесённые строки в лимит 100 символов 2026-08-27 18:24:09 +03:00
yandex_price_history.py docs(#3376): ссылка на follow-up #3385 вместо TODO в yandex_price_history 2026-09-05 22:57:04 +00:00
yandex_session.py docs(tradein/scrapers): в репозитории лежало опровергнутое обоснование хранилища сессий Яндекса 2026-08-28 22:52:47 +03:00
zhkh_flats_loader.py fix(tradein): cadastre ЖКХ-fallback + COALESCE merge-key + median-floors guard 2026-06-29 01:32:48 +03:00