Files
llm/scripts/smoke_1c_read_view_kinds.py
T

79 lines
2.6 KiB
Python

#!/usr/bin/env python3
"""Run read-view smoke tests for the first available objects of selected kinds."""
from __future__ import annotations
import argparse
import base64
import json
import os
import subprocess
import sys
from pathlib import Path
def load_json(path: Path) -> dict:
return json.loads(path.read_text(encoding="utf-8-sig"))
def main() -> int:
parser = argparse.ArgumentParser(description="Smoke-test read_1c_object_view by object kind.")
parser.add_argument("--summary", type=Path, required=True)
parser.add_argument("--validation", type=Path, required=True)
parser.add_argument("--route-index", type=Path, required=True)
parser.add_argument("--output-dir", type=Path, required=True)
parser.add_argument("--kind", action="append", required=True)
parser.add_argument("--top", type=int, default=5)
args = parser.parse_args()
summary = load_json(args.summary)
runs = []
for kind in args.kind:
candidates = [
row
for row in summary.get("outputs") or []
if row.get("kind") == kind
and (row.get("storage_route_summary") or {}).get("metadata_items_with_routes", 0) > 0
]
if not candidates:
runs.append({"kind": kind, "status": "no_candidate"})
continue
row = candidates[0]
name = row["name"]
encoded = base64.b64encode(name.encode("utf-8")).decode("ascii")
command = [
sys.executable,
"scripts/read_1c_object_view.py",
"--kind",
kind,
"--name-b64",
encoded,
"--top",
str(args.top),
"--summary",
str(args.summary),
"--validation",
str(args.validation),
"--route-index",
str(args.route_index),
"--output-dir",
str(args.output_dir),
]
completed = subprocess.run(command, text=True, capture_output=True, env=os.environ.copy())
runs.append(
{
"kind": kind,
"name": name,
"status": "ok" if completed.returncode == 0 else "failed",
"returncode": completed.returncode,
"stdout_tail": completed.stdout[-4000:],
"stderr_tail": completed.stderr[-4000:],
}
)
print(json.dumps({"schema": "onec_read_view_kind_smoke.v1", "runs": runs}, ensure_ascii=True, indent=2))
return 0 if all(row["status"] in {"ok", "no_candidate"} for row in runs) else 1
if __name__ == "__main__":
raise SystemExit(main())