diff --git a/scripts/sensor_gen.py b/scripts/sensor_gen.py
index f03bea8..f121c94 100755
--- a/scripts/sensor_gen.py
+++ b/scripts/sensor_gen.py
@@ -1,60 +1,67 @@
 #!/usr/bin/env python3
 
+import argparse
 import os
 import sys
+
 import yaml
-import argparse
 from mako.template import Template
 
 
 def generate_cpp(sensor_yaml, output_dir):
-    with open(sensor_yaml, 'r') as f:
+    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"))
+        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:
+        with open(output_cpp, "w") as fd:
             fd.write(t.render(sensorDict=ifile))
 
 
 def main():
-
-    valid_commands = {
-        'generate-cpp': generate_cpp
-    }
+    valid_commands = {"generate-cpp": generate_cpp}
     parser = argparse.ArgumentParser(
-        description="IPMI Sensor parser and code generator")
+        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')
+        "-i",
+        "--sensor_yaml",
+        dest="sensor_yaml",
+        default="example.yaml",
+        help="input sensor yaml file to parse",
+    )
 
     parser.add_argument(
-        "-o", "--output-dir", dest="outputdir",
+        "-o",
+        "--output-dir",
+        dest="outputdir",
         default=".",
-        help="output directory")
+        help="output directory",
+    )
 
     parser.add_argument(
-        'command', metavar='COMMAND', type=str,
+        "command",
+        metavar="COMMAND",
+        type=str,
         choices=valid_commands.keys(),
-        help='Command to run.')
+        help="Command to run.",
+    )
 
     args = parser.parse_args()
 
-    if (not (os.path.isfile(args.sensor_yaml))):
+    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__':
+if __name__ == "__main__":
     script_dir = os.path.dirname(os.path.realpath(__file__))
     main()
