fix: sanitize import job summaries
Some checks failed
CD Pipeline / deploy (push) Has been cancelled

This commit is contained in:
ogt
2026-06-25 14:50:28 +08:00
parent 903cf1a27a
commit 39ff5d5605
5 changed files with 86 additions and 4 deletions

View File

@@ -73,11 +73,50 @@ def humanize_import_error(message: Any) -> str:
return compact[:180] + ("" if len(compact) > 180 else "")
def _public_import_summary(raw_summary: Any) -> Optional[Dict[str, Any]]:
"""Return an operator-facing import summary without table names or SQL sync internals."""
if not raw_summary:
return None
summary = raw_summary
if isinstance(raw_summary, str):
try:
summary = json.loads(raw_summary)
except Exception:
return {"message": "匯入摘要暫時無法解析,請以任務狀態為準。"}
if not isinstance(summary, dict):
return None
sync_success = summary.get("sync_success")
public = {
"message": summary.get("message") or "匯入任務已完成。",
"imported_count": summary.get("imported_count"),
"verified": bool(summary.get("verified")),
"date_min": summary.get("date_min"),
"date_max": summary.get("date_max"),
"source_sheet": summary.get("source_sheet"),
"source_header_row": summary.get("source_header_row"),
}
if sync_success is True:
public["sync_status"] = "已更新業績分析儀表板"
elif sync_success is False:
public["sync_status"] = "業績分析儀表板同步未完成"
public["sync_error_message"] = humanize_import_error(summary.get("sync_error"))
else:
public["sync_status"] = ""
return {key: value for key, value in public.items() if value not in (None, "")}
def _public_import_job_payload(job: ImportJob) -> Dict[str, Any]:
payload = job.to_dict()
display_error = humanize_import_error(payload.get("error_message"))
payload["error_message"] = display_error
payload["display_error_message"] = display_error
payload["import_summary"] = _public_import_summary(payload.get("import_summary"))
payload.pop("drive_file_id", None)
payload.pop("local_file_path", None)
return payload