1*76fe0d1fSPatrick Williams#!/usr/bin/env python3 2*76fe0d1fSPatrick Williams 3*76fe0d1fSPatrick Williamsimport argparse 4*76fe0d1fSPatrick Williamsimport json 5*76fe0d1fSPatrick Williamsimport os 6*76fe0d1fSPatrick Williamsimport sys 7*76fe0d1fSPatrick Williams 8*76fe0d1fSPatrick Williamsimport jsonschema 9*76fe0d1fSPatrick Williamsfrom mako.template import Template 10*76fe0d1fSPatrick Williams 11*76fe0d1fSPatrick Williamsimport yaml 12*76fe0d1fSPatrick Williams 13*76fe0d1fSPatrick Williams# Determine the script's directory to find the schema file relative to it. 14*76fe0d1fSPatrick WilliamsSCRIPT_DIR = os.path.dirname(os.path.abspath(__file__)) 15*76fe0d1fSPatrick WilliamsSCHEMA_FILE = os.path.join( 16*76fe0d1fSPatrick Williams SCRIPT_DIR, "phosphor-logging", "schemas", "eventfilter.schema.yaml" 17*76fe0d1fSPatrick Williams) 18*76fe0d1fSPatrick WilliamsTEMPLATE_FILE = os.path.join( 19*76fe0d1fSPatrick Williams SCRIPT_DIR, "phosphor-logging", "templates", "event-filter.cpp.mako" 20*76fe0d1fSPatrick Williams) 21*76fe0d1fSPatrick Williams 22*76fe0d1fSPatrick Williams 23*76fe0d1fSPatrick Williamsdef main() -> int: 24*76fe0d1fSPatrick Williams """ 25*76fe0d1fSPatrick Williams Validates a JSON filter file against the eventfilter schema. 26*76fe0d1fSPatrick Williams """ 27*76fe0d1fSPatrick Williams parser = argparse.ArgumentParser( 28*76fe0d1fSPatrick Williams description="Validate an event filter JSON file against the schema." 29*76fe0d1fSPatrick Williams ) 30*76fe0d1fSPatrick Williams parser.add_argument( 31*76fe0d1fSPatrick Williams "filter", 32*76fe0d1fSPatrick Williams type=str, 33*76fe0d1fSPatrick Williams help="Path to the JSON filter file to validate.", 34*76fe0d1fSPatrick Williams ) 35*76fe0d1fSPatrick Williams args = parser.parse_args() 36*76fe0d1fSPatrick Williams 37*76fe0d1fSPatrick Williams with open(args.filter, "r") as f: 38*76fe0d1fSPatrick Williams filter_data = json.load(f) 39*76fe0d1fSPatrick Williams 40*76fe0d1fSPatrick Williams with open(SCHEMA_FILE, "r") as f: 41*76fe0d1fSPatrick Williams schema_data = yaml.safe_load(f) 42*76fe0d1fSPatrick Williams 43*76fe0d1fSPatrick Williams jsonschema.validate(instance=filter_data, schema=schema_data) 44*76fe0d1fSPatrick Williams 45*76fe0d1fSPatrick Williams template = Template(filename=TEMPLATE_FILE) 46*76fe0d1fSPatrick Williams output = template.render(data=filter_data) 47*76fe0d1fSPatrick Williams print(output) 48*76fe0d1fSPatrick Williams 49*76fe0d1fSPatrick Williams return 0 50*76fe0d1fSPatrick Williams 51*76fe0d1fSPatrick Williams 52*76fe0d1fSPatrick Williamsif __name__ == "__main__": 53*76fe0d1fSPatrick Williams sys.exit(main()) 54