#!/usr/bin/env python3 # Copyright 2021-present Facebook. All Rights Reserved. import argparse import json import sys import jsonschema.validators def validator(schema_path): with open(schema_path) as f: schema = json.load(f) validator = jsonschema.Draft202012Validator(schema) return validator def validate_json_conf(schema, js): v = validator(schema) try: with open(js) as f: data = json.load(f) v.validate(data) return True except jsonschema.exceptions.ValidationError as e: print("Validation failed", file=sys.stderr) print(e, file=sys.stderr) return False def main(): parser = argparse.ArgumentParser( description="JSON Schema Validator", formatter_class=argparse.ArgumentDefaultsHelpFormatter, ) parser.add_argument( "input", nargs="+", help="Input handler configuration", ) parser.add_argument( "-s", "--schema", default=None, help="Schema to validate against", ) args = parser.parse_args() if args.schema is None: print("FAILURE: Schema is required. See help") sys.exit(1) schema = args.schema files = args.input for f in files: if validate_json_conf(schema, f): print("SUCCESS: ", f) else: print("FAILURE: ", f, file=sys.stderr) sys.exit(1) if __name__ == "__main__": main()