"""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())