xref: /openbmc/phosphor-post-code-manager/scripts/schema_validator.py (revision b31d048a04314b740a754bfba73b53802094ef46)
1#!/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()
62