#!/usr/bin/env python3 import argparse import os import sys import yaml from mako.template import Template def generate_cpp(sensor_yaml, output_dir): with open(sensor_yaml, "r") as f: ifile = yaml.safe_load(f) if not isinstance(ifile, dict): ifile = {} # Render the mako template t = Template(filename=os.path.join(script_dir, "writesensor.mako.cpp")) output_cpp = os.path.join(output_dir, "sensor-gen.cpp") with open(output_cpp, "w") as fd: fd.write(t.render(sensorDict=ifile)) def main(): valid_commands = {"generate-cpp": generate_cpp} parser = argparse.ArgumentParser( description="IPMI Sensor parser and code generator" ) parser.add_argument( "-i", "--sensor_yaml", dest="sensor_yaml", default="example.yaml", help="input sensor yaml file to parse", ) parser.add_argument( "-o", "--output-dir", dest="outputdir", default=".", help="output directory", ) parser.add_argument( "command", metavar="COMMAND", type=str, choices=valid_commands.keys(), help="Command to run.", ) args = parser.parse_args() if not (os.path.isfile(args.sensor_yaml)): sys.exit("Can not find input yaml file " + args.sensor_yaml) function = valid_commands[args.command] function(args.sensor_yaml, args.outputdir) if __name__ == "__main__": script_dir = os.path.dirname(os.path.realpath(__file__)) main()