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