You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
56 lines
1.8 KiB
56 lines
1.8 KiB
"""Command-line wrapper around src.validators.mindmodel_validator.validate_manifest
|
|
|
|
This tiny CLI loads a manifest and writes a structured JSON report to stdout
|
|
and optionally to a file path. It is report-only: it never raises an error or
|
|
changes exit code based on findings.
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
import argparse
|
|
import json
|
|
import os
|
|
from pathlib import Path
|
|
from typing import Any
|
|
|
|
|
|
def _write_report(report: dict[str, Any], path: Path | None) -> None:
|
|
text = json.dumps(report, indent=2, ensure_ascii=False)
|
|
print(text)
|
|
if path:
|
|
path.parent.mkdir(parents=True, exist_ok=True)
|
|
path.write_text(text, encoding="utf-8")
|
|
|
|
|
|
def main(argv: list[str] | None = None) -> int:
|
|
parser = argparse.ArgumentParser("validate_mindmodel")
|
|
parser.add_argument("manifest", nargs="?", help="path to manifest file")
|
|
parser.add_argument("--manifest", dest="manifest_opt", help="path to manifest file")
|
|
parser.add_argument("--report", help="optional output report path")
|
|
args = parser.parse_args(argv)
|
|
|
|
manifest = args.manifest_opt or args.manifest
|
|
if not manifest:
|
|
parser.error("manifest path is required (positional or --manifest)")
|
|
|
|
# import here to keep CLI tiny when unused
|
|
try:
|
|
from src.validators.mindmodel_validator import validate_manifest
|
|
except Exception as e: # pragma: no cover - defensive
|
|
print(f"Failed to import validator: {e}")
|
|
return 0
|
|
|
|
try:
|
|
report = validate_manifest(manifest, report_only=True)
|
|
except Exception as e: # never fail the process
|
|
report = {"error": str(e)}
|
|
|
|
report_path = Path(args.report) if args.report else None
|
|
_write_report(report, report_path)
|
|
|
|
# always exit zero for report-only operation
|
|
return 0
|
|
|
|
|
|
if __name__ == "__main__":
|
|
raise SystemExit(main())
|
|
|