#!/usr/bin/env python3 """JSON Schema Validator Utility - Validates JSON files and produces verification reports.""" import json import sys from pathlib import Path from typing import Any def validate_json_file(file_path: str) -> dict[str, Any]: """Validate a JSON file and return results.""" result = { "file": file_path, "exists": False, "valid_json": False, "structure_valid": False, "errors": [], "summary": {}, "lines": 0, "char_count": 0 } path = Path(file_path) # Check file exists if not path.exists(): result["errors"].append(f"File does not exist: {file_path}") return result result["exists"] = True # Get file stats try: result["size_bytes"] = path.stat().st_size result["char_count"] = len(path.read_text()) result["lines"] = len(path.read_text().splitlines()) except Exception as e: result["errors"].append(f"Error reading file stats: {e}") # Parse JSON try: with open(path, 'r') as f: data = json.load(f) result["valid_json"] = True result["data_type"] = type(data).__name__ # Validate structure for common types if isinstance(data, dict): result["structure_valid"] = True result["summary"]["keys"] = list(data.keys()) result["summary"]["key_count"] = len(data) elif isinstance(data, list): result["structure_valid"] = True result["summary"]["item_count"] = len(data) result["summary"]["first_item_type"] = type(data[0]).__name__ if data else "empty" elif isinstance(data, (str, int, float, bool, type(None))): result["structure_valid"] = True result["summary"]["value"] = str(data)[:100] else: result["errors"].append(f"Unexpected data type: {type(data).__name__}") except json.JSONDecodeError as e: result["errors"].append(f"JSON parse error: {e}") except Exception as e: result["errors"].append(f"Unexpected error: {e}") return result def main(): """Main entry point.""" if len(sys.argv) < 2: print("Usage: json_validator_utility.py [json_file2] ...") sys.exit(1) files = sys.argv[1:] results = [] for file_path in files: result = validate_json_file(file_path) results.append(result) # Output verification report report = { "validation_results": results, "summary": { "total_files": len(results), "existing_files": sum(1 for r in results if r["exists"]), "valid_json_files": sum(1 for r in results if r["valid_json"]), "structure_valid_files": sum(1 for r in results if r["structure_valid"]), "files_with_errors": sum(1 for r in results if r["errors"]) } } # Write report output_path = "/root/.hermes/wizard-outputs/spark/validation_report.json" with open(output_path, 'w') as f: json.dump(report, f, indent=2) print(f"Validation complete. Report written to: {output_path}") print(f"Summary: {report['summary']}") if __name__ == "__main__": main()