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