validate_walk_strategy_config.py 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. from __future__ import annotations
  2. import argparse
  3. import json
  4. import sys
  5. from pathlib import Path
  6. from typing import Any
  7. ROOT = Path(__file__).resolve().parents[1]
  8. if str(ROOT) not in sys.path:
  9. sys.path.insert(0, str(ROOT))
  10. from content_agent.integrations.walk_strategy_json import (
  11. EDGE_CATALOG_PATH,
  12. RULE_PACK_PATH,
  13. WALK_STRATEGY_PATH,
  14. validate_walk_strategy_config,
  15. )
  16. def main() -> int:
  17. args = _parse_args()
  18. path = args.config_path if args.config_path.is_absolute() else _repo_root() / args.config_path
  19. strategy = json.loads(path.read_text(encoding="utf-8"))
  20. root_dir = _repo_root()
  21. findings = validate_walk_strategy_config(
  22. strategy,
  23. root_dir=root_dir,
  24. strategy_path=path.relative_to(root_dir),
  25. rule_pack_path=RULE_PACK_PATH,
  26. edge_catalog_path=args.edge_catalog_path,
  27. )
  28. result: dict[str, Any] = {
  29. "status": "fail" if any(finding["level"] == "fail" for finding in findings) else "pass",
  30. "config_path": str(path.relative_to(root_dir)),
  31. "walk_strategy_version": strategy.get("strategy_version"),
  32. "findings": findings,
  33. }
  34. print(json.dumps(result, ensure_ascii=False, indent=2))
  35. return 1 if result["status"] == "fail" else 0
  36. def _parse_args() -> argparse.Namespace:
  37. parser = argparse.ArgumentParser()
  38. parser.add_argument(
  39. "config_path",
  40. nargs="?",
  41. type=Path,
  42. default=_repo_root() / WALK_STRATEGY_PATH,
  43. )
  44. parser.add_argument("--edge-catalog-path", type=Path, default=EDGE_CATALOG_PATH)
  45. return parser.parse_args()
  46. def _repo_root() -> Path:
  47. return Path(__file__).resolve().parents[1]
  48. if __name__ == "__main__":
  49. sys.exit(main())