feat: show progress while preparing batch archives

This commit is contained in:
chenmingxuan committed 2026-09-30 00:04:16 +08:00
1 parent 868f611c36
commit 8dbe054a8c
8 files changed
+333 -7

No files matched your search

+10 -2
View File
@@ -1,7 +1,7 @@
"""Evidence-backed Word/Excel artifacts, independent of the language model runtime."""
from datetime import datetime
from typing import cast
from typing import Callable, cast
import json
from pathlib import Path
import re
@@ -695,7 +695,7 @@ def export_session_media(session_id: str, kind: str) -> Path:
return target
def export_batch(batch_id: str) -> Path:
def export_batch(batch_id: str, progress: Callable[[int, int, str], None] | None = None) -> Path:
with EXPORT_LOCK:
batch = store.get("batch", identifier(batch_id))
if not batch:
@@ -704,6 +704,8 @@ def export_batch(batch_id: str) -> Path:
directory.mkdir(parents=True, exist_ok=True)
formats = batch["formats"]
records = [session_report(job["session_id"]) for job in store.jobs(batch_id)]
if progress:
progress(0, len(records), "正在生成批次汇总")
rows = [("任务编号", "任务名称", "执行状态", "验证结论", "异常原因")]
rows += [
(r["id"], r["name"], STATUS.get(r["status"], r["status"]), r["verdict"], r["error"])
@@ -734,6 +736,8 @@ def export_batch(batch_id: str) -> Path:
for path in outputs:
archive.write(path, path.name)
for number, report in enumerate(records, 1):
if progress:
progress(number - 1, len(records), f"正在打包任务 {number}/{len(records)}")
prefix = f"任务报告/{number:04d}_{archive_case_name(report)}"
for path in export_session(report["id"], formats):
archive.write(path, f"{prefix}/{path.name}")
@@ -741,5 +745,9 @@ def export_batch(batch_id: str) -> Path:
archive.write(source, f"{prefix}/步骤截图/{name}")
for source, name in session_videos(report):
archive.write(source, f"{prefix}/任务录屏/{name}")
if progress:
progress(number, len(records), f"已打包任务 {number}/{len(records)}")
if progress:
progress(len(records), len(records), "正在完成压缩包")
temporary.replace(target)
return target