fix(parcels): wrap forecast-export PDF in try/except+logger (#1739 completion)

This commit is contained in:
bot-backend 2026-06-18 10:05:25 +03:00
parent bcd24923b8
commit c859872217

View file

@ -1302,9 +1302,19 @@ def export_parcel_forecast(
# pdf — байты (WeasyPrint), отдельной веткой (зеркало pptx early-return): §13-отчёт
# из export_report_pdf (#1739). md/json string-ветки остаются байт-в-байт прежними.
# WeasyPrint-рендер — отдельная зона отказа (шрифты, шаблон, движок): без обёртки
# ошибка всплывает 500-кой без объяснения причины. logger.exception сохраняет
# traceback причины 500 (#1739), пользователю — безопасное RU-сообщение.
if format == "pdf":
try:
pdf_bytes = export_report_pdf(run.result)
except HTTPException:
raise
except Exception as exc:
logger.exception("forecast PDF render failed for %s", cad_num)
raise HTTPException(status_code=500, detail="Ошибка генерации PDF-форсайта") from exc
return Response(
content=export_report_pdf(run.result),
content=pdf_bytes,
media_type="application/pdf",
headers={"Content-Disposition": f'attachment; filename="{base_name}.pdf"'},
)
@ -3494,8 +3504,7 @@ def parcel_snapshot_pdf(
raise HTTPException(
status_code=404,
detail=(
f"Участок {cad_num} не найден в БД. "
"Используйте POST /analyze для загрузки."
f"Участок {cad_num} не найден в БД. " "Используйте POST /analyze для загрузки."
),
)
@ -3618,9 +3627,7 @@ def parcel_snapshot_pdf(
raise
except Exception as exc:
logger.exception("snapshot data fetch failed for %s", cad_num)
raise HTTPException(
status_code=500, detail="Ошибка сбора данных для PDF-снимка"
) from exc
raise HTTPException(status_code=500, detail="Ошибка сбора данных для PDF-снимка") from exc
# 7) Сгенерировать PDF (WeasyPrint-рендер — отдельная зона отказа: шрифты,
# шаблон, движок). logger.exception сохраняет traceback причины 500 (#1739).