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