Initial SQL-only 1C adapter baseline
This commit is contained in:
@@ -0,0 +1,78 @@
|
||||
#!/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())
|
||||
Reference in New Issue
Block a user