131eed5c5STom Joseph#!/usr/bin/env python3 20065905eSRatan Gupta 3*93682256SPatrick Williamsimport argparse 40065905eSRatan Guptaimport os 50065905eSRatan Guptaimport sys 6*93682256SPatrick Williams 70065905eSRatan Guptaimport yaml 80065905eSRatan Guptafrom mako.template import Template 90065905eSRatan Gupta 100065905eSRatan Gupta 110065905eSRatan Guptadef generate_cpp(sensor_yaml, output_dir): 12*93682256SPatrick Williams with open(sensor_yaml, "r") as f: 130065905eSRatan Gupta ifile = yaml.safe_load(f) 140065905eSRatan Gupta if not isinstance(ifile, dict): 150065905eSRatan Gupta ifile = {} 160065905eSRatan Gupta 170065905eSRatan Gupta # Render the mako template 180065905eSRatan Gupta 19*93682256SPatrick Williams t = Template(filename=os.path.join(script_dir, "writesensor.mako.cpp")) 200065905eSRatan Gupta 210065905eSRatan Gupta output_cpp = os.path.join(output_dir, "sensor-gen.cpp") 22*93682256SPatrick Williams with open(output_cpp, "w") as fd: 230065905eSRatan Gupta fd.write(t.render(sensorDict=ifile)) 240065905eSRatan Gupta 250065905eSRatan Gupta 260065905eSRatan Guptadef main(): 27*93682256SPatrick Williams valid_commands = {"generate-cpp": generate_cpp} 280065905eSRatan Gupta parser = argparse.ArgumentParser( 29*93682256SPatrick Williams description="IPMI Sensor parser and code generator" 30*93682256SPatrick Williams ) 310065905eSRatan Gupta 320065905eSRatan Gupta parser.add_argument( 33*93682256SPatrick Williams "-i", 34*93682256SPatrick Williams "--sensor_yaml", 35*93682256SPatrick Williams dest="sensor_yaml", 36*93682256SPatrick Williams default="example.yaml", 37*93682256SPatrick Williams help="input sensor yaml file to parse", 38*93682256SPatrick Williams ) 390065905eSRatan Gupta 400065905eSRatan Gupta parser.add_argument( 41*93682256SPatrick Williams "-o", 42*93682256SPatrick Williams "--output-dir", 43*93682256SPatrick Williams dest="outputdir", 440065905eSRatan Gupta default=".", 45*93682256SPatrick Williams help="output directory", 46*93682256SPatrick Williams ) 470065905eSRatan Gupta 480065905eSRatan Gupta parser.add_argument( 49*93682256SPatrick Williams "command", 50*93682256SPatrick Williams metavar="COMMAND", 51*93682256SPatrick Williams type=str, 520065905eSRatan Gupta choices=valid_commands.keys(), 53*93682256SPatrick Williams help="Command to run.", 54*93682256SPatrick Williams ) 550065905eSRatan Gupta 560065905eSRatan Gupta args = parser.parse_args() 570065905eSRatan Gupta 58*93682256SPatrick Williams if not (os.path.isfile(args.sensor_yaml)): 590065905eSRatan Gupta sys.exit("Can not find input yaml file " + args.sensor_yaml) 600065905eSRatan Gupta 610065905eSRatan Gupta function = valid_commands[args.command] 620065905eSRatan Gupta function(args.sensor_yaml, args.outputdir) 630065905eSRatan Gupta 640065905eSRatan Gupta 65*93682256SPatrick Williamsif __name__ == "__main__": 660065905eSRatan Gupta script_dir = os.path.dirname(os.path.realpath(__file__)) 670065905eSRatan Gupta main() 68