"""Run approved BATCH-003 conversions in small sub-batches.
|
|
Writes a separate conversion status file for each sub-batch so long runs can be
|
resumed without losing status records.
|
"""
|
|
from __future__ import annotations
|
|
import argparse
|
import csv
|
import subprocess
|
import sys
|
from pathlib import Path
|
|
|
def main() -> int:
|
parser = argparse.ArgumentParser()
|
parser.add_argument("--project-root", default=".")
|
parser.add_argument("--inventory", required=True)
|
parser.add_argument("--sub-batch-size", type=int, default=30)
|
parser.add_argument("--start", type=int, default=1)
|
parser.add_argument("--limit", type=int, default=0)
|
args = parser.parse_args()
|
|
root = Path(args.project_root).resolve()
|
inventory = root / args.inventory
|
with inventory.open("r", encoding="utf-8-sig", newline="") as f:
|
rows = [r for r in csv.DictReader(f) if r.get("already_in_source_document") == "NO"]
|
|
chunks = [
|
rows[i : i + args.sub_batch_size]
|
for i in range(0, len(rows), args.sub_batch_size)
|
]
|
selected = chunks[args.start - 1 :]
|
if args.limit:
|
selected = selected[: args.limit]
|
|
temp_dir = root / "ana-data" / "tmp" / "有色案例" / "ANA-YS-INDUSTRY-001" / "RUN-ANA-YS-INDUSTRY-001-BATCH-003-CONVERT-001"
|
temp_dir.mkdir(parents=True, exist_ok=True)
|
|
for offset, chunk in enumerate(selected, start=args.start):
|
sub_id = f"SB{offset:03d}"
|
sub_inventory = temp_dir / f"inventory_{sub_id}.csv"
|
with sub_inventory.open("w", encoding="utf-8-sig", newline="") as f:
|
writer = csv.DictWriter(f, fieldnames=list(chunk[0].keys()))
|
writer.writeheader()
|
writer.writerows(chunk)
|
status_out = root / "ana-data" / "cases" / "有色案例" / "manifest" / f"conversion_status_batch003_{sub_id}.csv"
|
cmd = [
|
sys.executable,
|
str(root / "ana-data" / "tools" / "convert_nonferrous_raw_batch.py"),
|
"--project-root",
|
str(root),
|
"--inventory",
|
str(sub_inventory.relative_to(root)),
|
"--converted-dir",
|
"ana-data/cases/有色案例/converted",
|
"--status-out",
|
str(status_out.relative_to(root)),
|
"--case-id",
|
"ANA-YS-INDUSTRY-001",
|
"--batch-id",
|
"BATCH-003",
|
"--run-id",
|
f"RUN-ANA-YS-INDUSTRY-001-BATCH-003-CONVERT-001-{sub_id}",
|
]
|
print(f"running {sub_id} rows={len(chunk)}")
|
result = subprocess.run(cmd, cwd=root, text=True, capture_output=True)
|
print(result.stdout.strip())
|
if result.returncode != 0:
|
print(result.stderr, file=sys.stderr)
|
return result.returncode
|
return 0
|
|
|
if __name__ == "__main__":
|
raise SystemExit(main())
|