From 7acefc0c9d685eea73ba7ade10b9463a6ea45354 Mon Sep 17 00:00:00 2001 From: bot-backend Date: Mon, 10 Aug 2026 16:19:55 +0500 Subject: [PATCH] =?UTF-8?q?fix(tradein/cian):=20ad-hoc=20=D1=80=D1=83?= =?UTF-8?q?=D1=87=D0=BA=D0=B0=20detail=20=D0=BE=D1=82=D0=B2=D0=B5=D1=87?= =?UTF-8?q?=D0=B0=D0=B5=D1=82=20502=20=D0=BD=D0=B0=20=D0=B1=D0=BB=D0=BE?= =?UTF-8?q?=D0=BA=20=D1=83=D0=B7=D0=BB=D0=B0,=20=D0=B0=20=D0=BD=D0=B5=2050?= =?UTF-8?q?0=20(#2700)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Побочный эффект предыдущего коммита: 403 стал исключением, и POST /scrape/cian-detail уронил бы его наружу необработанным. «Страницу не разобрали» (404) и «нас не пустили с этого узла» (502) — разные новости для того, кто дёргает ручку руками. Refs #2700 --- tradein-mvp/backend/app/api/v1/admin.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/tradein-mvp/backend/app/api/v1/admin.py b/tradein-mvp/backend/app/api/v1/admin.py index 856a7213..07a08672 100644 --- a/tradein-mvp/backend/app/api/v1/admin.py +++ b/tradein-mvp/backend/app/api/v1/admin.py @@ -1904,9 +1904,16 @@ async def scrape_cian_detail( Without it → debug-only (no DB write). """ _assert_allowed_url(offer_url) + from scraper_kit.cian_exceptions import CianBlockedError from scraper_kit.providers.cian.detail import fetch_detail, save_detail_enrichment - enrichment = await fetch_detail(offer_url, config=RealScraperConfig()) + try: + enrichment = await fetch_detail(offer_url, config=RealScraperConfig()) + except CianBlockedError as exc: + # #2700: 403 теперь исключение (узел снимается с выдачи Циану). Ad-hoc ручке + # нужен внятный ответ, а не 500: «страницу не разобрали» и «нас не пустили с + # этого узла» — разные новости для того, кто дёргает ручку руками. + raise HTTPException(502, f"Cian заблокировал наш узел: {exc}") from exc if enrichment is None: raise HTTPException(404, f"Could not parse Cian detail page: {offer_url}")