Files
xsl cd0ddb131b feat(report): 报告 PDF 导出管线(Phase A,WeasyPrint 服务端渲染)
- POST /reports/{id}/export:request_key 幂等 + hd_export 日配额三段式(reserve/commit/refund)+ tier2 熔断场景闸(BudgetGuardDep),仅 succeeded 报告可导
- GET /reports/{id}/export/download:归属校验 + 路径收敛(rendered_asset_key 必须落在 report_export_dir 内),FileResponse 携带 UTF-8 文件名
- celery 任务 meida.report.export(cpu 队列):渲染→落盘 var/exports→回写 rendered_asset_key;业务性拒绝(报告状态变化)结案退款不重试,基础设施异常重试一次后兜底结案退款
- packages/report/pdf:Jinja2 模板 + WeasyPrint 渲染器(url_fetcher 全拒外部资源防 SSRF;维度中文名按 DIMENSION_BY_KEY 回填;色板维度渲染色卡)
- 单测 10 例(资格/幂等/并发同键/下载校验/渲染);scripts/seed_pdf_e2e.sql 供本地 E2E 造数
2026-08-30 13:17:23 +08:00
..

scripts/

脚本 用途
smoke.sh 端到端验证:compose up → migrate → 起 API → 发 dev token → 调 真实 DeepSeek → 打印 ob_ai_call 与 bl_ledger
make smoke      # 或 bash scripts/smoke.sh

注意

  • smoke.sh 会真的调用 DeepSeek,产生真实费用。 这是仓库里唯一会花钱的 入口;make test 全程离线。
  • 需要 .env 里有可用的 DEEPSEEK_API_KEY。
  • 它在 8010 端口起一个临时 API 进程,结束时自动清理;日志留在 .smoke/api.log。

写新脚本的规矩

  • set -Eeuo pipefail,并且失败要给出可操作的错误信息,不要只是退出码。
  • 不要把密钥写进脚本或 echo 出来。从 .env / 环境变量读。
  • 任何会改数据或花钱的脚本,在文件头第一行注释里写清楚。