blob: ecbbbbbffa9fe4ee61f6ddd421275fea00ec4603 [file] [log] [blame]
Amithash Prasadb31d0482025-07-18 13:28:48 -07001#!/usr/bin/env python3
2# Copyright 2021-present Facebook. All Rights Reserved.
3import argparse
4import json
5import sys
6
7import jsonschema.validators
8
9
10def validator(schema_path):
11 with open(schema_path) as f:
12 schema = json.load(f)
13 validator = jsonschema.Draft202012Validator(schema)
14 return validator
15
16
17def validate_json_conf(schema, js):
18 v = validator(schema)
19 try:
20 with open(js) as f:
21 data = json.load(f)
22 v.validate(data)
23 return True
24 except jsonschema.exceptions.ValidationError as e:
25 print("Validation failed", file=sys.stderr)
26 print(e, file=sys.stderr)
27 return False
28
29
30def main():
31 parser = argparse.ArgumentParser(
32 description="JSON Schema Validator",
33 formatter_class=argparse.ArgumentDefaultsHelpFormatter,
34 )
35 parser.add_argument(
36 "input",
37 nargs="+",
38 help="Input handler configuration",
39 )
40 parser.add_argument(
41 "-s",
42 "--schema",
43 default=None,
44 help="Schema to validate against",
45 )
46 args = parser.parse_args()
47 if args.schema is None:
48 print("FAILURE: Schema is required. See help")
49 sys.exit(1)
50 schema = args.schema
51 files = args.input
52 for f in files:
53 if validate_json_conf(schema, f):
54 print("SUCCESS: ", f)
55 else:
56 print("FAILURE: ", f, file=sys.stderr)
57 sys.exit(1)
58
59
60if __name__ == "__main__":
61 main()