1#!/usr/bin/env python3
2
3import os
4import sys
5import yaml
6import argparse
7from mako.template import Template
8
9
10def generate_cpp(sensor_yaml, output_dir):
11    with open(sensor_yaml, 'r') as f:
12        ifile = yaml.safe_load(f)
13        if not isinstance(ifile, dict):
14            ifile = {}
15
16        # Render the mako template
17
18        t = Template(filename=os.path.join(
19                     script_dir,
20                     "writesensor.mako.cpp"))
21
22        output_cpp = os.path.join(output_dir, "sensor-gen.cpp")
23        with open(output_cpp, 'w') as fd:
24            fd.write(t.render(sensorDict=ifile))
25
26
27def main():
28
29    valid_commands = {
30        'generate-cpp': generate_cpp
31    }
32    parser = argparse.ArgumentParser(
33        description="IPMI Sensor parser and code generator")
34
35    parser.add_argument(
36        '-i', '--sensor_yaml', dest='sensor_yaml',
37        default='example.yaml', help='input sensor yaml file to parse')
38
39    parser.add_argument(
40        "-o", "--output-dir", dest="outputdir",
41        default=".",
42        help="output directory")
43
44    parser.add_argument(
45        'command', metavar='COMMAND', type=str,
46        choices=valid_commands.keys(),
47        help='Command to run.')
48
49    args = parser.parse_args()
50
51    if (not (os.path.isfile(args.sensor_yaml))):
52        sys.exit("Can not find input yaml file " + args.sensor_yaml)
53
54    function = valid_commands[args.command]
55    function(args.sensor_yaml, args.outputdir)
56
57
58if __name__ == '__main__':
59    script_dir = os.path.dirname(os.path.realpath(__file__))
60    main()
61