fix(tradein/yandex): newbuilding resolve/fetch_jk через пул прокси + стоп на пустом пуле (#3197, точки 2-3) #3389
No reviewers
Labels
No labels
Fable 5 ревью
GG-форсайт
admin
analytics
auth
automation
bug
business
chore
ci
compliance
data
data-moat
docs
duplicate
dx
enhancement
feedback/max
generative
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
2 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: lekss361/gendesign#3389
Loading…
Add table
Reference in a new issue
No description provided.
Delete branch "fix/3197-yandex-newbuilding-proxy-pool"
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?
Часть #3197 (часть 1, точки 2-3 — обе в
providers/yandex/newbuilding.py). Не закрывает issue (остаётсяadmin.py:702debug-ручка и часть 2 — не нужна ни на одной из подключённых точек).Дефект.
resolve_yandex_jk_slug(newbuilding.py:~189) иYandexNewbuildingScraper.fetch_jk(:~385) строилиBrowserFetcher(source="yandex", endpoint=…)без пула → env-фолбэкSCRAPER_PROXY_URL= выключенный узел 9 (407) → camoufoxInvalidIP(#3386).proxy_providerдо задачи не доезжал ни по одной ветке:SchedulerContext.proxy_providerесть, но_job_yandex_newbuilding_sweepего не читал, аenrich_yandex_newbuilding_sweepне принимал. Ближайшийyandex_newbuilding_sweep— 07.09 03:58 UTC.Фикс. Обе точки —
build_browser_fetcher(config, "yandex", proxy_provider=…)(какyandex/serp.py:566), kwarg-onlyproxy_provider=None;config=None(офлайн-парс-тесты) — прежняя ветка. В задачеRealProxyProvider()конструируется как у соседей (cian_history_backfill.py:221,domclick_detail_backfill.py:406), публичная сигнатура не расширена;admin.py:1947—_kit_proxy_provider(). Обе точки kit глоталиNoProxyAvailableError(except Exception → return None, тот же дефект, что #3382) — пробрасывается черезcaused_by_no_proxy, в задачеno_proxy_stop=True+break,mark_failedв_job_yandex_newbuilding_sweep; флаг читается изcounters. Часть 2 (тёплый контекст) не нужна:reuse_contextна этом пути не включён.Тесты:
tests/test_3197_yandex_newbuilding_proxy_pool_wiring.py— обе точки строят фетчер с провайдером (захват на_base.BrowserFetcher), стоп на пустом пуле через живыеresolve_yandex_jk_slug/fetch_jk(мокнут толькоBrowserFetcher.fetch). Чужойtest_scraper_kit_newbuilding_endpoint.py— спай переехал на_base.BrowserFetcher(как #2767 для cian-близнеца).Фальсификация: откат всех хунков →
assert 0 == 2(обе точки обязаны строить фетчер) иTypeError … 'no_proxy_stop'; отдельная мутация «вернуть только глотание в kit» →к сайдкару ходили ровно один раз: assert 3 == 1— три дома вместо одного. Восстановлено.Прогоны: полный backend
5514 passed, 35 skipped(rc=0); ruff OK.Приёмка на проде (окно
yandex_newbuilding_sweep07.09 03:58 UTC): в логе сайдкара[yandex] … override=True(старый путь не слалproxyв теле вовсе);succeeded > 0/rows_inserted > 0в counters,InvalidIP= 0; обратное направление — при пустом пулеfailed+no_proxy_stop=trueпосле одного дома.Code-review (07.09): ✅ — обе точки через
build_browser_fetcher(третьего места нет), контрактNoneдля httpx/парс-ошибок цел, стоп на обоих сайтах, веткаno_proxy_stopв хендлере первая (порядок сиблингаscheduler.py:164-184), мутация «снятьraise» воспроизведена (assert 3 == 1на обоих параметрах), старые тесты не ослаблены (test_2860не тронут; утверждение про endpoint сохранено дословно), blast radius — два вызывающих, оба совместимы.Докатываю до мержа три мелочи:
no_proxy_stopв counters как1(у соседей1, здесь уезжал JSONtrue— SQL-монитор по= '1'промахнулся бы мимо Яндекса),logger.error → infoна финальной строке хендлера (какscheduler.py:172-176), устаревший докстринг фабрики_base.py:209-218. Не в этом PR: admin-ручка:1951при пустом пуле отдаст 500 вместо 503 (честнее прежнего 404, но стектрейс в GlitchTip).