diff --git a/bin/auto_status_file.py b/bin/auto_status_file.py
index d1614f3..c3f2544 100755
--- a/bin/auto_status_file.py
+++ b/bin/auto_status_file.py
@@ -4,86 +4,101 @@
 See help text for details.
 """
 
-import sys
-import subprocess
 import re
+import subprocess
+import sys
 
 save_dir_path = sys.path.pop(0)
 
-modules = ['gen_arg', 'gen_print', 'gen_valid', 'gen_misc', 'gen_cmd', 'var_funcs']
+modules = [
+    "gen_arg",
+    "gen_print",
+    "gen_valid",
+    "gen_misc",
+    "gen_cmd",
+    "var_funcs",
+]
 for module in modules:
     exec("from " + module + " import *")
 
 sys.path.insert(0, save_dir_path)
 
 parser = argparse.ArgumentParser(
-    usage='%(prog)s [OPTIONS]',
+    usage="%(prog)s [OPTIONS]",
     description="%(prog)s will create a status file path name adhering to the"
-                + " following pattern: <status dir path>/<prefix>.yymmdd."
-                + "hhmmss.status.  It will then run the command string and"
-                + " direct its stdout/stderr to the status file and optionally"
-                + " to stdout.  This dual output streaming will be"
-                + " accomplished using either the \"script\" or the \"tee\""
-                + " program.  %(prog)s will also set and export environment"
-                + " variable \"AUTO_STATUS_FILE_PATH\" for the benefit of"
-                + " child programs.",
+    + " following pattern: <status dir path>/<prefix>.yymmdd."
+    + "hhmmss.status.  It will then run the command string and"
+    + " direct its stdout/stderr to the status file and optionally"
+    + " to stdout.  This dual output streaming will be"
+    + ' accomplished using either the "script" or the "tee"'
+    + " program.  %(prog)s will also set and export environment"
+    + ' variable "AUTO_STATUS_FILE_PATH" for the benefit of'
+    + " child programs.",
     formatter_class=argparse.ArgumentDefaultsHelpFormatter,
-    prefix_chars='-+')
+    prefix_chars="-+",
+)
 
 parser.add_argument(
-    '--status_dir_path',
-    default='',
+    "--status_dir_path",
+    default="",
     help="The path to the directory where the status file will be created."
-         + "%(default)s The default value is obtained from environment"
-         + " variable \"${STATUS_DIR_PATH}\", if set or from \"${HOME}/"
-         + "status/\".")
+    + "%(default)s The default value is obtained from environment"
+    + ' variable "${STATUS_DIR_PATH}", if set or from "${HOME}/'
+    + 'status/".',
+)
 
 parser.add_argument(
-    '--prefix',
-    default='',
+    "--prefix",
+    default="",
     help="The prefix for the generated file name.%(default)s The default value"
-         + " is the command portion (i.e. the first token) of the command"
-         + " string.")
+    + " is the command portion (i.e. the first token) of the command"
+    + " string.",
+)
 
 parser.add_argument(
-    '--status_file_name',
-    default='',
+    "--status_file_name",
+    default="",
     help="This allows the user to explicitly specify the status file name.  If"
-         + " this argument is not used, %(prog)s composes a status file name."
-         + "  If this argument is specified, the \"--prefix\" argument is"
-         + " ignored.")
+    + " this argument is not used, %(prog)s composes a status file name."
+    + '  If this argument is specified, the "--prefix" argument is'
+    + " ignored.",
+)
 
 parser.add_argument(
-    '--stdout',
+    "--stdout",
     default=1,
     type=int,
     choices=[1, 0],
     help="Indicates that stdout/stderr from the command string execution"
-         + " should be written to stdout as well as to the status file.")
+    + " should be written to stdout as well as to the status file.",
+)
 
 parser.add_argument(
-    '--tee',
+    "--tee",
     default=1,
     type=int,
     choices=[1, 0],
-    help="Indicates that \"tee\" rather than \"script\" should be used.")
+    help='Indicates that "tee" rather than "script" should be used.',
+)
 
 parser.add_argument(
-    '--show_url',
+    "--show_url",
     default=0,
     type=int,
     choices=[1, 0],
     help="Indicates that the status file path shown should be shown in the"
-         + " form of a url.  If the output is to be viewed from a browser,"
-         + " this may well become a clickable link.  Note that the"
-         + " get_file_path_url.py program must be found in the \"PATH\""
-         + " environment variable for this argument to be effective.")
+    + " form of a url.  If the output is to be viewed from a browser,"
+    + " this may well become a clickable link.  Note that the"
+    + ' get_file_path_url.py program must be found in the "PATH"'
+    + " environment variable for this argument to be effective.",
+)
 
 parser.add_argument(
-    'command_string',
-    default='',
-    nargs='*',
-    help="The command string to be run.%(default)s")
+    "command_string",
+    default="",
+    nargs="*",
+    help="The command string to be run.%(default)s",
+)
 
 # Populate stock_list with options we want.
 stock_list = [("test_mode", 0), ("quiet", 1), ("debug", 0)]
@@ -103,9 +118,9 @@
     valid_value(command_string)
 
     if status_dir_path == "":
-        status_dir_path = \
-            os.environ.get("STATUS_DIR_PATH",
-                           os.environ.get("HOME") + "/status/")
+        status_dir_path = os.environ.get(
+            "STATUS_DIR_PATH", os.environ.get("HOME") + "/status/"
+        )
     status_dir_path = add_trailing_slash(status_dir_path)
     set_pgm_arg(status_dir_path)
     valid_dir_path(status_dir_path)
@@ -126,9 +141,9 @@
 
     status_file_path = status_dir_path + status_file_name
     # Set environment variable for the benefit of child programs.
-    os.environ['AUTO_STATUS_FILE_PATH'] = status_file_path
+    os.environ["AUTO_STATUS_FILE_PATH"] = status_file_path
     # Set deprecated but still used AUTOSCRIPT_STATUS_FILE_PATH value.
-    os.environ['AUTOSCRIPT_STATUS_FILE_PATH'] = status_file_path
+    os.environ["AUTOSCRIPT_STATUS_FILE_PATH"] = status_file_path
 
 
 def script_func(command_string, status_file_path):
@@ -141,9 +156,15 @@
     status_file_path                The path to the status file which is to contain a copy of all stdout.
     """
 
-    cmd_buf = "script -a -q -f " + status_file_path + " -c '" \
-        + escape_bash_quotes(command_string) + " ; printf \"\\n" \
-        + sprint_varx(ret_code_str, "${?}").rstrip("\n") + "\\n\"'"
+    cmd_buf = (
+        "script -a -q -f "
+        + status_file_path
+        + " -c '"
+        + escape_bash_quotes(command_string)
+        + ' ; printf "\\n'
+        + sprint_varx(ret_code_str, "${?}").rstrip("\n")
+        + "\\n\"'"
+    )
     qprint_issuing(cmd_buf)
     sub_proc = subprocess.Popen(cmd_buf, shell=True)
     sub_proc.communicate()
@@ -152,8 +173,13 @@
     # Retrieve return code by examining ret_code_str output statement from status file.
     # Example text to be analyzed.
     # auto_status_file_ret_code:                        127
-    cmd_buf = "tail -n 10 " + status_file_path + " | egrep -a \"" \
-        + ret_code_str + ":[ ]+\""
+    cmd_buf = (
+        "tail -n 10 "
+        + status_file_path
+        + ' | egrep -a "'
+        + ret_code_str
+        + ':[ ]+"'
+    )
     rc, output = shell_cmd(cmd_buf)
     key, value = parse_key_value(output)
     shell_rc = int(value)
@@ -170,8 +196,12 @@
     status_file_path                The path to the status file which is to contain a copy of all stdout.
     """
 
-    cmd_buf = "set -o pipefail ; " + command_string + " 2>&1 | tee -a " \
+    cmd_buf = (
+        "set -o pipefail ; "
+        + command_string
+        + " 2>&1 | tee -a "
         + status_file_path
+    )
     qprint_issuing(cmd_buf)
     sub_proc = subprocess.Popen(cmd_buf, shell=True)
     sub_proc.communicate()
@@ -187,10 +217,11 @@
 
 
 def main():
-
     gen_setup()
 
-    set_term_options(term_requests={'pgm_names': [command_string.split(" ")[0]]})
+    set_term_options(
+        term_requests={"pgm_names": [command_string.split(" ")[0]]}
+    )
 
     global ret_code_str
     ret_code_str = re.sub("\\.py$", "", pgm_name) + "_ret_code"
@@ -202,8 +233,9 @@
             show_url = 0
             set_pgm_arg(show_url)
         else:
-            shell_rc, status_file_url = shell_cmd("get_file_path_url.py "
-                                                  + status_file_path)
+            shell_rc, status_file_url = shell_cmd(
+                "get_file_path_url.py " + status_file_path
+            )
             status_file_url = status_file_url.rstrip("\n")
 
     # Print status file path/url to stdout and to status file.
diff --git a/bin/event_notification_util.py b/bin/event_notification_util.py
index 380a120..9c52176 100755
--- a/bin/event_notification_util.py
+++ b/bin/event_notification_util.py
@@ -8,39 +8,41 @@
 
 save_dir_path = sys.path.pop(0)
 
-modules = ['gen_arg', 'gen_print', 'gen_valid', 'event_notification']
+modules = ["gen_arg", "gen_print", "gen_valid", "event_notification"]
 for module in modules:
     exec("from " + module + " import *")
 
 sys.path.insert(0, save_dir_path)
 
 parser = argparse.ArgumentParser(
-    usage='%(prog)s [OPTIONS]',
+    usage="%(prog)s [OPTIONS]",
     description="%(prog)s will subscribe and receive event notifications when "
-                + "properties change for the given dbus path.",
+    + "properties change for the given dbus path.",
     formatter_class=argparse.ArgumentDefaultsHelpFormatter,
-    prefix_chars='-+')
+    prefix_chars="-+",
+)
 parser.add_argument(
-    '--host',
-    default='',
-    help='The host name or IP of the system to subscribe to.')
+    "--host",
+    default="",
+    help="The host name or IP of the system to subscribe to.",
+)
 parser.add_argument(
-    '--username',
-    default='root',
-    help='The username for the host system.')
+    "--username", default="root", help="The username for the host system."
+)
 parser.add_argument(
-    '--password',
-    default='',
-    help='The password for the host system.')
+    "--password", default="", help="The password for the host system."
+)
 parser.add_argument(
-    '--dbus_path',
-    default='',
-    help='The path to be monitored (e.g. "/xyz/openbmc_project/sensors").')
+    "--dbus_path",
+    default="",
+    help='The path to be monitored (e.g. "/xyz/openbmc_project/sensors").',
+)
 parser.add_argument(
-    '--enable_trace',
+    "--enable_trace",
     choices=[0, 1],
     default=0,
-    help='Indicates that trace needs to be enabled.')
+    help="Indicates that trace needs to be enabled.",
+)
 
 
 # Populate stock_list with options we want.
diff --git a/bin/generate_inventory b/bin/generate_inventory
index 80f725e..0c14454 100755
--- a/bin/generate_inventory
+++ b/bin/generate_inventory
@@ -4,57 +4,67 @@
 fields from the YAML phosphor-dbus-interfaces repository.
 """
 
-from gen_print import *
-
-import sys
-import os
-import yaml
 import json
+import os
+import sys
+
+import yaml
+from gen_print import *
 
 lib_path = sys.path[0] + "/../lib"
 sys.path.insert(0, lib_path)
 
 # This list will be longer when more development codes are available.
-inventory_items = ['fru', 'core', 'fan', 'fan_wc', 'gpu']
+inventory_items = ["fru", "core", "fan", "fan_wc", "gpu"]
 print_var(inventory_items)
-fru_inventory_file_path = 'inventory.py'
+fru_inventory_file_path = "inventory.py"
 print_var(fru_inventory_file_path)
 
 # Properties inventory list
 yaml_inventory_list = []
 
 # Clone the phosphor-dbus-interfaces repository
-cmd_buf = 'git clone https://github.com/openbmc/phosphor-dbus-interfaces'
+cmd_buf = "git clone https://github.com/openbmc/phosphor-dbus-interfaces"
 os.system(cmd_buf)
 
-repo_subdir_path = '/phosphor-dbus-interfaces/xyz/openbmc_project/'
+repo_subdir_path = "/phosphor-dbus-interfaces/xyz/openbmc_project/"
 base_dir_path = os.getcwd() + repo_subdir_path
 
 # yaml file paths for FRU
-yaml_fru_list = ['Inventory/Item.interface.yaml',
-                 'Inventory/Decorator/Asset.interface.yaml',
-                 'Inventory/Decorator/Revision.interface.yaml',
-                 'Inventory/Decorator/Replaceable.interface.yaml',
-                 'Inventory/Decorator/Cacheable.interface.yaml',
-                 'State/Decorator/OperationalStatus.interface.yaml', ]
+yaml_fru_list = [
+    "Inventory/Item.interface.yaml",
+    "Inventory/Decorator/Asset.interface.yaml",
+    "Inventory/Decorator/Revision.interface.yaml",
+    "Inventory/Decorator/Replaceable.interface.yaml",
+    "Inventory/Decorator/Cacheable.interface.yaml",
+    "State/Decorator/OperationalStatus.interface.yaml",
+]
 
 # yaml file paths for CORE.
-yaml_core_list = ['Inventory/Item.interface.yaml',
-                  'State/Decorator/OperationalStatus.interface.yaml', ]
+yaml_core_list = [
+    "Inventory/Item.interface.yaml",
+    "State/Decorator/OperationalStatus.interface.yaml",
+]
 
 # yaml file paths for fan.
-yaml_fan_list = ['Inventory/Item.interface.yaml',
-                 'Inventory/Decorator/MeetsMinimumShipLevel.interface.yaml',
-                 'State/Decorator/OperationalStatus.interface.yaml', ]
+yaml_fan_list = [
+    "Inventory/Item.interface.yaml",
+    "Inventory/Decorator/MeetsMinimumShipLevel.interface.yaml",
+    "State/Decorator/OperationalStatus.interface.yaml",
+]
 
 # yaml file paths for fan_wc (fans in water-cooled system).
-yaml_fan_wc_list = ['Inventory/Item.interface.yaml',
-                    'Inventory/Decorator/MeetsMinimumShipLevel.interface.yaml', ]
+yaml_fan_wc_list = [
+    "Inventory/Item.interface.yaml",
+    "Inventory/Decorator/MeetsMinimumShipLevel.interface.yaml",
+]
 
 # yaml file paths for GPU.
-yaml_gpu_list = ['Inventory/Item.interface.yaml',
-                 'Inventory/Decorator/Replaceable.interface.yaml',
-                 'State/Decorator/OperationalStatus.interface.yaml', ]
+yaml_gpu_list = [
+    "Inventory/Item.interface.yaml",
+    "Inventory/Decorator/Replaceable.interface.yaml",
+    "State/Decorator/OperationalStatus.interface.yaml",
+]
 
 # Append to inventory list
 yaml_inventory_list.append(yaml_fru_list)
@@ -79,16 +89,18 @@
         f = open(yaml_file_path)
         yaml_data = yaml.safe_load(f)
         f.close()
-        for item in range(0, len(yaml_data['properties'])):
-            tmp_data = yaml_data['properties'][item]['name']
+        for item in range(0, len(yaml_data["properties"])):
+            tmp_data = yaml_data["properties"][item]["name"]
             inventory_dict[str(inventory_items[inv_index])].append(tmp_data)
 
 # Pretty print json formatter
-data = json.dumps(inventory_dict,
-                  indent=4,
-                  sort_keys=True,
-                  default=str,
-                  separators=(',', ':'))
+data = json.dumps(
+    inventory_dict,
+    indent=4,
+    sort_keys=True,
+    default=str,
+    separators=(",", ":"),
+)
 
 # Check if there is mismatch in data vs expect list
 if len(inventory_dict) != len(inventory_items):
@@ -100,8 +112,8 @@
 # Write dictionary data to inventory file
 print("\nGenerated Inventory item json format\n")
 print(data)
-out = open(fru_inventory_file_path, 'w')
-out.write('inventory_dict = ')
+out = open(fru_inventory_file_path, "w")
+out.write("inventory_dict = ")
 out.write(data)
 
 out.close()
diff --git a/bin/generate_testsuite_info.py b/bin/generate_testsuite_info.py
index 6392145..7f43d62 100755
--- a/bin/generate_testsuite_info.py
+++ b/bin/generate_testsuite_info.py
@@ -5,54 +5,55 @@
 Refer to https://robot-framework.readthedocs.io/en/3.0.1/autodoc/robot.parsing.html
 """
 
+import os
+import sys
+
 from gen_arg import *
 from gen_print import *
 from gen_valid import *
 from robot.parsing.model import TestData
 
-import sys
-import os
-
 sys.path.append(os.path.join(os.path.dirname(__file__), "../lib"))
 
 # Set exit_on_error for gen_valid functions.
 set_exit_on_error(True)
 
-valid_options = ['name', 'tags', 'doc', 'all']
+valid_options = ["name", "tags", "doc", "all"]
 
 parser = argparse.ArgumentParser(
-    usage='%(prog)s [OPTIONS]',
-    description=";%(prog)s will print test suite information to stdout. This \
-                  information consists of any and/or all of the following: \
-                  the suite name, test case names, tag names and doc strings. \
-                  Example for generated test case names \
-                  tests/test_basic_poweron.robot \
-                  Verify Front And Rear LED At Standby \
-                  Power On Test \
-                  Check For Application Failures \
-                  Verify Uptime Average Against Threshold \
-                  Test SSH And IPMI Connections",
+    usage="%(prog)s [OPTIONS]",
+    description=(
+        ";%(prog)s will print test suite information to stdout. This          "
+        "         information consists of any and/or all of the following:    "
+        "               the suite name, test case names, tag names and doc"
+        " strings.                   Example for generated test case names    "
+        "               tests/test_basic_poweron.robot                  "
+        " Verify Front And Rear LED At Standby                   Power On Test"
+        "                   Check For Application Failures                  "
+        " Verify Uptime Average Against Threshold                   Test SSH"
+        " And IPMI Connections"
+    ),
     formatter_class=argparse.ArgumentDefaultsHelpFormatter,
-    prefix_chars='-+')
+    prefix_chars="-+",
+)
 
 parser.add_argument(
-    '--source_path',
-    '-s',
-    help='The robot test file or directory path.')
+    "--source_path", "-s", help="The robot test file or directory path."
+)
 
 parser.add_argument(
-    '--option',
-    '-o',
+    "--option",
+    "-o",
     default="name",
-    help='Test case attribute name.  This may be any one of the following:\n'
-    + sprint_var(valid_options))
+    help="Test case attribute name.  This may be any one of the following:\n"
+    + sprint_var(valid_options),
+)
 
 # Populate stock_list with options we want.
 stock_list = [("test_mode", 0), ("quiet", 0), ("debug", 0)]
 
 
-def exit_function(signal_number=0,
-                  frame=None):
+def exit_function(signal_number=0, frame=None):
     r"""
     Execute whenever the program ends normally or with the signals that we
     catch (i.e. TERM, INT).
@@ -65,8 +66,7 @@
     qprint_pgm_footer()
 
 
-def signal_handler(signal_number,
-                   frame):
+def signal_handler(signal_number, frame):
     r"""
     Handle signals.  Without a function to catch a SIGTERM or SIGINT, the
     program would terminate immediately with return code 143 and without
@@ -108,9 +108,11 @@
     if os.path.isfile(source_path):
         file_paths = [source_path]
     else:
-        file_paths = [os.path.join(path, file)
-                      for (path, dirs, files) in os.walk(source_path)
-                      for file in files]
+        file_paths = [
+            os.path.join(path, file)
+            for (path, dirs, files) in os.walk(source_path)
+            for file in files
+        ]
 
     for file_path in file_paths:
         print(file_path)
@@ -149,7 +151,6 @@
 
 
 def main():
-
     gen_get_options(parser, stock_list)
 
     validate_parms()
diff --git a/bin/obmc_ser_num b/bin/obmc_ser_num
index 8d86099..9f207b1 100755
--- a/bin/obmc_ser_num
+++ b/bin/obmc_ser_num
@@ -4,14 +4,14 @@
 This program will get the system serial number from an OBMC machine and print it to stdout.
 """
 
+import os
+import sys
+
+import requests
 from gen_arg import *
 from gen_print import *
 from gen_valid import *
 
-import sys
-import os
-import requests
-
 save_path_0 = sys.path[0]
 del sys.path[0]
 
@@ -21,33 +21,35 @@
 logging.captureWarnings(True)
 
 parser = argparse.ArgumentParser(
-    usage='%(prog)s [OPTIONS]',
+    usage="%(prog)s [OPTIONS]",
     description="%(prog)s will get the system serial number from an OBMC"
     + " machine and print it to stdout as follows:\n\n"
     + "mch_ser_num:<ser num>",
     formatter_class=argparse.ArgumentDefaultsHelpFormatter,
-    prefix_chars='-+')
+    prefix_chars="-+",
+)
 
 parser.add_argument(
-    '--openbmc_username',
+    "--openbmc_username",
     default="root",
-    help='The username for communicating with the OpenBMC machine.')
+    help="The username for communicating with the OpenBMC machine.",
+)
 
 parser.add_argument(
-    '--openbmc_password',
+    "--openbmc_password",
     default="0penBmc",
-    help='The password for communicating with the OpenBMC machine.')
+    help="The password for communicating with the OpenBMC machine.",
+)
 
 parser.add_argument(
-    'openbmc_host',
-    help='The host name or IP address of the OpenBMC machine.')
+    "openbmc_host", help="The host name or IP address of the OpenBMC machine."
+)
 
 # Populate stock_list with options we want.
 stock_list = [("test_mode", 0), ("quiet", 1)]
 
 
-def exit_function(signal_number=0,
-                  frame=None):
+def exit_function(signal_number=0, frame=None):
     r"""
     Execute whenever the program ends normally or with the signals that we catch (i.e. TERM, INT).
     """
@@ -58,8 +60,7 @@
     qprint_pgm_footer()
 
 
-def signal_handler(signal_number,
-                   frame):
+def signal_handler(signal_number, frame):
     r"""
     Handle signals.  Without a function to catch a SIGTERM or SIGINT, our program would terminate immediately
     with return code 143 and without calling our exit_function.
@@ -96,7 +97,6 @@
 
 
 def main():
-
     if not gen_get_options(parser, stock_list):
         return False
 
@@ -109,12 +109,14 @@
 
     http_prefix = create_http_prefix(openbmc_host)
 
-    command = http_prefix + 'login'
+    command = http_prefix + "login"
     qprint_issuing(command)
-    resp = session.post(command,
-                        json={'data': [openbmc_username, openbmc_password]},
-                        verify=False)
-    if resp.json()['status'] != 'ok':
+    resp = session.post(
+        command,
+        json={"data": [openbmc_username, openbmc_password]},
+        verify=False,
+    )
+    if resp.json()["status"] != "ok":
         json = resp.json()
         print_error_report("http request failed:\n" + sprint_var(command))
         raise Exception("Login failed.\n")
@@ -123,15 +125,18 @@
     qprint_issuing(command)
     resp = session.get(command, verify=False)
     json = resp.json()
-    if json['status'] != 'ok':
+    if json["status"] != "ok":
         print_error_report("http request failed:\n" + sprint_var(command))
         raise Exception("http request failed.\n")
 
     try:
-        mch_ser_num = json['data']['SerialNumber']
+        mch_ser_num = json["data"]["SerialNumber"]
     except KeyError:
-        print_error_report("Failed to find 'SerialNumber' key in the"
-                           + " following data:\n" + sprint_var(json))
+        print_error_report(
+            "Failed to find 'SerialNumber' key in the"
+            + " following data:\n"
+            + sprint_var(json)
+        )
         return False
     print_var(mch_ser_num, 0, 0, 0)
 
diff --git a/bin/plug_ins/Auto_reboot/cp_master b/bin/plug_ins/Auto_reboot/cp_master
index 7e1b274..8f12588 100755
--- a/bin/plug_ins/Auto_reboot/cp_master
+++ b/bin/plug_ins/Auto_reboot/cp_master
@@ -10,7 +10,15 @@
 
 save_dir_path = sys.path.pop(0)
 
-modules = ['gen_arg', 'gen_print', 'gen_valid', 'gen_misc', 'gen_cmd', 'gen_plug_in_utils', 'gen_call_robot']
+modules = [
+    "gen_arg",
+    "gen_print",
+    "gen_valid",
+    "gen_misc",
+    "gen_cmd",
+    "gen_plug_in_utils",
+    "gen_call_robot",
+]
 for module in modules:
     exec("from " + module + " import *")
 
@@ -21,22 +29,27 @@
 set_exit_on_error(True)
 
 parser = argparse.ArgumentParser(
-    usage='%(prog)s [OPTIONS]',
-    description="%(prog)s will set the auto_boot policy according to the user's wishes.",
+    usage="%(prog)s [OPTIONS]",
+    description=(
+        "%(prog)s will set the auto_boot policy according to the user's"
+        " wishes."
+    ),
     formatter_class=argparse.RawTextHelpFormatter,
-    prefix_chars='-+')
+    prefix_chars="-+",
+)
 
 
 # Populate stock_list with options we want.
-stock_list = [("test_mode", get_plug_default("test_mode", 0)),
-              ("quiet", get_plug_default("quiet", 0)),
-              ("debug", get_plug_default("debug", 0))]
+stock_list = [
+    ("test_mode", get_plug_default("test_mode", 0)),
+    ("quiet", get_plug_default("quiet", 0)),
+    ("debug", get_plug_default("debug", 0)),
+]
 
 AUTO_REBOOT_DISABLE = "1"
 
 
 def validate_parms():
-
     r"""
     Validate program parameters, etc.  Return True or False (i.e. pass/fail) accordingly.
     """
@@ -53,10 +66,9 @@
 
 
 def main():
-
     gen_setup()
 
-    set_term_options(term_requests='children')
+    set_term_options(term_requests="children")
 
     print_plug_in_header()
 
@@ -67,18 +79,36 @@
 
     lib_file_path = init_robot_file_path("lib/utils.robot")
 
-    REDFISH_SUPPORT_TRANS_STATE = int(os.environ.get('REDFISH_SUPPORT_TRANS_STATE', 0)) or \
-        int(os.environ.get('AUTOBOOT_REDFISH_SUPPORT_TRANS_STATE', 0))
+    REDFISH_SUPPORT_TRANS_STATE = int(
+        os.environ.get("REDFISH_SUPPORT_TRANS_STATE", 0)
+    ) or int(os.environ.get("AUTOBOOT_REDFISH_SUPPORT_TRANS_STATE", 0))
 
     enable_auto_reboot = 1 - AUTO_REBOOT_DISABLE
     print_var(enable_auto_reboot)
     keyword_string = "Set Auto Reboot Setting  ${%i}" % enable_auto_reboot
 
-    cmd_buf = create_robot_cmd_string("extended/run_keyword.robot", OPENBMC_HOST, SSH_PORT, HTTPS_PORT,
-                                      REST_USERNAME, REST_PASSWORD, OPENBMC_USERNAME, OPENBMC_PASSWORD,
-                                      IPMI_USERNAME, IPMI_PASSWORD, REDFISH_SUPPORT_TRANS_STATE,
-                                      keyword_string, lib_file_path, quiet, test_mode, debug, outputdir,
-                                      output, log, report)
+    cmd_buf = create_robot_cmd_string(
+        "extended/run_keyword.robot",
+        OPENBMC_HOST,
+        SSH_PORT,
+        HTTPS_PORT,
+        REST_USERNAME,
+        REST_PASSWORD,
+        OPENBMC_USERNAME,
+        OPENBMC_PASSWORD,
+        IPMI_USERNAME,
+        IPMI_PASSWORD,
+        REDFISH_SUPPORT_TRANS_STATE,
+        keyword_string,
+        lib_file_path,
+        quiet,
+        test_mode,
+        debug,
+        outputdir,
+        output,
+        log,
+        report,
+    )
 
     retry_count = 3
     while not robot_cmd_fnc(cmd_buf):
diff --git a/bin/plug_ins/FFDC/cp_ffdc_check b/bin/plug_ins/FFDC/cp_ffdc_check
index 8d51271..b928658 100755
--- a/bin/plug_ins/FFDC/cp_ffdc_check
+++ b/bin/plug_ins/FFDC/cp_ffdc_check
@@ -1,35 +1,41 @@
 #!/usr/bin/env python3
 
+from gen_arg import *
+from gen_call_robot import *
+from gen_cmd import *
+from gen_misc import *
+from gen_plug_in_utils import *
 from gen_print import *
 from gen_valid import *
-from gen_arg import *
-from gen_misc import *
-from gen_cmd import *
-from gen_plug_in_utils import *
-from gen_call_robot import *
 
 # Set exit_on_error for gen_valid functions.
 set_exit_on_error(True)
 
 parser = argparse.ArgumentParser(
-    usage='%(prog)s [OPTIONS]',
-    description="%(prog)s will determine whether FFDC should be collected.  If so, it will return "
-    + repr(dump_ffdc_rc()) + ".",
+    usage="%(prog)s [OPTIONS]",
+    description=(
+        "%(prog)s will determine whether FFDC should be collected.  If so, it"
+        " will return "
+    )
+    + repr(dump_ffdc_rc())
+    + ".",
     formatter_class=argparse.ArgumentDefaultsHelpFormatter,
-    prefix_chars='-+')
+    prefix_chars="-+",
+)
 
 # The stock_list will be passed to gen_get_options.  We populate it with the names of stock parm options we
 # want.  These stock parms are pre-defined by gen_get_options.
-stock_list = [("test_mode", get_plug_default("test_mode", 0)),
-              ("quiet", get_plug_default("quiet", 0)),
-              ("debug", get_plug_default("debug", 0))]
+stock_list = [
+    ("test_mode", get_plug_default("test_mode", 0)),
+    ("quiet", get_plug_default("quiet", 0)),
+    ("debug", get_plug_default("debug", 0)),
+]
 
 # For now we are hard-coding this value vs adding a soft_errors=boolean entry in the parm_def file.
 FFDC_SOFT_ERRORS = 1
 
 
-def exit_function(signal_number=0,
-                  frame=None):
+def exit_function(signal_number=0, frame=None):
     r"""
     Execute whenever the program ends normally or with the signals that we catch (i.e. TERM, INT).
 
@@ -52,14 +58,15 @@
 
 
 def main():
-
     gen_setup()
 
     print_plug_in_header()
 
     if FFDC_COMMAND.upper() == "FAIL":
         if AUTOBOOT_BOOT_SUCCESS == "0":
-            print_timen("The caller wishes to dump FFDC after each boot failure.")
+            print_timen(
+                "The caller wishes to dump FFDC after each boot failure."
+            )
             exit(dump_ffdc_rc())
     elif FFDC_COMMAND.upper() == "ALL":
         print_timen("The caller wishes to dump FFDC after each boot test.")
@@ -73,8 +80,10 @@
         # Check the num_error_logs value left by the Soft_errors plug-in.
         num_error_logs = int(restore_plug_in_value(0, "Soft_errors"))
         if num_error_logs > 0:
-            print_timen("The \"Soft_errors\" plug-in found soft_errors and the"
-                        + " caller wishes to dump FFDC on soft errors.")
+            print_timen(
+                'The "Soft_errors" plug-in found soft_errors and the'
+                + " caller wishes to dump FFDC on soft errors."
+            )
             exit(dump_ffdc_rc())
 
     print_timen("The caller does not wish for any FFDC to be collected.")
diff --git a/bin/plug_ins/Soft_errors/cp_post_boot b/bin/plug_ins/Soft_errors/cp_post_boot
index 9f9d515..649fd31 100755
--- a/bin/plug_ins/Soft_errors/cp_post_boot
+++ b/bin/plug_ins/Soft_errors/cp_post_boot
@@ -1,13 +1,13 @@
 #!/usr/bin/env python3
 
+from gen_arg import *
+from gen_call_robot import *
+from gen_cmd import *
+from gen_misc import *
+from gen_plug_in_utils import *
 from gen_print import *
 from gen_valid import *
-from gen_arg import *
-from gen_misc import *
-from gen_cmd import *
 from var_funcs import *
-from gen_plug_in_utils import *
-from gen_call_robot import *
 
 # Set exit_on_error for gen_valid functions.
 set_exit_on_error(True)
@@ -15,23 +15,25 @@
 
 
 parser = argparse.ArgumentParser(
-    usage='%(prog)s [OPTIONS]',
+    usage="%(prog)s [OPTIONS]",
     description="%(prog)s will calculate the value of num_err_logs and"
     + " save it as a plug-in value for the benefit of the FFDC plug-in."
     + "  The FFDC plug-in can use that data to decide whether to collect"
     + " FFDC data.",
     formatter_class=argparse.ArgumentDefaultsHelpFormatter,
-    prefix_chars='-+')
+    prefix_chars="-+",
+)
 
 # The stock_list will be passed to gen_get_options.  We populate it with the names of stock parm options we
 # want.  These stock parms are pre-defined by gen_get_options.
-stock_list = [("test_mode", 0),
-              ("quiet", get_plug_default("quiet", 0)),
-              ("debug", get_plug_default("debug", 0))]
+stock_list = [
+    ("test_mode", 0),
+    ("quiet", get_plug_default("quiet", 0)),
+    ("debug", get_plug_default("debug", 0)),
+]
 
 
-def exit_function(signal_number=0,
-                  frame=None):
+def exit_function(signal_number=0, frame=None):
     r"""
     Execute whenever the program ends normally or with the signals that we catch (i.e. TERM, INT).
 
@@ -53,73 +55,116 @@
     global AUTOSCRIPT_STATUS_FILE_PATH
     # AUTOSCRIPT_STATUS_FILE_PATH is set when we're called by autoscript.  For this program to work
     # correctly, it must be called with autoscript.
-    AUTOSCRIPT_STATUS_FILE_PATH = os.environ.get("AUTOSCRIPT_STATUS_FILE_PATH", "")
+    AUTOSCRIPT_STATUS_FILE_PATH = os.environ.get(
+        "AUTOSCRIPT_STATUS_FILE_PATH", ""
+    )
     valid_value(AUTOSCRIPT_STATUS_FILE_PATH)
     valid_value(AUTOBOOT_OPENBMC_HOST)
 
 
 def main():
-
     gen_setup()
 
     print_plug_in_header()
 
     # Get the number of error logs from the BMC.
     init_robot_out_parms(get_plug_in_package_name() + "." + pgm_name + ".")
-    high_sev_elogs_file_path = AUTOBOOT_FFDC_DIR_PATH + AUTOBOOT_FFDC_PREFIX + "high_severity_errorlog.json"
+    high_sev_elogs_file_path = (
+        AUTOBOOT_FFDC_DIR_PATH
+        + AUTOBOOT_FFDC_PREFIX
+        + "high_severity_errorlog.json"
+    )
     lib_file_path = init_robot_file_path("lib/logging_utils.robot")
     lib_file_path += ":" + init_robot_file_path("lib/gen_robot_print.py")
     set_mod_global(lib_file_path)
 
-    REDFISH_SUPPORT_TRANS_STATE = int(os.environ.get('REDFISH_SUPPORT_TRANS_STATE', 0))
+    REDFISH_SUPPORT_TRANS_STATE = int(
+        os.environ.get("REDFISH_SUPPORT_TRANS_STATE", 0)
+    )
     if not REDFISH_SUPPORT_TRANS_STATE:
         try:
             from robot.libraries.BuiltIn import BuiltIn
-            REDFISH_SUPPORT_TRANS_STATE = \
-                int(BuiltIn().get_variable_value("${REDFISH_SUPPORT_TRANS_STATE}", default=0))
+
+            REDFISH_SUPPORT_TRANS_STATE = int(
+                BuiltIn().get_variable_value(
+                    "${REDFISH_SUPPORT_TRANS_STATE}", default=0
+                )
+            )
         except Exception:
             pass
 
-    keyword_redfish_strings = \
-        [
-            "${error_logs}=  Get Redfish Event Logs  &{filter_low_severity_errlogs}",
-            "${num_error_logs}=  Get Length  ${error_logs}",
-            "Rprint Vars  num_error_logs",
-            "${json_string}=  Evaluate  json.dumps($error_logs, indent=4)  modules=json",
-            "Append To File  " + high_sev_elogs_file_path + "  ${json_string}"
-        ]
+    keyword_redfish_strings = [
+        (
+            "${error_logs}=  Get Redfish Event Logs "
+            " &{filter_low_severity_errlogs}"
+        ),
+        "${num_error_logs}=  Get Length  ${error_logs}",
+        "Rprint Vars  num_error_logs",
+        (
+            "${json_string}=  Evaluate  json.dumps($error_logs, indent=4) "
+            " modules=json"
+        ),
+        "Append To File  " + high_sev_elogs_file_path + "  ${json_string}",
+    ]
 
-    keyword_strings = \
-        [
-            "${error_logs}=  Get Error Logs  &{filter_low_severity_errlogs}",
-            "${num_error_logs}=  Get Length  ${error_logs}",
-            "Rprint Vars  num_error_logs",
-            "${json_string}=  Evaluate  json.dumps($error_logs, indent=4)  modules=json",
-            "Append To File  " + high_sev_elogs_file_path + "  ${json_string}"
-        ]
+    keyword_strings = [
+        "${error_logs}=  Get Error Logs  &{filter_low_severity_errlogs}",
+        "${num_error_logs}=  Get Length  ${error_logs}",
+        "Rprint Vars  num_error_logs",
+        (
+            "${json_string}=  Evaluate  json.dumps($error_logs, indent=4) "
+            " modules=json"
+        ),
+        "Append To File  " + high_sev_elogs_file_path + "  ${json_string}",
+    ]
 
     if REDFISH_SUPPORT_TRANS_STATE:
-        keyword_string = ' ; '.join(keyword_redfish_strings)
+        keyword_string = " ; ".join(keyword_redfish_strings)
     else:
-        keyword_string = ' ; '.join(keyword_strings)
+        keyword_string = " ; ".join(keyword_strings)
 
     set_mod_global(keyword_string)
-    cmd_buf = create_robot_cmd_string("extended/run_keyword.robot", OPENBMC_HOST, SSH_PORT, HTTPS_PORT,
-                                      REST_USERNAME, REST_PASSWORD, OPENBMC_USERNAME, OPENBMC_PASSWORD,
-                                      keyword_string, lib_file_path, quiet,
-                                      test_mode, debug, outputdir, output, log, report)
+    cmd_buf = create_robot_cmd_string(
+        "extended/run_keyword.robot",
+        OPENBMC_HOST,
+        SSH_PORT,
+        HTTPS_PORT,
+        REST_USERNAME,
+        REST_PASSWORD,
+        OPENBMC_USERNAME,
+        OPENBMC_PASSWORD,
+        keyword_string,
+        lib_file_path,
+        quiet,
+        test_mode,
+        debug,
+        outputdir,
+        output,
+        log,
+        report,
+    )
     if not robot_cmd_fnc(cmd_buf):
         exit(1)
     # The output contains the num_error_logs value which we will isolate with egrep.
-    rc, out_buf = shell_cmd("egrep '^num_error_logs:[ ]' " + AUTOSCRIPT_STATUS_FILE_PATH, quiet=1,
-                            print_output=0)
+    rc, out_buf = shell_cmd(
+        "egrep '^num_error_logs:[ ]' " + AUTOSCRIPT_STATUS_FILE_PATH,
+        quiet=1,
+        print_output=0,
+    )
     result = key_value_outbuf_to_dict(out_buf)
-    num_error_logs = int(result['num_error_logs'])
+    num_error_logs = int(result["num_error_logs"])
     save_plug_in_value(num_error_logs)
     if num_error_logs > 0:
-        qprint_timen("Adding the name of our high severity error logs FFDC file "
-                     + "to the appropriate file list.")
-        shell_cmd("echo " + high_sev_elogs_file_path + " > " + AUTOBOOT_FFDC_LIST_FILE_PATH)
+        qprint_timen(
+            "Adding the name of our high severity error logs FFDC file "
+            + "to the appropriate file list."
+        )
+        shell_cmd(
+            "echo "
+            + high_sev_elogs_file_path
+            + " > "
+            + AUTOBOOT_FFDC_LIST_FILE_PATH
+        )
     else:
         os.remove(high_sev_elogs_file_path)
 
diff --git a/bin/plug_ins/Stop/cp_stop_check b/bin/plug_ins/Stop/cp_stop_check
index 8eb8e05..994e2d9 100755
--- a/bin/plug_ins/Stop/cp_stop_check
+++ b/bin/plug_ins/Stop/cp_stop_check
@@ -5,56 +5,61 @@
 """
 
 import argparse
-import sys
-import subprocess
 import os
 import re
+import subprocess
+import sys
 
+from gen_arg import *
+from gen_call_robot import *
+from gen_cmd import *
+from gen_misc import *
+from gen_plug_in_utils import *
 from gen_print import *
 from gen_valid import *
-from gen_arg import *
-from gen_misc import *
-from gen_cmd import *
-from gen_plug_in_utils import *
-from gen_call_robot import *
 
 # Set exit_on_error for gen_valid functions.
 set_exit_on_error(True)
 
 # Initialize default plug-in parms..
 STOP_REST_FAIL = 0
-STOP_COMMAND = ''
+STOP_COMMAND = ""
 stop_test_rc = 2
 STOP_VERIFY_HARDWARE_FAIL = 0
 
 
 # Create parser object to process command line parameters and args.
 parser = argparse.ArgumentParser(
-    usage='%(prog)s [OPTIONS]',
-    description="If the \"Stop\" plug-in is selected by the user, %(prog)s"
+    usage="%(prog)s [OPTIONS]",
+    description='If the "Stop" plug-in is selected by the user, %(prog)s'
     + " is called by OBMC Boot Test after each boot test.  If %(prog)s returns"
-    + " " + str(stop_test_rc) + ", then OBMC Boot Test will stop.  The user"
+    + " "
+    + str(stop_test_rc)
+    + ", then OBMC Boot Test will stop.  The user"
     + " may set environment variable STOP_COMMAND to contain any valid bash"
     + " command or program.  %(prog)s will run this stop command.  If the stop"
     + " command returns non-zero, then %(prog)s will return "
-    + str(stop_test_rc) + ".  %(prog)s recognizes some special values for"
-    + " STOP_COMMAND: 1) \"FAIL\" means that OBMC Boot Test should stop"
-    + " whenever a boot test fails. 2) \"ALL\" means that OBMC Boot Test"
+    + str(stop_test_rc)
+    + ".  %(prog)s recognizes some special values for"
+    + ' STOP_COMMAND: 1) "FAIL" means that OBMC Boot Test should stop'
+    + ' whenever a boot test fails. 2) "ALL" means that OBMC Boot Test'
     + " should stop after any boot test.  If environment variable"
     + " STOP_REST_FAIL is set, OBMC Boot Test will stop if REST commands are"
     + " no longer working.",
     formatter_class=argparse.ArgumentDefaultsHelpFormatter,
-    prefix_chars='-+')
+    prefix_chars="-+",
+)
 
 # The stock_list will be passed to gen_get_options.  We populate it with the names of stock parm options we
 # want.  These stock parms are pre-defined by gen_get_options.
-stock_list = [("test_mode", get_plug_default("test_mode", 0)),
-              ("quiet", get_plug_default("quiet", 0)),
-              ("debug", get_plug_default("debug", 0))]
+stock_list = [
+    ("test_mode", get_plug_default("test_mode", 0)),
+    ("quiet", get_plug_default("quiet", 0)),
+    ("debug", get_plug_default("debug", 0)),
+]
 
 
-def exit_function(signal_number=0,
-                  frame=None):
+def exit_function(signal_number=0, frame=None):
     r"""
     Execute whenever the program ends normally or with the signals that we catch (i.e. TERM, INT).
 
@@ -93,8 +98,9 @@
     if not STOP_REST_FAIL:
         return
 
-    REDFISH_SUPPORT_TRANS_STATE = int(os.environ.get('REDFISH_SUPPORT_TRANS_STATE', 0)) or \
-        int(os.environ.get('AUTOBOOT_REDFISH_SUPPORT_TRANS_STATE', 0))
+    REDFISH_SUPPORT_TRANS_STATE = int(
+        os.environ.get("REDFISH_SUPPORT_TRANS_STATE", 0)
+    ) or int(os.environ.get("AUTOBOOT_REDFISH_SUPPORT_TRANS_STATE", 0))
 
     if REDFISH_SUPPORT_TRANS_STATE:
         interface = "redfish"
@@ -103,23 +109,54 @@
 
     print_timen("Checking to see whether %s commands are working." % interface)
     init_robot_out_parms(get_plug_in_package_name() + "." + pgm_name + ".")
-    lib_file_path = init_robot_file_path("lib/utils.robot") + ":" \
+    lib_file_path = (
+        init_robot_file_path("lib/utils.robot")
+        + ":"
         + init_robot_file_path("lib/gen_robot_print.py")
+    )
     set_mod_global(lib_file_path)
-    timeout = '0 seconds'
-    interval = '1 second'
-    keyword_string = "${match_state}=  Create Dictionary  %s=1 ;" % interface +\
-        " ${state}=  Wait State  ${match_state}  " + timeout + "  " +\
-        interval + "  quiet=${1} ; Rpvar  state"
+    timeout = "0 seconds"
+    interval = "1 second"
+    keyword_string = (
+        "${match_state}=  Create Dictionary  %s=1 ;" % interface
+        + " ${state}=  Wait State  ${match_state}  "
+        + timeout
+        + "  "
+        + interval
+        + "  quiet=${1} ; Rpvar  state"
+    )
     set_mod_global(keyword_string)
-    cmd_buf = create_robot_cmd_string("extended/run_keyword.robot", OPENBMC_HOST, SSH_PORT, HTTPS_PORT,
-                                      REST_USERNAME, REST_PASSWORD, OPENBMC_USERNAME, OPENBMC_PASSWORD,
-                                      REDFISH_SUPPORT_TRANS_STATE, keyword_string, lib_file_path, quiet,
-                                      test_mode, debug, outputdir, output, log, report, loglevel)
+    cmd_buf = create_robot_cmd_string(
+        "extended/run_keyword.robot",
+        OPENBMC_HOST,
+        SSH_PORT,
+        HTTPS_PORT,
+        REST_USERNAME,
+        REST_PASSWORD,
+        OPENBMC_USERNAME,
+        OPENBMC_PASSWORD,
+        REDFISH_SUPPORT_TRANS_STATE,
+        keyword_string,
+        lib_file_path,
+        quiet,
+        test_mode,
+        debug,
+        outputdir,
+        output,
+        log,
+        report,
+        loglevel,
+    )
     if not robot_cmd_fnc(cmd_buf):
-        print_timen("The caller wishes to stop test execution if %s commands are failing." % interface)
+        print_timen(
+            "The caller wishes to stop test execution if %s commands are"
+            " failing." % interface
+        )
         stop_check()
-    print_timen("%s commands are working so no reason as of yet to stop the test." % interface)
+    print_timen(
+        "%s commands are working so no reason as of yet to stop the test."
+        % interface
+    )
 
 
 def esel_stop_check():
@@ -131,10 +168,15 @@
     if STOP_ESEL_STOP_FILE_PATH == "":
         return
 
-    cmd_buf = "esel_stop_check --esel_stop_file_path=" + STOP_ESEL_STOP_FILE_PATH
+    cmd_buf = (
+        "esel_stop_check --esel_stop_file_path=" + STOP_ESEL_STOP_FILE_PATH
+    )
     shell_rc, out_buf = shell_cmd(cmd_buf, show_err=0)
     if shell_rc == stop_test_rc:
-        print_timen("The caller wishes to stop test execution based on the presence of certain esel entries.")
+        print_timen(
+            "The caller wishes to stop test execution based on the presence of"
+            " certain esel entries."
+        )
         stop_check()
 
 
@@ -147,12 +189,17 @@
     if STOP_PEL_STOP_FILE_PATH == "":
         return
 
-    pel_txt_file_path = os.environ.get("AUTOBOOT_FFDC_DIR_PATH", "") + \
-        os.environ.get("AUTOBOOT_FFDC_PREFIX", "") + "PEL_logs_list.json"
+    pel_txt_file_path = (
+        os.environ.get("AUTOBOOT_FFDC_DIR_PATH", "")
+        + os.environ.get("AUTOBOOT_FFDC_PREFIX", "")
+        + "PEL_logs_list.json"
+    )
 
     if not os.path.isfile(pel_txt_file_path):
-        qprint_timen("The following file was not present so no further"
-                     + " action will be taken.")
+        qprint_timen(
+            "The following file was not present so no further"
+            + " action will be taken."
+        )
         qprint_var(pel_txt_file_path)
         return
 
@@ -161,8 +208,9 @@
     # If pel_stop_file_path is unqualified and cannot be found, pre-pend
     # default_stop_dir_path for the user.
     pel_stop_file_path = os.environ.get("STOP_PEL_STOP_FILE_PATH", "")
-    if not os.path.isfile(pel_stop_file_path) and \
-       os.path.isfile(default_stop_dir_path + pel_stop_file_path):
+    if not os.path.isfile(pel_stop_file_path) and os.path.isfile(
+        default_stop_dir_path + pel_stop_file_path
+    ):
         pel_stop_file_path = default_stop_dir_path + pel_stop_file_path
         qprint_timen("Using default stop file path.")
         qprint_var(pel_stop_file_path)
@@ -171,28 +219,31 @@
     pel_stop_list = file_to_list(pel_stop_file_path, newlines=0, comments=0)
 
     if len(pel_stop_list) == 0:
-        print_timen("There are no records to process in "
-                    + pel_stop_file_path + ".")
+        print_timen(
+            "There are no records to process in " + pel_stop_file_path + "."
+        )
         return
 
     pel_all_list = file_to_list(pel_txt_file_path, newlines=0, comments=0)
 
     if len(pel_all_list) == 0:
-        print_timen("There are no records to process in "
-                    + pel_txt_file_path + ".")
+        print_timen(
+            "There are no records to process in " + pel_txt_file_path + "."
+        )
         return
 
     for stop_pel in pel_stop_list:
         for pel_all in pel_all_list:
             pel_match = re.search(".*SRC.*" + stop_pel + ".*", pel_all)
             if pel_match:
-                print_timen("The caller wishes to stop test execution based on "
-                            + "the presence of certain PEL entries.")
+                print_timen(
+                    "The caller wishes to stop test execution based on "
+                    + "the presence of certain PEL entries."
+                )
                 stop_check()
 
 
 def main():
-
     gen_setup()
 
     print_plug_in_header()
@@ -217,10 +268,13 @@
     pel_stop_check()
 
     if STOP_VERIFY_HARDWARE_FAIL:
-        hardware_error_found = restore_plug_in_value(0, 'Verify_hardware')
+        hardware_error_found = restore_plug_in_value(0, "Verify_hardware")
         if hardware_error_found:
-            print_timen("The caller wishes to stop test execution when the Verify_hardware plug-in detects a"
-                        + " hardware error.")
+            print_timen(
+                "The caller wishes to stop test execution when the"
+                " Verify_hardware plug-in detects a"
+                + " hardware error."
+            )
             stop_check()
 
     qprint_timen("The caller does not wish to stop the test run.")
diff --git a/bin/print_ffdc_functions b/bin/print_ffdc_functions
index 325fa06..ec7432b 100755
--- a/bin/print_ffdc_functions
+++ b/bin/print_ffdc_functions
@@ -4,13 +4,13 @@
 See help text for details.
 """
 
+import sys
+
 from gen_arg import *
 from gen_print import *
 from gen_valid import *
 from openbmc_ffdc_list import *
 
-import sys
-
 save_path_0 = sys.path[0]
 del sys.path[0]
 
@@ -22,8 +22,12 @@
 
 parser = argparse.ArgumentParser(
     usage="%(prog)s [OPTIONS]",
-    description="%(prog)s will print a colon-delimited list of all valid OBMC FFDC functions.\n\nExample:"
-    + "\n\n\nDump Log:FFDC Generic Report:Get Request FFDC:SEL Log:BMC Specific Files:Sys Inventory Files"
+    description=(
+        "%(prog)s will print a colon-delimited list of all valid OBMC FFDC"
+        " functions.\n\nExample:"
+    )
+    + "\n\n\nDump Log:FFDC Generic Report:Get Request FFDC:SEL Log:BMC"
+    " Specific Files:Sys Inventory Files"
     + ":Core Files:OS FFDC:Dump Files",
     formatter_class=argparse.RawDescriptionHelpFormatter,
     prefix_chars="-+",
@@ -68,7 +72,6 @@
 
 
 def main():
-
     gen_get_options(parser, stock_list)
 
     validate_parms()
diff --git a/bin/process_plug_in_packages.py b/bin/process_plug_in_packages.py
index bd389c8..febbd53 100755
--- a/bin/process_plug_in_packages.py
+++ b/bin/process_plug_in_packages.py
@@ -4,13 +4,20 @@
 See help text for details.
 """
 
-import sys
-import subprocess
 import os
+import subprocess
+import sys
 
 save_dir_path = sys.path.pop(0)
 
-modules = ['gen_arg', 'gen_print', 'gen_valid', 'gen_plug_in', 'gen_cmd', 'gen_misc']
+modules = [
+    "gen_arg",
+    "gen_print",
+    "gen_valid",
+    "gen_plug_in",
+    "gen_cmd",
+    "gen_misc",
+]
 for module in modules:
     exec("from " + module + " import *")
 
@@ -18,98 +25,105 @@
 
 # Create parser object.
 parser = argparse.ArgumentParser(
-    usage='%(prog)s [OPTIONS]',
+    usage="%(prog)s [OPTIONS]",
     description="%(prog)s will process the plug-in packages passed to it."
-                + "  A plug-in package is essentially a directory containing"
-                + " one or more call point programs.  Each of these call point"
-                + " programs must have a prefix of \"cp_\".  When calling"
-                + " %(prog)s, a user must provide a call_point parameter"
-                + " (described below).  For each plug-in package passed,"
-                + " %(prog)s will check for the presence of the specified call"
-                + " point program in the plug-in directory.  If it is found,"
-                + " %(prog)s will run it.  It is the responsibility of the"
-                + " caller to set any environment variables needed by the call"
-                + " point programs.\n\nAfter each call point program"
-                + " has been run, %(prog)s will print the following values in"
-                + " the following formats for use by the calling program:\n"
-                + "  failed_plug_in_name:               <failed plug-in value,"
-                + " if any>\n  shell_rc:                          "
-                + "<shell return code value of last call point program - this"
-                + " will be printed in hexadecimal format.  Also, be aware"
-                + " that if a call point program returns a value it will be"
-                + " shifted left 2 bytes (e.g. rc of 2 will be printed as"
-                + " 0x00000200).  That is because the rightmost byte is"
-                + " reserved for errors in calling the call point program"
-                + " rather than errors generated by the call point program.>",
+    + "  A plug-in package is essentially a directory containing"
+    + " one or more call point programs.  Each of these call point"
+    + ' programs must have a prefix of "cp_".  When calling'
+    + " %(prog)s, a user must provide a call_point parameter"
+    + " (described below).  For each plug-in package passed,"
+    + " %(prog)s will check for the presence of the specified call"
+    + " point program in the plug-in directory.  If it is found,"
+    + " %(prog)s will run it.  It is the responsibility of the"
+    + " caller to set any environment variables needed by the call"
+    + " point programs.\n\nAfter each call point program"
+    + " has been run, %(prog)s will print the following values in"
+    + " the following formats for use by the calling program:\n"
+    + "  failed_plug_in_name:               <failed plug-in value,"
+    + " if any>\n  shell_rc:                          "
+    + "<shell return code value of last call point program - this"
+    + " will be printed in hexadecimal format.  Also, be aware"
+    + " that if a call point program returns a value it will be"
+    + " shifted left 2 bytes (e.g. rc of 2 will be printed as"
+    + " 0x00000200).  That is because the rightmost byte is"
+    + " reserved for errors in calling the call point program"
+    + " rather than errors generated by the call point program.>",
     formatter_class=argparse.ArgumentDefaultsHelpFormatter,
-    prefix_chars='-+')
+    prefix_chars="-+",
+)
 
 # Create arguments.
 parser.add_argument(
-    'plug_in_dir_paths',
-    nargs='?',
+    "plug_in_dir_paths",
+    nargs="?",
     default="",
-    help=plug_in_dir_paths_help_text + default_string)
+    help=plug_in_dir_paths_help_text + default_string,
+)
 
 parser.add_argument(
-    '--call_point',
+    "--call_point",
     default="setup",
     required=True,
-    help='The call point program name.  This value must not include the'
-         + ' "cp_" prefix.  For each plug-in package passed to this program,'
-         + ' the specified call_point program will be called if it exists in'
-         + ' the plug-in directory.' + default_string)
+    help="The call point program name.  This value must not include the"
+    + ' "cp_" prefix.  For each plug-in package passed to this program,'
+    + " the specified call_point program will be called if it exists in"
+    + " the plug-in directory."
+    + default_string,
+)
 
 parser.add_argument(
-    '--allow_shell_rc',
+    "--allow_shell_rc",
     default="0x00000000",
-    help='The user may supply a value other than zero to indicate an'
-         + ' acceptable non-zero return code.  For example, if this value'
-         + ' equals 0x00000200, it means that for each plug-in call point that'
-         + ' runs, a 0x00000200 will not be counted as a failure.  See note'
-         + ' above regarding left-shifting of return codes.' + default_string)
+    help="The user may supply a value other than zero to indicate an"
+    + " acceptable non-zero return code.  For example, if this value"
+    + " equals 0x00000200, it means that for each plug-in call point that"
+    + " runs, a 0x00000200 will not be counted as a failure.  See note"
+    + " above regarding left-shifting of return codes."
+    + default_string,
+)
 
 parser.add_argument(
-    '--stop_on_plug_in_failure',
+    "--stop_on_plug_in_failure",
     default=1,
     type=int,
     choices=[1, 0],
-    help='If this parameter is set to 1, this program will stop and return '
-         + 'non-zero if the call point program from any plug-in directory '
-         + 'fails.  Conversely, if it is set to false, this program will run '
-         + 'the call point program from each and every plug-in directory '
-         + 'regardless of their return values.  Typical example cases where '
-         + 'you\'d want to run all plug-in call points regardless of success '
-         + 'or failure would be "cleanup" or "ffdc" call points.')
+    help="If this parameter is set to 1, this program will stop and return "
+    + "non-zero if the call point program from any plug-in directory "
+    + "fails.  Conversely, if it is set to false, this program will run "
+    + "the call point program from each and every plug-in directory "
+    + "regardless of their return values.  Typical example cases where "
+    + "you'd want to run all plug-in call points regardless of success "
+    + 'or failure would be "cleanup" or "ffdc" call points.',
+)
 
 parser.add_argument(
-    '--stop_on_non_zero_rc',
+    "--stop_on_non_zero_rc",
     default=0,
     type=int,
     choices=[1, 0],
-    help='If this parm is set to 1 and a plug-in call point program returns '
-         + 'a valid non-zero return code (see "allow_shell_rc" parm above),'
-         + ' this program will stop processing and return 0 (success).  Since'
-         + ' this constitutes a successful exit, this would normally be used'
-         + ' where the caller wishes to stop processing if one of the plug-in'
-         + ' directory call point programs returns a special value indicating'
-         + ' that some special case has been found.  An example might be in'
-         + ' calling some kind of "check_errl" call point program.  Such a'
-         + ' call point program might return a 2 (i.e. 0x00000200) to indicate'
-         + ' that a given error log entry was found in an "ignore" list and is'
-         + ' therefore to be ignored.  That being the case, no other'
-         + ' "check_errl" call point program would need to be called.'
-         + default_string)
+    help="If this parm is set to 1 and a plug-in call point program returns "
+    + 'a valid non-zero return code (see "allow_shell_rc" parm above),'
+    + " this program will stop processing and return 0 (success).  Since"
+    + " this constitutes a successful exit, this would normally be used"
+    + " where the caller wishes to stop processing if one of the plug-in"
+    + " directory call point programs returns a special value indicating"
+    + " that some special case has been found.  An example might be in"
+    + ' calling some kind of "check_errl" call point program.  Such a'
+    + " call point program might return a 2 (i.e. 0x00000200) to indicate"
+    + ' that a given error log entry was found in an "ignore" list and is'
+    + " therefore to be ignored.  That being the case, no other"
+    + ' "check_errl" call point program would need to be called.'
+    + default_string,
+)
 
 parser.add_argument(
-    '--mch_class',
-    default="obmc",
-    help=mch_class_help_text + default_string)
+    "--mch_class", default="obmc", help=mch_class_help_text + default_string
+)
 
 # Populate stock_list with options we want.
 stock_list = [("test_mode", 0), ("quiet", 1), ("debug", 0)]
 
-original_path = os.environ.get('PATH')
+original_path = os.environ.get("PATH")
 
 
 def validate_parms():
@@ -127,9 +141,7 @@
     set_pgm_arg(allow_shell_rc)
 
 
-def run_pgm(plug_in_dir_path,
-            call_point,
-            allow_shell_rc):
+def run_pgm(plug_in_dir_path, call_point, allow_shell_rc):
     r"""
     Run the call point program in the given plug_in_dir_path.  Return the following:
     rc                              The return code - 0 = PASS, 1 = FAIL.
@@ -159,8 +171,10 @@
         # No such call point in this plug in dir path.  This is legal so we return 0, etc.
         return rc, shell_rc, failed_plug_in_name
 
-    print("------------------------------------------------- Starting plug-"
-          + "in -----------------------------------------------")
+    print(
+        "------------------------------------------------- Starting plug-"
+        + "in -----------------------------------------------"
+    )
 
     print_timen("Running " + plug_in_name + "/" + cp_prefix + call_point + ".")
 
@@ -170,26 +184,36 @@
     else:
         auto_status_file_prefix = ""
     auto_status_file_prefix += plug_in_name + ".cp_" + call_point
-    status_dir_path =\
-        add_trailing_slash(os.environ.get("STATUS_DIR_PATH",
-                                          os.environ['HOME']
-                                          + "/status/"))
+    status_dir_path = add_trailing_slash(
+        os.environ.get("STATUS_DIR_PATH", os.environ["HOME"] + "/status/")
+    )
     if not os.path.isdir(status_dir_path):
-        AUTOBOOT_EXECDIR = \
-            add_trailing_slash(os.environ.get("AUTOBOOT_EXECDIR", ""))
+        AUTOBOOT_EXECDIR = add_trailing_slash(
+            os.environ.get("AUTOBOOT_EXECDIR", "")
+        )
         status_dir_path = AUTOBOOT_EXECDIR + "logs/"
         if not os.path.exists(status_dir_path):
             os.makedirs(status_dir_path)
-    status_file_name = auto_status_file_prefix + "." + file_date_time_stamp() \
-        + ".status"
-    auto_status_file_subcmd = "auto_status_file.py --status_dir_path=" \
-        + status_dir_path + " --status_file_name=" + status_file_name \
-        + " --quiet=1 --show_url=1 --prefix=" \
-        + auto_status_file_prefix + " --stdout=" + str(stdout) + " "
+    status_file_name = (
+        auto_status_file_prefix + "." + file_date_time_stamp() + ".status"
+    )
+    auto_status_file_subcmd = (
+        "auto_status_file.py --status_dir_path="
+        + status_dir_path
+        + " --status_file_name="
+        + status_file_name
+        + " --quiet=1 --show_url=1 --prefix="
+        + auto_status_file_prefix
+        + " --stdout="
+        + str(stdout)
+        + " "
+    )
 
     cmd_buf = "PATH=" + plug_in_dir_path.rstrip("/") + ":${PATH}"
     print_issuing(cmd_buf)
-    os.environ['PATH'] = plug_in_dir_path.rstrip("/") + os.pathsep + original_path
+    os.environ["PATH"] = (
+        plug_in_dir_path.rstrip("/") + os.pathsep + original_path
+    )
     cmd_buf = auto_status_file_subcmd + cp_prefix + call_point
     print_issuing(cmd_buf)
 
@@ -205,11 +229,16 @@
         failed_plug_in_name = plug_in_name + "/" + cp_prefix + call_point
     if failed_plug_in_name != "" and not stdout:
         # Use tail to avoid double-printing of status_file_url.
-        shell_cmd("tail -n +2 " + status_dir_path + status_file_name, quiet=1,
-                  print_output=1)
+        shell_cmd(
+            "tail -n +2 " + status_dir_path + status_file_name,
+            quiet=1,
+            print_output=1,
+        )
 
-    print("------------------------------------------------- Ending plug-in"
-          + " -------------------------------------------------")
+    print(
+        "------------------------------------------------- Ending plug-in"
+        + " -------------------------------------------------"
+    )
     if failed_plug_in_name != "":
         print_var(failed_plug_in_name)
     print_var(shell_rc, hexa())
@@ -218,10 +247,9 @@
 
 
 def main():
-
     gen_setup()
 
-    set_term_options(term_requests='children')
+    set_term_options(term_requests="children")
 
     # Access program parameter globals.
     global plug_in_dir_paths
@@ -230,8 +258,9 @@
     global stop_on_plug_in_failure
     global stop_on_non_zero_rc
 
-    plug_in_packages_list = return_plug_in_packages_list(plug_in_dir_paths,
-                                                         mch_class)
+    plug_in_packages_list = return_plug_in_packages_list(
+        plug_in_dir_paths, mch_class
+    )
 
     qprint_var(plug_in_packages_list)
     qprint("\n")
@@ -245,15 +274,18 @@
 
     ret_code = 0
     for plug_in_dir_path in plug_in_packages_list:
-        rc, shell_rc, failed_plug_in_name = \
-            run_pgm(plug_in_dir_path, call_point, allow_shell_rc)
+        rc, shell_rc, failed_plug_in_name = run_pgm(
+            plug_in_dir_path, call_point, allow_shell_rc
+        )
         if rc != 0:
             ret_code = 1
             if stop_on_plug_in_failure:
                 break
         if shell_rc != 0 and stop_on_non_zero_rc:
-            qprint_time("Stopping on non-zero shell return code as requested"
-                        + " by caller.\n")
+            qprint_time(
+                "Stopping on non-zero shell return code as requested"
+                + " by caller.\n"
+            )
             break
 
     if ret_code != 0:
diff --git a/bin/prop_call.py b/bin/prop_call.py
index e167fa5..9089d4e 100755
--- a/bin/prop_call.py
+++ b/bin/prop_call.py
@@ -16,14 +16,14 @@
 my_program --test_mode=y --quiet=n file1 file2 file3
 """
 
+import os
+import sys
+
 from gen_arg import *
+from gen_cmd import *
+from gen_misc import *
 from gen_print import *
 from gen_valid import *
-from gen_misc import *
-from gen_cmd import *
-
-import sys
-import os
 
 save_path_0 = sys.path[0]
 del sys.path[0]
@@ -33,39 +33,39 @@
 
 
 parser = argparse.ArgumentParser(
-    usage='%(prog)s [OPTIONS]',
+    usage="%(prog)s [OPTIONS]",
     description="%(prog)s will call a program using parameters retrieved"
     + " from the given properties file.",
     formatter_class=argparse.ArgumentDefaultsHelpFormatter,
-    prefix_chars='-+')
+    prefix_chars="-+",
+)
 
 parser.add_argument(
-    '--prop_dir_path',
+    "--prop_dir_path",
     default=os.environ.get("PROP_DIR_PATH", os.getcwd()),
-    help='The path to the directory that contains the properties file.'
+    help="The path to the directory that contains the properties file."
     + '  The default value is environment variable "PROP_DIR_PATH", if'
-    + ' set.  Otherwise, it is the current working directory.')
+    + " set.  Otherwise, it is the current working directory.",
+)
 
 parser.add_argument(
-    '--prop_file_name',
-    help='The path to a properties file that contains the parameters to'
+    "--prop_file_name",
+    help="The path to a properties file that contains the parameters to"
     + ' pass to the program.  If the properties file has a ".properties"'
-    + ' extension, the caller need not specify the extension.  The format'
-    + ' of each line in the properties file should be as follows:'
-    + ' <parm_name=parm_value>.  Do not quote the parm value.  To specify'
+    + " extension, the caller need not specify the extension.  The format"
+    + " of each line in the properties file should be as follows:"
+    + " <parm_name=parm_value>.  Do not quote the parm value.  To specify"
     + ' positional parms, use a parm name of "pos".  For example: pos=this'
-    ' value')
+    " value",
+)
 
-parser.add_argument(
-    'program_name',
-    help='The name of the program to be run.')
+parser.add_argument("program_name", help="The name of the program to be run.")
 
 # Populate stock_list with options we want.
 stock_list = [("test_mode", 0), ("quiet", 1), ("debug", 0)]
 
 
-def exit_function(signal_number=0,
-                  frame=None):
+def exit_function(signal_number=0, frame=None):
     r"""
     Execute whenever the program ends normally or with the signals that we catch (i.e. TERM, INT).
     """
@@ -76,8 +76,7 @@
     qprint_pgm_footer()
 
 
-def signal_handler(signal_number,
-                   frame):
+def signal_handler(signal_number, frame):
     r"""
     Handle signals.  Without a function to catch a SIGTERM or SIGINT, our program would terminate immediately
     with return code 143 and without calling our exit_function.
@@ -127,7 +126,6 @@
 
 
 def main():
-
     if not gen_get_options(parser, stock_list):
         return False
 
diff --git a/bin/validate_plug_ins.py b/bin/validate_plug_ins.py
index 78e65e5..fa12f66 100755
--- a/bin/validate_plug_ins.py
+++ b/bin/validate_plug_ins.py
@@ -1,12 +1,12 @@
 #!/usr/bin/env python3
 
 
-from gen_print import *
+import os
+import sys
+
 from gen_arg import *
 from gen_plug_in import *
-
-import sys
-import os
+from gen_print import *
 
 try:
     import __builtin__
@@ -31,32 +31,32 @@
 
 # Create parser object.
 parser = argparse.ArgumentParser(
-    usage='%(prog)s [OPTIONS] [PLUG_IN_DIR_PATHS]',
+    usage="%(prog)s [OPTIONS] [PLUG_IN_DIR_PATHS]",
     description="%(prog)s will validate the plug-in packages passed to it."
-                + "  It will also print a list of the absolute plug-in"
-                + " directory paths for use by the calling program.",
+    + "  It will also print a list of the absolute plug-in"
+    + " directory paths for use by the calling program.",
     formatter_class=argparse.ArgumentDefaultsHelpFormatter,
-    prefix_chars='-+')
+    prefix_chars="-+",
+)
 
 # Create arguments.
 parser.add_argument(
-    'plug_in_dir_paths',
-    nargs='?',
+    "plug_in_dir_paths",
+    nargs="?",
     default="",
-    help=plug_in_dir_paths_help_text + default_string)
+    help=plug_in_dir_paths_help_text + default_string,
+)
 
 parser.add_argument(
-    '--mch_class',
-    default="obmc",
-    help=mch_class_help_text + default_string)
+    "--mch_class", default="obmc", help=mch_class_help_text + default_string
+)
 
 # The stock_list will be passed to gen_get_options.  We populate it with the names of stock parm options we
 # want.  These stock parms are pre-defined by gen_get_options.
 stock_list = [("test_mode", 0), ("quiet", 1), ("debug", 0)]
 
 
-def exit_function(signal_number=0,
-                  frame=None):
+def exit_function(signal_number=0, frame=None):
     r"""
     Execute whenever the program ends normally or with the signals that we catch (i.e. TERM, INT).
     """
@@ -114,8 +114,9 @@
     global plug_in_dir_paths
     global mch_class
 
-    plug_in_packages_list = return_plug_in_packages_list(plug_in_dir_paths,
-                                                         mch_class)
+    plug_in_packages_list = return_plug_in_packages_list(
+        plug_in_dir_paths, mch_class
+    )
     qprint_var(plug_in_packages_list)
 
     # As stated in the help text, this program must print the full paths of each selected plug in.
diff --git a/bin/websocket_monitor.py b/bin/websocket_monitor.py
index 712b0ee..388cd3f 100755
--- a/bin/websocket_monitor.py
+++ b/bin/websocket_monitor.py
@@ -4,15 +4,15 @@
 See help text for details.
 """
 
-from gen_print import *
-from gen_arg import *
-from gen_valid import *
-
 import json
-import sys
-import websocket
 import ssl
+import sys
+
 import requests
+import websocket
+from gen_arg import *
+from gen_print import *
+from gen_valid import *
 from retrying import retry
 
 save_path_0 = sys.path[0]
@@ -26,37 +26,39 @@
 
 
 parser = argparse.ArgumentParser(
-    usage='%(prog)s [OPTIONS]',
+    usage="%(prog)s [OPTIONS]",
     description="%(prog)s will open a websocket session on a remote OpenBMC. "
-                + "When an eSEL is created on that BMC, the monitor will receive "
-                + "notice over websocket that the eSEL was created "
-                + "and it will print a message.",
+    + "When an eSEL is created on that BMC, the monitor will receive "
+    + "notice over websocket that the eSEL was created "
+    + "and it will print a message.",
     formatter_class=argparse.ArgumentDefaultsHelpFormatter,
-    prefix_chars='-+')
+    prefix_chars="-+",
+)
 parser.add_argument(
-    'openbmc_host',
-    default='',
-    help='The BMC host name or IP address.')
+    "openbmc_host", default="", help="The BMC host name or IP address."
+)
 parser.add_argument(
-    '--openbmc_username',
-    default='root',
-    help='The userid for the open BMC system.')
+    "--openbmc_username",
+    default="root",
+    help="The userid for the open BMC system.",
+)
 parser.add_argument(
-    '--openbmc_password',
-    default='',
-    help='The password for the open BMC system.')
+    "--openbmc_password",
+    default="",
+    help="The password for the open BMC system.",
+)
 parser.add_argument(
-    '--monitor_type',
-    choices=['logging', 'dump'],
-    default='logging',
-    help='The type of notifications from websocket to monitor.')
+    "--monitor_type",
+    choices=["logging", "dump"],
+    default="logging",
+    help="The type of notifications from websocket to monitor.",
+)
 
 
 stock_list = [("test_mode", 0), ("quiet", 0), ("debug", 0)]
 
 
-def exit_function(signal_number=0,
-                  frame=None):
+def exit_function(signal_number=0, frame=None):
     r"""
     Execute whenever the program ends normally or with the signals that we
     catch (i.e. TERM, INT).
@@ -67,8 +69,7 @@
     qprint_pgm_footer()
 
 
-def signal_handler(signal_number,
-                   frame):
+def signal_handler(signal_number, frame):
     r"""
     Handle signals.  Without a function to catch a SIGTERM or SIGINT, the
     program would terminate immediately with return code 143 and without
@@ -95,14 +96,12 @@
     valid_value(openbmc_username)
     valid_value(openbmc_password)
     global monitoring_uri
-    monitoring_uri = '/xyz/openbmc_project/' + monitor_type
+    monitoring_uri = "/xyz/openbmc_project/" + monitor_type
     gen_post_validation(exit_function, signal_handler)
 
 
 @retry(stop_max_attempt_number=3, wait_fixed=1000)
-def login(openbmc_host,
-          openbmc_username,
-          openbmc_password):
+def login(openbmc_host, openbmc_username, openbmc_password):
     r"""
     Log into the BMC and return the session object.
 
@@ -114,15 +113,19 @@
 
     qprint_executing()
 
-    http_header = {'Content-Type': 'application/json'}
+    http_header = {"Content-Type": "application/json"}
     session = requests.session()
-    response = session.post('https://' + openbmc_host + '/login', headers=http_header,
-                            json={"data": [openbmc_username, openbmc_password]},
-                            verify=False, timeout=30)
+    response = session.post(
+        "https://" + openbmc_host + "/login",
+        headers=http_header,
+        json={"data": [openbmc_username, openbmc_password]},
+        verify=False,
+        timeout=30,
+    )
     valid_value(response.status_code, valid_values=[200])
     login_response = json.loads(response.text)
     qprint_var(login_response)
-    valid_value(login_response['status'], valid_values=['ok'])
+    valid_value(login_response["status"], valid_values=["ok"])
 
     return session
 
@@ -145,12 +148,14 @@
     # or
     # /xyz/openbmc_project/dump/entry/1","properties":{"Size":186180}}').
 
-    if monitoring_uri + '/entry' in message:
-        if 'Id' in message:
-            qprint_timen('eSEL received over websocket interface.')
+    if monitoring_uri + "/entry" in message:
+        if "Id" in message:
+            qprint_timen("eSEL received over websocket interface.")
             websocket_obj.close()
-        elif 'Size' in message:
-            qprint_timen('Dump notification received over websocket interface.')
+        elif "Size" in message:
+            qprint_timen(
+                "Dump notification received over websocket interface."
+            )
             websocket_obj.close()
 
 
@@ -212,17 +217,23 @@
     session = login(openbmc_host, openbmc_username, openbmc_password)
     qprint_timen("Registering websocket handlers.")
     cookies = session.cookies.get_dict()
-    cookies = sprint_var(cookies, fmt=no_header() | strip_brackets(),
-                         col1_width=0, trailing_char="",
-                         delim="=").replace("\n", ";")
+    cookies = sprint_var(
+        cookies,
+        fmt=no_header() | strip_brackets(),
+        col1_width=0,
+        trailing_char="",
+        delim="=",
+    ).replace("\n", ";")
     # Register the event handlers. When an ESEL is created by the system
     # under test, the on_message() handler will be called.
-    websocket_obj = websocket.WebSocketApp("wss://" + openbmc_host + "/subscribe",
-                                           on_message=on_message,
-                                           on_error=on_error,
-                                           on_close=on_close,
-                                           on_open=on_open,
-                                           cookie=cookies)
+    websocket_obj = websocket.WebSocketApp(
+        "wss://" + openbmc_host + "/subscribe",
+        on_message=on_message,
+        on_error=on_error,
+        on_close=on_close,
+        on_open=on_open,
+        cookie=cookies,
+    )
     qprint_timen("Completed registering of websocket handlers.")
     websocket_obj.run_forever(sslopt={"cert_reqs": ssl.CERT_NONE})
 
diff --git a/data/Palmetto.py b/data/Palmetto.py
index 24842de..02c9a44 100755
--- a/data/Palmetto.py
+++ b/data/Palmetto.py
@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 
-HOME_PATH = './'
-CACHE_PATH = '/var/cache/obmc/'
+HOME_PATH = "./"
+CACHE_PATH = "/var/cache/obmc/"
 FLASH_DOWNLOAD_PATH = "/tmp"
 GPIO_BASE = 320
 SYSTEM_NAME = "Palmetto"
@@ -12,298 +12,375 @@
 # - a process emits a GotoSystemState signal with state name to goto
 # - objects specified in EXIT_STATE_DEPEND have started
 SYSTEM_STATES = [
-    'BASE_APPS',
-    'BMC_STARTING',
-    'BMC_READY',
-    'HOST_POWERING_ON',
-    'HOST_POWERED_ON',
-    'HOST_BOOTING',
-    'HOST_BOOTED',
-    'HOST_POWERED_OFF',
+    "BASE_APPS",
+    "BMC_STARTING",
+    "BMC_READY",
+    "HOST_POWERING_ON",
+    "HOST_POWERED_ON",
+    "HOST_BOOTING",
+    "HOST_BOOTED",
+    "HOST_POWERED_OFF",
 ]
 
 EXIT_STATE_DEPEND = {
-    'BASE_APPS': {
-        '/org/openbmc/sensors': 0,
+    "BASE_APPS": {
+        "/org/openbmc/sensors": 0,
     },
-    'BMC_STARTING': {
-        '/org/openbmc/control/chassis0': 0,
-        '/org/openbmc/control/power0': 0,
-        '/org/openbmc/control/led/identify': 0,
-        '/org/openbmc/control/host0': 0,
-        '/org/openbmc/control/flash/bios': 0,
-    }
+    "BMC_STARTING": {
+        "/org/openbmc/control/chassis0": 0,
+        "/org/openbmc/control/power0": 0,
+        "/org/openbmc/control/led/identify": 0,
+        "/org/openbmc/control/host0": 0,
+        "/org/openbmc/control/flash/bios": 0,
+    },
 }
 
 # method will be called when state is entered
 ENTER_STATE_CALLBACK = {
-    'HOST_POWERED_ON': {
-        'boot': {
-            'bus_name': 'org.openbmc.control.Host',
-            'obj_name': '/org/openbmc/control/host0',
-            'interface_name': 'org.openbmc.control.Host',
+    "HOST_POWERED_ON": {
+        "boot": {
+            "bus_name": "org.openbmc.control.Host",
+            "obj_name": "/org/openbmc/control/host0",
+            "interface_name": "org.openbmc.control.Host",
         }
     },
-    'BMC_READY': {
-        'setOn': {
-            'bus_name': 'org.openbmc.control.led',
-            'obj_name': '/org/openbmc/control/led/identify',
-            'interface_name': 'org.openbmc.Led',
+    "BMC_READY": {
+        "setOn": {
+            "bus_name": "org.openbmc.control.led",
+            "obj_name": "/org/openbmc/control/led/identify",
+            "interface_name": "org.openbmc.Led",
         },
-        'init': {
-            'bus_name': 'org.openbmc.control.Flash',
-            'obj_name': '/org/openbmc/control/flash/bios',
-            'interface_name': 'org.openbmc.Flash',
+        "init": {
+            "bus_name": "org.openbmc.control.Flash",
+            "obj_name": "/org/openbmc/control/flash/bios",
+            "interface_name": "org.openbmc.Flash",
         },
-    }
+    },
 }
 
 APPS = {
-    'startup_hacks': {
-        'system_state': 'BASE_APPS',
-        'start_process': True,
-        'monitor_process': False,
-        'process_name': 'startup_hacks.sh',
+    "startup_hacks": {
+        "system_state": "BASE_APPS",
+        "start_process": True,
+        "monitor_process": False,
+        "process_name": "startup_hacks.sh",
     },
-    'inventory': {
-        'system_state': 'BMC_STARTING',
-        'start_process': True,
-        'monitor_process': True,
-        'process_name': 'inventory_items.py',
-        'args': [SYSTEM_NAME]
+    "inventory": {
+        "system_state": "BMC_STARTING",
+        "start_process": True,
+        "monitor_process": True,
+        "process_name": "inventory_items.py",
+        "args": [SYSTEM_NAME],
     },
-    'pcie_present': {
-        'system_state': 'HOST_POWERED_ON',
-        'start_process': False,
-        'monitor_process': False,
-        'process_name': 'pcie_slot_present.exe',
+    "pcie_present": {
+        "system_state": "HOST_POWERED_ON",
+        "start_process": False,
+        "monitor_process": False,
+        "process_name": "pcie_slot_present.exe",
     },
-    'virtual_sensors': {
-        'system_state': 'BMC_STARTING',
-        'start_process': True,
-        'monitor_process': True,
-        'process_name': 'hwmon.py',
-        'args': [SYSTEM_NAME]
+    "virtual_sensors": {
+        "system_state": "BMC_STARTING",
+        "start_process": True,
+        "monitor_process": True,
+        "process_name": "hwmon.py",
+        "args": [SYSTEM_NAME],
     },
-    'sensor_manager': {
-        'system_state': 'BASE_APPS',
-        'start_process': True,
-        'monitor_process': True,
-        'process_name': 'sensor_manager2.py',
-        'args': [SYSTEM_NAME]
+    "sensor_manager": {
+        "system_state": "BASE_APPS",
+        "start_process": True,
+        "monitor_process": True,
+        "process_name": "sensor_manager2.py",
+        "args": [SYSTEM_NAME],
     },
-    'host_watchdog': {
-        'system_state': 'BMC_STARTING',
-        'start_process': True,
-        'monitor_process': True,
-        'process_name': 'host_watchdog.exe',
+    "host_watchdog": {
+        "system_state": "BMC_STARTING",
+        "start_process": True,
+        "monitor_process": True,
+        "process_name": "host_watchdog.exe",
     },
-    'power_control': {
-        'system_state': 'BMC_STARTING',
-        'start_process': True,
-        'monitor_process': True,
-        'process_name': 'power_control.exe',
-        'args': ['3000', '10']
+    "power_control": {
+        "system_state": "BMC_STARTING",
+        "start_process": True,
+        "monitor_process": True,
+        "process_name": "power_control.exe",
+        "args": ["3000", "10"],
     },
-    'power_button': {
-        'system_state': 'BMC_STARTING',
-        'start_process': False,
-        'monitor_process': False,
-        'process_name': 'button_power.exe',
+    "power_button": {
+        "system_state": "BMC_STARTING",
+        "start_process": False,
+        "monitor_process": False,
+        "process_name": "button_power.exe",
     },
-    'led_control': {
-        'system_state': 'BMC_STARTING',
-        'start_process': True,
-        'monitor_process': True,
-        'process_name': 'led_controller.exe',
+    "led_control": {
+        "system_state": "BMC_STARTING",
+        "start_process": True,
+        "monitor_process": True,
+        "process_name": "led_controller.exe",
     },
-    'flash_control': {
-        'system_state': 'BMC_STARTING',
-        'start_process': True,
-        'monitor_process': True,
-        'process_name': 'flash_bios.exe',
+    "flash_control": {
+        "system_state": "BMC_STARTING",
+        "start_process": True,
+        "monitor_process": True,
+        "process_name": "flash_bios.exe",
     },
-    'bmc_flash_control': {
-        'system_state': 'BMC_STARTING',
-        'start_process': True,
-        'monitor_process': True,
-        'process_name': 'bmc_update.py',
+    "bmc_flash_control": {
+        "system_state": "BMC_STARTING",
+        "start_process": True,
+        "monitor_process": True,
+        "process_name": "bmc_update.py",
     },
-    'download_manager': {
-        'system_state': 'BMC_STARTING',
-        'start_process': True,
-        'monitor_process': True,
-        'process_name': 'download_manager.py',
-        'args': [SYSTEM_NAME]
+    "download_manager": {
+        "system_state": "BMC_STARTING",
+        "start_process": True,
+        "monitor_process": True,
+        "process_name": "download_manager.py",
+        "args": [SYSTEM_NAME],
     },
-    'host_control': {
-        'system_state': 'BMC_STARTING',
-        'start_process': True,
-        'monitor_process': True,
-        'process_name': 'control_host.exe',
+    "host_control": {
+        "system_state": "BMC_STARTING",
+        "start_process": True,
+        "monitor_process": True,
+        "process_name": "control_host.exe",
     },
-    'chassis_control': {
-        'system_state': 'BMC_STARTING',
-        'start_process': True,
-        'monitor_process': True,
-        'process_name': 'chassis_control.py',
+    "chassis_control": {
+        "system_state": "BMC_STARTING",
+        "start_process": True,
+        "monitor_process": True,
+        "process_name": "chassis_control.py",
     },
-    'bmc_control': {
-        'system_state': 'BMC_STARTING',
-        'start_process': True,
-        'monitor_process': True,
-        'process_name': 'control_bmc.exe',
-    }
+    "bmc_control": {
+        "system_state": "BMC_STARTING",
+        "start_process": True,
+        "monitor_process": True,
+        "process_name": "control_bmc.exe",
+    },
 }
 
 CACHED_INTERFACES = {
     "org.openbmc.InventoryItem": True,
     "org.openbmc.control.Chassis": True,
 }
-INVENTORY_ROOT = '/org/openbmc/inventory'
+INVENTORY_ROOT = "/org/openbmc/inventory"
 
 FRU_INSTANCES = {
-    '<inventory_root>/system': {'fru_type': 'SYSTEM', 'is_fru': True, },
-    '<inventory_root>/system/chassis': {'fru_type': 'SYSTEM', 'is_fru': True, },
-    '<inventory_root>/system/chassis/motherboard': {'fru_type': 'MAIN_PLANAR', 'is_fru': True, },
-
-    '<inventory_root>/system/chassis/fan0': {'fru_type': 'FAN', 'is_fru': True, },
-    '<inventory_root>/system/chassis/fan1': {'fru_type': 'FAN', 'is_fru': True, },
-    '<inventory_root>/system/chassis/fan2': {'fru_type': 'FAN', 'is_fru': True, },
-    '<inventory_root>/system/chassis/fan3': {'fru_type': 'FAN', 'is_fru': True, },
-    '<inventory_root>/system/chassis/fan4': {'fru_type': 'FAN', 'is_fru': True, },
-
-    '<inventory_root>/system/chassis/motherboard/bmc': {'fru_type': 'BMC', 'is_fru': False,
-                                                        'manufacturer': 'ASPEED'},
-    '<inventory_root>/system/chassis/motherboard/cpu': {'fru_type': 'CPU', 'is_fru': True, },
-    '<inventory_root>/system/chassis/motherboard/cpu/core0': {'fru_type': 'CORE',
-                                                              'is_fru': False, },
-    '<inventory_root>/system/chassis/motherboard/cpu/core1': {'fru_type': 'CORE',
-                                                              'is_fru': False, },
-    '<inventory_root>/system/chassis/motherboard/cpu/core2': {'fru_type': 'CORE',
-                                                              'is_fru': False, },
-    '<inventory_root>/system/chassis/motherboard/cpu/core3': {'fru_type': 'CORE',
-                                                              'is_fru': False, },
-    '<inventory_root>/system/chassis/motherboard/cpu/core4': {'fru_type': 'CORE',
-                                                              'is_fru': False, },
-    '<inventory_root>/system/chassis/motherboard/cpu/core5': {'fru_type': 'CORE',
-                                                              'is_fru': False, },
-    '<inventory_root>/system/chassis/motherboard/cpu/core6': {'fru_type': 'CORE',
-                                                              'is_fru': False, },
-    '<inventory_root>/system/chassis/motherboard/cpu/core7': {'fru_type': 'CORE',
-                                                              'is_fru': False, },
-    '<inventory_root>/system/chassis/motherboard/cpu/core8': {'fru_type': 'CORE',
-                                                              'is_fru': False, },
-    '<inventory_root>/system/chassis/motherboard/cpu/core9': {'fru_type': 'CORE',
-                                                              'is_fru': False, },
-    '<inventory_root>/system/chassis/motherboard/cpu/core10': {'fru_type': 'CORE',
-                                                               'is_fru': False, },
-    '<inventory_root>/system/chassis/motherboard/cpu/core11': {'fru_type': 'CORE',
-                                                               'is_fru': False, },
-
-    '<inventory_root>/system/chassis/motherboard/membuf': {'fru_type': 'MEMORY_BUFFER',
-                                                           'is_fru': False, },
-
-    '<inventory_root>/system/chassis/motherboard/dimm0': {'fru_type': 'DIMM', 'is_fru': True, },
-    '<inventory_root>/system/chassis/motherboard/dimm1': {'fru_type': 'DIMM', 'is_fru': True, },
-    '<inventory_root>/system/chassis/motherboard/dimm2': {'fru_type': 'DIMM', 'is_fru': True, },
-    '<inventory_root>/system/chassis/motherboard/dimm3': {'fru_type': 'DIMM', 'is_fru': True, },
-
-    '<inventory_root>/system/chassis/io_board/pcie_slot0': {'fru_type': 'PCIE_CARD',
-                                                            'is_fru': True, },
-    '<inventory_root>/system/chassis/io_board/pcie_slot1': {'fru_type': 'PCIE_CARD',
-                                                            'is_fru': True, },
-
-    '<inventory_root>/system/systemevent': {'fru_type': 'SYSTEM_EVENT', 'is_fru': False, },
-    '<inventory_root>/system/chassis/motherboard/refclock': {'fru_type': 'MAIN_PLANAR',
-                                                             'is_fru': False, },
-    '<inventory_root>/system/chassis/motherboard/pcieclock': {'fru_type': 'MAIN_PLANAR',
-                                                              'is_fru': False, },
-    '<inventory_root>/system/chassis/motherboard/todclock': {'fru_type': 'MAIN_PLANAR',
-                                                             'is_fru': False, },
-    '<inventory_root>/system/chassis/motherboard/apss': {'fru_type': 'MAIN_PLANAR',
-                                                         'is_fru': False, },
+    "<inventory_root>/system": {
+        "fru_type": "SYSTEM",
+        "is_fru": True,
+    },
+    "<inventory_root>/system/chassis": {
+        "fru_type": "SYSTEM",
+        "is_fru": True,
+    },
+    "<inventory_root>/system/chassis/motherboard": {
+        "fru_type": "MAIN_PLANAR",
+        "is_fru": True,
+    },
+    "<inventory_root>/system/chassis/fan0": {
+        "fru_type": "FAN",
+        "is_fru": True,
+    },
+    "<inventory_root>/system/chassis/fan1": {
+        "fru_type": "FAN",
+        "is_fru": True,
+    },
+    "<inventory_root>/system/chassis/fan2": {
+        "fru_type": "FAN",
+        "is_fru": True,
+    },
+    "<inventory_root>/system/chassis/fan3": {
+        "fru_type": "FAN",
+        "is_fru": True,
+    },
+    "<inventory_root>/system/chassis/fan4": {
+        "fru_type": "FAN",
+        "is_fru": True,
+    },
+    "<inventory_root>/system/chassis/motherboard/bmc": {
+        "fru_type": "BMC",
+        "is_fru": False,
+        "manufacturer": "ASPEED",
+    },
+    "<inventory_root>/system/chassis/motherboard/cpu": {
+        "fru_type": "CPU",
+        "is_fru": True,
+    },
+    "<inventory_root>/system/chassis/motherboard/cpu/core0": {
+        "fru_type": "CORE",
+        "is_fru": False,
+    },
+    "<inventory_root>/system/chassis/motherboard/cpu/core1": {
+        "fru_type": "CORE",
+        "is_fru": False,
+    },
+    "<inventory_root>/system/chassis/motherboard/cpu/core2": {
+        "fru_type": "CORE",
+        "is_fru": False,
+    },
+    "<inventory_root>/system/chassis/motherboard/cpu/core3": {
+        "fru_type": "CORE",
+        "is_fru": False,
+    },
+    "<inventory_root>/system/chassis/motherboard/cpu/core4": {
+        "fru_type": "CORE",
+        "is_fru": False,
+    },
+    "<inventory_root>/system/chassis/motherboard/cpu/core5": {
+        "fru_type": "CORE",
+        "is_fru": False,
+    },
+    "<inventory_root>/system/chassis/motherboard/cpu/core6": {
+        "fru_type": "CORE",
+        "is_fru": False,
+    },
+    "<inventory_root>/system/chassis/motherboard/cpu/core7": {
+        "fru_type": "CORE",
+        "is_fru": False,
+    },
+    "<inventory_root>/system/chassis/motherboard/cpu/core8": {
+        "fru_type": "CORE",
+        "is_fru": False,
+    },
+    "<inventory_root>/system/chassis/motherboard/cpu/core9": {
+        "fru_type": "CORE",
+        "is_fru": False,
+    },
+    "<inventory_root>/system/chassis/motherboard/cpu/core10": {
+        "fru_type": "CORE",
+        "is_fru": False,
+    },
+    "<inventory_root>/system/chassis/motherboard/cpu/core11": {
+        "fru_type": "CORE",
+        "is_fru": False,
+    },
+    "<inventory_root>/system/chassis/motherboard/membuf": {
+        "fru_type": "MEMORY_BUFFER",
+        "is_fru": False,
+    },
+    "<inventory_root>/system/chassis/motherboard/dimm0": {
+        "fru_type": "DIMM",
+        "is_fru": True,
+    },
+    "<inventory_root>/system/chassis/motherboard/dimm1": {
+        "fru_type": "DIMM",
+        "is_fru": True,
+    },
+    "<inventory_root>/system/chassis/motherboard/dimm2": {
+        "fru_type": "DIMM",
+        "is_fru": True,
+    },
+    "<inventory_root>/system/chassis/motherboard/dimm3": {
+        "fru_type": "DIMM",
+        "is_fru": True,
+    },
+    "<inventory_root>/system/chassis/io_board/pcie_slot0": {
+        "fru_type": "PCIE_CARD",
+        "is_fru": True,
+    },
+    "<inventory_root>/system/chassis/io_board/pcie_slot1": {
+        "fru_type": "PCIE_CARD",
+        "is_fru": True,
+    },
+    "<inventory_root>/system/systemevent": {
+        "fru_type": "SYSTEM_EVENT",
+        "is_fru": False,
+    },
+    "<inventory_root>/system/chassis/motherboard/refclock": {
+        "fru_type": "MAIN_PLANAR",
+        "is_fru": False,
+    },
+    "<inventory_root>/system/chassis/motherboard/pcieclock": {
+        "fru_type": "MAIN_PLANAR",
+        "is_fru": False,
+    },
+    "<inventory_root>/system/chassis/motherboard/todclock": {
+        "fru_type": "MAIN_PLANAR",
+        "is_fru": False,
+    },
+    "<inventory_root>/system/chassis/motherboard/apss": {
+        "fru_type": "MAIN_PLANAR",
+        "is_fru": False,
+    },
 }
 
 ID_LOOKUP = {
-    'FRU': {
-        0x0d: '<inventory_root>/system/chassis',
-        0x34: '<inventory_root>/system/chassis/motherboard',
-        0x01: '<inventory_root>/system/chassis/motherboard/cpu',
-        0x02: '<inventory_root>/system/chassis/motherboard/membuf',
-        0x03: '<inventory_root>/system/chassis/motherboard/dimm0',
-        0x04: '<inventory_root>/system/chassis/motherboard/dimm1',
-        0x05: '<inventory_root>/system/chassis/motherboard/dimm2',
-        0x06: '<inventory_root>/system/chassis/motherboard/dimm3',
-        0x35: '<inventory_root>/system',
+    "FRU": {
+        0x0D: "<inventory_root>/system/chassis",
+        0x34: "<inventory_root>/system/chassis/motherboard",
+        0x01: "<inventory_root>/system/chassis/motherboard/cpu",
+        0x02: "<inventory_root>/system/chassis/motherboard/membuf",
+        0x03: "<inventory_root>/system/chassis/motherboard/dimm0",
+        0x04: "<inventory_root>/system/chassis/motherboard/dimm1",
+        0x05: "<inventory_root>/system/chassis/motherboard/dimm2",
+        0x06: "<inventory_root>/system/chassis/motherboard/dimm3",
+        0x35: "<inventory_root>/system",
     },
-    'FRU_STR': {
-        'PRODUCT_15': '<inventory_root>/system',
-        'CHASSIS_2': '<inventory_root>/system/chassis',
-        'BOARD_1': '<inventory_root>/system/chassis/motherboard/cpu',
-        'BOARD_2': '<inventory_root>/system/chassis/motherboard/membuf',
-        'BOARD_14': '<inventory_root>/system/chassis/motherboard',
-        'PRODUCT_3': '<inventory_root>/system/chassis/motherboard/dimm0',
-        'PRODUCT_4': '<inventory_root>/system/chassis/motherboard/dimm1',
-        'PRODUCT_5': '<inventory_root>/system/chassis/motherboard/dimm2',
-        'PRODUCT_6': '<inventory_root>/system/chassis/motherboard/dimm3',
+    "FRU_STR": {
+        "PRODUCT_15": "<inventory_root>/system",
+        "CHASSIS_2": "<inventory_root>/system/chassis",
+        "BOARD_1": "<inventory_root>/system/chassis/motherboard/cpu",
+        "BOARD_2": "<inventory_root>/system/chassis/motherboard/membuf",
+        "BOARD_14": "<inventory_root>/system/chassis/motherboard",
+        "PRODUCT_3": "<inventory_root>/system/chassis/motherboard/dimm0",
+        "PRODUCT_4": "<inventory_root>/system/chassis/motherboard/dimm1",
+        "PRODUCT_5": "<inventory_root>/system/chassis/motherboard/dimm2",
+        "PRODUCT_6": "<inventory_root>/system/chassis/motherboard/dimm3",
     },
-    'SENSOR': {
-        0x34: '<inventory_root>/system/chassis/motherboard',
-        0x37: '<inventory_root>/system/chassis/motherboard/refclock',
-        0x38: '<inventory_root>/system/chassis/motherboard/pcieclock',
-        0x39: '<inventory_root>/system/chassis/motherboard/todclock',
-        0x3A: '<inventory_root>/system/chassis/apss',
-        0x2f: '<inventory_root>/system/chassis/motherboard/cpu',
-        0x22: '<inventory_root>/system/chassis/motherboard/cpu/core1',
-        0x23: '<inventory_root>/system/chassis/motherboard/cpu/core2',
-        0x24: '<inventory_root>/system/chassis/motherboard/cpu/core3',
-        0x25: '<inventory_root>/system/chassis/motherboard/cpu/core4',
-        0x26: '<inventory_root>/system/chassis/motherboard/cpu/core5',
-        0x27: '<inventory_root>/system/chassis/motherboard/cpu/core6',
-        0x28: '<inventory_root>/system/chassis/motherboard/cpu/core9',
-        0x29: '<inventory_root>/system/chassis/motherboard/cpu/core10',
-        0x2a: '<inventory_root>/system/chassis/motherboard/cpu/core11',
-        0x2b: '<inventory_root>/system/chassis/motherboard/cpu/core12',
-        0x2c: '<inventory_root>/system/chassis/motherboard/cpu/core13',
-        0x2d: '<inventory_root>/system/chassis/motherboard/cpu/core14',
-        0x2e: '<inventory_root>/system/chassis/motherboard/membuf',
-        0x1e: '<inventory_root>/system/chassis/motherboard/dimm0',
-        0x1f: '<inventory_root>/system/chassis/motherboard/dimm1',
-        0x20: '<inventory_root>/system/chassis/motherboard/dimm2',
-        0x21: '<inventory_root>/system/chassis/motherboard/dimm3',
-        0x09: '/org/openbmc/sensors/host/BootCount',
-        0x05: '/org/openbmc/sensors/host/BootProgress',
-        0x08: '/org/openbmc/sensors/host/cpu0/OccStatus',
-        0x32: '/org/openbmc/sensors/host/OperatingSystemStatus',
-        0x33: '/org/openbmc/sensors/host/PowerCap',
+    "SENSOR": {
+        0x34: "<inventory_root>/system/chassis/motherboard",
+        0x37: "<inventory_root>/system/chassis/motherboard/refclock",
+        0x38: "<inventory_root>/system/chassis/motherboard/pcieclock",
+        0x39: "<inventory_root>/system/chassis/motherboard/todclock",
+        0x3A: "<inventory_root>/system/chassis/apss",
+        0x2F: "<inventory_root>/system/chassis/motherboard/cpu",
+        0x22: "<inventory_root>/system/chassis/motherboard/cpu/core1",
+        0x23: "<inventory_root>/system/chassis/motherboard/cpu/core2",
+        0x24: "<inventory_root>/system/chassis/motherboard/cpu/core3",
+        0x25: "<inventory_root>/system/chassis/motherboard/cpu/core4",
+        0x26: "<inventory_root>/system/chassis/motherboard/cpu/core5",
+        0x27: "<inventory_root>/system/chassis/motherboard/cpu/core6",
+        0x28: "<inventory_root>/system/chassis/motherboard/cpu/core9",
+        0x29: "<inventory_root>/system/chassis/motherboard/cpu/core10",
+        0x2A: "<inventory_root>/system/chassis/motherboard/cpu/core11",
+        0x2B: "<inventory_root>/system/chassis/motherboard/cpu/core12",
+        0x2C: "<inventory_root>/system/chassis/motherboard/cpu/core13",
+        0x2D: "<inventory_root>/system/chassis/motherboard/cpu/core14",
+        0x2E: "<inventory_root>/system/chassis/motherboard/membuf",
+        0x1E: "<inventory_root>/system/chassis/motherboard/dimm0",
+        0x1F: "<inventory_root>/system/chassis/motherboard/dimm1",
+        0x20: "<inventory_root>/system/chassis/motherboard/dimm2",
+        0x21: "<inventory_root>/system/chassis/motherboard/dimm3",
+        0x09: "/org/openbmc/sensors/host/BootCount",
+        0x05: "/org/openbmc/sensors/host/BootProgress",
+        0x08: "/org/openbmc/sensors/host/cpu0/OccStatus",
+        0x32: "/org/openbmc/sensors/host/OperatingSystemStatus",
+        0x33: "/org/openbmc/sensors/host/PowerCap",
     },
-    'GPIO_PRESENT': {
-        'SLOT0_PRESENT': '<inventory_root>/system/chassis/io_board/pcie_slot0',
-        'SLOT1_PRESENT': '<inventory_root>/system/chassis/io_board/pcie_slot1',
-    }
+    "GPIO_PRESENT": {
+        "SLOT0_PRESENT": "<inventory_root>/system/chassis/io_board/pcie_slot0",
+        "SLOT1_PRESENT": "<inventory_root>/system/chassis/io_board/pcie_slot1",
+    },
 }
 
 GPIO_CONFIG = {}
-GPIO_CONFIG['FSI_CLK'] = {'gpio_pin': 'A4', 'direction': 'out'}
-GPIO_CONFIG['FSI_DATA'] = {'gpio_pin': 'A5', 'direction': 'out'}
-GPIO_CONFIG['FSI_ENABLE'] = {'gpio_pin': 'D0', 'direction': 'out'}
-GPIO_CONFIG['POWER_PIN'] = {'gpio_pin': 'E1', 'direction': 'out'}
-GPIO_CONFIG['CRONUS_SEL'] = {'gpio_pin': 'A6', 'direction': 'out'}
-GPIO_CONFIG['PGOOD'] = {'gpio_pin': 'C7', 'direction': 'in'}
-GPIO_CONFIG['BMC_THROTTLE'] = {'gpio_pin': 'J3', 'direction': 'out'}
-GPIO_CONFIG['IDBTN'] = {'gpio_pin': 'Q7', 'direction': 'out'}
-GPIO_CONFIG['POWER_BUTTON'] = {'gpio_pin': 'E0', 'direction': 'both'}
-GPIO_CONFIG['PCIE_RESET'] = {'gpio_pin': 'B5', 'direction': 'out'}
-GPIO_CONFIG['USB_RESET'] = {'gpio_pin': 'B6', 'direction': 'out'}
-GPIO_CONFIG['SLOT0_RISER_PRESENT'] = {'gpio_pin': 'N0', 'direction': 'in'}
-GPIO_CONFIG['SLOT1_RISER_PRESENT'] = {'gpio_pin': 'N1', 'direction': 'in'}
-GPIO_CONFIG['SLOT2_RISER_PRESENT'] = {'gpio_pin': 'N2', 'direction': 'in'}
-GPIO_CONFIG['SLOT0_PRESENT'] = {'gpio_pin': 'N3', 'direction': 'in'}
-GPIO_CONFIG['SLOT1_PRESENT'] = {'gpio_pin': 'N4', 'direction': 'in'}
-GPIO_CONFIG['SLOT2_PRESENT'] = {'gpio_pin': 'N5', 'direction': 'in'}
-GPIO_CONFIG['MEZZ0_PRESENT'] = {'gpio_pin': 'O0', 'direction': 'in'}
-GPIO_CONFIG['MEZZ1_PRESENT'] = {'gpio_pin': 'O1', 'direction': 'in'}
+GPIO_CONFIG["FSI_CLK"] = {"gpio_pin": "A4", "direction": "out"}
+GPIO_CONFIG["FSI_DATA"] = {"gpio_pin": "A5", "direction": "out"}
+GPIO_CONFIG["FSI_ENABLE"] = {"gpio_pin": "D0", "direction": "out"}
+GPIO_CONFIG["POWER_PIN"] = {"gpio_pin": "E1", "direction": "out"}
+GPIO_CONFIG["CRONUS_SEL"] = {"gpio_pin": "A6", "direction": "out"}
+GPIO_CONFIG["PGOOD"] = {"gpio_pin": "C7", "direction": "in"}
+GPIO_CONFIG["BMC_THROTTLE"] = {"gpio_pin": "J3", "direction": "out"}
+GPIO_CONFIG["IDBTN"] = {"gpio_pin": "Q7", "direction": "out"}
+GPIO_CONFIG["POWER_BUTTON"] = {"gpio_pin": "E0", "direction": "both"}
+GPIO_CONFIG["PCIE_RESET"] = {"gpio_pin": "B5", "direction": "out"}
+GPIO_CONFIG["USB_RESET"] = {"gpio_pin": "B6", "direction": "out"}
+GPIO_CONFIG["SLOT0_RISER_PRESENT"] = {"gpio_pin": "N0", "direction": "in"}
+GPIO_CONFIG["SLOT1_RISER_PRESENT"] = {"gpio_pin": "N1", "direction": "in"}
+GPIO_CONFIG["SLOT2_RISER_PRESENT"] = {"gpio_pin": "N2", "direction": "in"}
+GPIO_CONFIG["SLOT0_PRESENT"] = {"gpio_pin": "N3", "direction": "in"}
+GPIO_CONFIG["SLOT1_PRESENT"] = {"gpio_pin": "N4", "direction": "in"}
+GPIO_CONFIG["SLOT2_PRESENT"] = {"gpio_pin": "N5", "direction": "in"}
+GPIO_CONFIG["MEZZ0_PRESENT"] = {"gpio_pin": "O0", "direction": "in"}
+GPIO_CONFIG["MEZZ1_PRESENT"] = {"gpio_pin": "O1", "direction": "in"}
 
 
 def convertGpio(name):
@@ -316,38 +393,70 @@
 
 
 HWMON_CONFIG = {
-    '2-004c': {
-        'names': {
-            'temp1_input': {'object_path': 'temperature/ambient', 'poll_interval': 5000,
-                            'scale': 1000, 'units': 'C'},
+    "2-004c": {
+        "names": {
+            "temp1_input": {
+                "object_path": "temperature/ambient",
+                "poll_interval": 5000,
+                "scale": 1000,
+                "units": "C",
+            },
         }
     },
-    '3-0050': {
-        'names': {
-            'caps_curr_powercap': {'object_path': 'powercap/curr_cap', 'poll_interval': 10000,
-                                   'scale': 1, 'units': 'W'},
-            'caps_curr_powerreading': {'object_path': 'powercap/system_power',
-                                       'poll_interval': 10000, 'scale': 1, 'units': 'W'},
-            'caps_max_powercap': {'object_path': 'powercap/max_cap', 'poll_interval': 10000,
-                                  'scale': 1, 'units': 'W'},
-            'caps_min_powercap': {'object_path': 'powercap/min_cap', 'poll_interval': 10000,
-                                  'scale': 1, 'units': 'W'},
-            'caps_norm_powercap': {'object_path': 'powercap/n_cap', 'poll_interval': 10000,
-                                   'scale': 1, 'units': 'W'},
-            'caps_user_powerlimit': {'object_path': 'powercap/user_cap', 'poll_interval': 10000,
-                                     'scale': 1, 'units': 'W'},
+    "3-0050": {
+        "names": {
+            "caps_curr_powercap": {
+                "object_path": "powercap/curr_cap",
+                "poll_interval": 10000,
+                "scale": 1,
+                "units": "W",
+            },
+            "caps_curr_powerreading": {
+                "object_path": "powercap/system_power",
+                "poll_interval": 10000,
+                "scale": 1,
+                "units": "W",
+            },
+            "caps_max_powercap": {
+                "object_path": "powercap/max_cap",
+                "poll_interval": 10000,
+                "scale": 1,
+                "units": "W",
+            },
+            "caps_min_powercap": {
+                "object_path": "powercap/min_cap",
+                "poll_interval": 10000,
+                "scale": 1,
+                "units": "W",
+            },
+            "caps_norm_powercap": {
+                "object_path": "powercap/n_cap",
+                "poll_interval": 10000,
+                "scale": 1,
+                "units": "W",
+            },
+            "caps_user_powerlimit": {
+                "object_path": "powercap/user_cap",
+                "poll_interval": 10000,
+                "scale": 1,
+                "units": "W",
+            },
         }
-    }
+    },
 }
 
 # Miscellaneous non-poll sensor with system specific properties.
 # The sensor id is the same as those defined in ID_LOOKUP['SENSOR'].
 MISC_SENSORS = {
-    0x09: {'class': 'BootCountSensor'},
-    0x05: {'class': 'BootProgressSensor'},
-    0x08: {'class': 'OccStatusSensor',
-           'os_path': '/sys/class/i2c-adapter/i2c-3/3-0050/online'},
-    0x32: {'class': 'OperatingSystemStatusSensor'},
-    0x33: {'class': 'PowerCap',
-           'os_path': '/sys/class/hwmon/hwmon1/user_powercap'},
+    0x09: {"class": "BootCountSensor"},
+    0x05: {"class": "BootProgressSensor"},
+    0x08: {
+        "class": "OccStatusSensor",
+        "os_path": "/sys/class/i2c-adapter/i2c-3/3-0050/online",
+    },
+    0x32: {"class": "OperatingSystemStatusSensor"},
+    0x33: {
+        "class": "PowerCap",
+        "os_path": "/sys/class/hwmon/hwmon1/user_powercap",
+    },
 }
diff --git a/data/Romulus.py b/data/Romulus.py
index 13c405c..6b753d6 100644
--- a/data/Romulus.py
+++ b/data/Romulus.py
@@ -2,470 +2,943 @@
 #
 
 SYSTEM_STATES = [
-    'BASE_APPS',
-    'BMC_STARTING',
-    'BMC_READY',
-    'HOST_POWERING_ON',
-    'HOST_POWERED_ON',
-    'HOST_BOOTING',
-    'HOST_BOOTED',
-    'HOST_POWERED_OFF',
+    "BASE_APPS",
+    "BMC_STARTING",
+    "BMC_READY",
+    "HOST_POWERING_ON",
+    "HOST_POWERED_ON",
+    "HOST_BOOTING",
+    "HOST_BOOTED",
+    "HOST_POWERED_OFF",
 ]
 
 EXIT_STATE_DEPEND = {
-    'BASE_APPS': {
-        '/org/openbmc/sensors': 0,
+    "BASE_APPS": {
+        "/org/openbmc/sensors": 0,
     },
-    'BMC_STARTING': {
-        '/org/openbmc/control/chassis0': 0,
-        '/org/openbmc/control/power0': 0,
-        '/org/openbmc/control/flash/bios': 0,
+    "BMC_STARTING": {
+        "/org/openbmc/control/chassis0": 0,
+        "/org/openbmc/control/power0": 0,
+        "/org/openbmc/control/flash/bios": 0,
     },
 }
 
-INVENTORY_ROOT = '/org/openbmc/inventory'
+INVENTORY_ROOT = "/org/openbmc/inventory"
 
 FRU_INSTANCES = {
-    '<inventory_root>/system': {'fru_type': 'SYSTEM', 'is_fru': True, 'present': "True"},
-    '<inventory_root>/system/bios': {'fru_type': 'SYSTEM', 'is_fru': True, 'present': "True"},
-    '<inventory_root>/system/misc': {'fru_type': 'SYSTEM', 'is_fru': False, },
-
-    '<inventory_root>/system/chassis': {'fru_type': 'SYSTEM', 'is_fru': True, 'present': "True"},
-
-    '<inventory_root>/system/chassis/motherboard': {'fru_type': 'MAIN_PLANAR', 'is_fru': True, },
-
-    '<inventory_root>/system/systemevent': {'fru_type': 'SYSTEM_EVENT', 'is_fru': False, },
-    '<inventory_root>/system/chassis/motherboard/refclock': {'fru_type': 'MAIN_PLANAR',
-                                                             'is_fru': False, },
-    '<inventory_root>/system/chassis/motherboard/pcieclock': {'fru_type': 'MAIN_PLANAR',
-                                                              'is_fru': False, },
-    '<inventory_root>/system/chassis/motherboard/todclock': {'fru_type': 'MAIN_PLANAR',
-                                                             'is_fru': False, },
-    '<inventory_root>/system/chassis/motherboard/apss': {'fru_type': 'MAIN_PLANAR',
-                                                         'is_fru': False, },
-
-    '<inventory_root>/system/chassis/fan0': {'fru_type': 'FAN', 'is_fru': True, },
-    '<inventory_root>/system/chassis/fan1': {'fru_type': 'FAN', 'is_fru': True, },
-    '<inventory_root>/system/chassis/fan2': {'fru_type': 'FAN', 'is_fru': True, },
-    '<inventory_root>/system/chassis/fan3': {'fru_type': 'FAN', 'is_fru': True, },
-
-    '<inventory_root>/system/chassis/motherboard/bmc': {'fru_type': 'BMC', 'is_fru': False,
-                                                        'manufacturer': 'ASPEED'},
-
-    '<inventory_root>/system/chassis/motherboard/cpu0': {'fru_type': 'CPU', 'is_fru': True, },
-    '<inventory_root>/system/chassis/motherboard/cpu1': {'fru_type': 'CPU', 'is_fru': True, },
-
-    '<inventory_root>/system/chassis/motherboard/cpu0/core0': {'fru_type': 'CORE', 'is_fru': False, },
-    '<inventory_root>/system/chassis/motherboard/cpu0/core1': {'fru_type': 'CORE', 'is_fru': False, },
-    '<inventory_root>/system/chassis/motherboard/cpu0/core2': {'fru_type': 'CORE', 'is_fru': False, },
-    '<inventory_root>/system/chassis/motherboard/cpu0/core3': {'fru_type': 'CORE', 'is_fru': False, },
-    '<inventory_root>/system/chassis/motherboard/cpu0/core4': {'fru_type': 'CORE', 'is_fru': False, },
-    '<inventory_root>/system/chassis/motherboard/cpu0/core5': {'fru_type': 'CORE', 'is_fru': False, },
-    '<inventory_root>/system/chassis/motherboard/cpu0/core6': {'fru_type': 'CORE', 'is_fru': False, },
-    '<inventory_root>/system/chassis/motherboard/cpu0/core7': {'fru_type': 'CORE', 'is_fru': False, },
-    '<inventory_root>/system/chassis/motherboard/cpu0/core8': {'fru_type': 'CORE', 'is_fru': False, },
-    '<inventory_root>/system/chassis/motherboard/cpu0/core9': {'fru_type': 'CORE', 'is_fru': False, },
-    '<inventory_root>/system/chassis/motherboard/cpu0/core10': {'fru_type': 'CORE', 'is_fru': False, },
-    '<inventory_root>/system/chassis/motherboard/cpu0/core11': {'fru_type': 'CORE', 'is_fru': False, },
-    '<inventory_root>/system/chassis/motherboard/cpu0/core12': {'fru_type': 'CORE', 'is_fru': False, },
-    '<inventory_root>/system/chassis/motherboard/cpu0/core13': {'fru_type': 'CORE', 'is_fru': False, },
-    '<inventory_root>/system/chassis/motherboard/cpu0/core14': {'fru_type': 'CORE', 'is_fru': False, },
-    '<inventory_root>/system/chassis/motherboard/cpu0/core15': {'fru_type': 'CORE', 'is_fru': False, },
-    '<inventory_root>/system/chassis/motherboard/cpu0/core16': {'fru_type': 'CORE', 'is_fru': False, },
-    '<inventory_root>/system/chassis/motherboard/cpu0/core17': {'fru_type': 'CORE', 'is_fru': False, },
-    '<inventory_root>/system/chassis/motherboard/cpu0/core18': {'fru_type': 'CORE', 'is_fru': False, },
-    '<inventory_root>/system/chassis/motherboard/cpu0/core19': {'fru_type': 'CORE', 'is_fru': False, },
-    '<inventory_root>/system/chassis/motherboard/cpu0/core20': {'fru_type': 'CORE', 'is_fru': False, },
-    '<inventory_root>/system/chassis/motherboard/cpu0/core21': {'fru_type': 'CORE', 'is_fru': False, },
-    '<inventory_root>/system/chassis/motherboard/cpu0/core22': {'fru_type': 'CORE', 'is_fru': False, },
-    '<inventory_root>/system/chassis/motherboard/cpu0/core23': {'fru_type': 'CORE', 'is_fru': False, },
-
-    '<inventory_root>/system/chassis/motherboard/cpu1/core0': {'fru_type': 'CORE', 'is_fru': False, },
-    '<inventory_root>/system/chassis/motherboard/cpu1/core1': {'fru_type': 'CORE', 'is_fru': False, },
-    '<inventory_root>/system/chassis/motherboard/cpu1/core2': {'fru_type': 'CORE', 'is_fru': False, },
-    '<inventory_root>/system/chassis/motherboard/cpu1/core3': {'fru_type': 'CORE', 'is_fru': False, },
-    '<inventory_root>/system/chassis/motherboard/cpu1/core4': {'fru_type': 'CORE', 'is_fru': False, },
-    '<inventory_root>/system/chassis/motherboard/cpu1/core5': {'fru_type': 'CORE', 'is_fru': False, },
-    '<inventory_root>/system/chassis/motherboard/cpu1/core6': {'fru_type': 'CORE', 'is_fru': False, },
-    '<inventory_root>/system/chassis/motherboard/cpu1/core7': {'fru_type': 'CORE', 'is_fru': False, },
-    '<inventory_root>/system/chassis/motherboard/cpu1/core8': {'fru_type': 'CORE', 'is_fru': False, },
-    '<inventory_root>/system/chassis/motherboard/cpu1/core9': {'fru_type': 'CORE', 'is_fru': False, },
-    '<inventory_root>/system/chassis/motherboard/cpu1/core10': {'fru_type': 'CORE', 'is_fru': False, },
-    '<inventory_root>/system/chassis/motherboard/cpu1/core11': {'fru_type': 'CORE', 'is_fru': False, },
-    '<inventory_root>/system/chassis/motherboard/cpu1/core12': {'fru_type': 'CORE', 'is_fru': False, },
-    '<inventory_root>/system/chassis/motherboard/cpu1/core13': {'fru_type': 'CORE', 'is_fru': False, },
-    '<inventory_root>/system/chassis/motherboard/cpu1/core14': {'fru_type': 'CORE', 'is_fru': False, },
-    '<inventory_root>/system/chassis/motherboard/cpu1/core15': {'fru_type': 'CORE', 'is_fru': False, },
-    '<inventory_root>/system/chassis/motherboard/cpu1/core16': {'fru_type': 'CORE', 'is_fru': False, },
-    '<inventory_root>/system/chassis/motherboard/cpu1/core17': {'fru_type': 'CORE', 'is_fru': False, },
-    '<inventory_root>/system/chassis/motherboard/cpu1/core18': {'fru_type': 'CORE', 'is_fru': False, },
-    '<inventory_root>/system/chassis/motherboard/cpu1/core19': {'fru_type': 'CORE', 'is_fru': False, },
-    '<inventory_root>/system/chassis/motherboard/cpu1/core20': {'fru_type': 'CORE', 'is_fru': False, },
-    '<inventory_root>/system/chassis/motherboard/cpu1/core21': {'fru_type': 'CORE', 'is_fru': False, },
-    '<inventory_root>/system/chassis/motherboard/cpu1/core22': {'fru_type': 'CORE', 'is_fru': False, },
-    '<inventory_root>/system/chassis/motherboard/cpu1/core23': {'fru_type': 'CORE', 'is_fru': False, },
-
-    '<inventory_root>/system/chassis/motherboard/dimm0': {'fru_type': 'DIMM', 'is_fru': True, },
-    '<inventory_root>/system/chassis/motherboard/dimm1': {'fru_type': 'DIMM', 'is_fru': True, },
-    '<inventory_root>/system/chassis/motherboard/dimm2': {'fru_type': 'DIMM', 'is_fru': True, },
-    '<inventory_root>/system/chassis/motherboard/dimm3': {'fru_type': 'DIMM', 'is_fru': True, },
-    '<inventory_root>/system/chassis/motherboard/dimm4': {'fru_type': 'DIMM', 'is_fru': True, },
-    '<inventory_root>/system/chassis/motherboard/dimm5': {'fru_type': 'DIMM', 'is_fru': True, },
-    '<inventory_root>/system/chassis/motherboard/dimm6': {'fru_type': 'DIMM', 'is_fru': True, },
-    '<inventory_root>/system/chassis/motherboard/dimm7': {'fru_type': 'DIMM', 'is_fru': True, },
-    '<inventory_root>/system/chassis/motherboard/dimm8': {'fru_type': 'DIMM', 'is_fru': True, },
-    '<inventory_root>/system/chassis/motherboard/dimm9': {'fru_type': 'DIMM', 'is_fru': True, },
-    '<inventory_root>/system/chassis/motherboard/dimm10': {'fru_type': 'DIMM', 'is_fru': True, },
-    '<inventory_root>/system/chassis/motherboard/dimm11': {'fru_type': 'DIMM', 'is_fru': True, },
-    '<inventory_root>/system/chassis/motherboard/dimm12': {'fru_type': 'DIMM', 'is_fru': True, },
-    '<inventory_root>/system/chassis/motherboard/dimm13': {'fru_type': 'DIMM', 'is_fru': True, },
-    '<inventory_root>/system/chassis/motherboard/dimm14': {'fru_type': 'DIMM', 'is_fru': True, },
-    '<inventory_root>/system/chassis/motherboard/dimm15': {'fru_type': 'DIMM', 'is_fru': True, },
+    "<inventory_root>/system": {
+        "fru_type": "SYSTEM",
+        "is_fru": True,
+        "present": "True",
+    },
+    "<inventory_root>/system/bios": {
+        "fru_type": "SYSTEM",
+        "is_fru": True,
+        "present": "True",
+    },
+    "<inventory_root>/system/misc": {
+        "fru_type": "SYSTEM",
+        "is_fru": False,
+    },
+    "<inventory_root>/system/chassis": {
+        "fru_type": "SYSTEM",
+        "is_fru": True,
+        "present": "True",
+    },
+    "<inventory_root>/system/chassis/motherboard": {
+        "fru_type": "MAIN_PLANAR",
+        "is_fru": True,
+    },
+    "<inventory_root>/system/systemevent": {
+        "fru_type": "SYSTEM_EVENT",
+        "is_fru": False,
+    },
+    "<inventory_root>/system/chassis/motherboard/refclock": {
+        "fru_type": "MAIN_PLANAR",
+        "is_fru": False,
+    },
+    "<inventory_root>/system/chassis/motherboard/pcieclock": {
+        "fru_type": "MAIN_PLANAR",
+        "is_fru": False,
+    },
+    "<inventory_root>/system/chassis/motherboard/todclock": {
+        "fru_type": "MAIN_PLANAR",
+        "is_fru": False,
+    },
+    "<inventory_root>/system/chassis/motherboard/apss": {
+        "fru_type": "MAIN_PLANAR",
+        "is_fru": False,
+    },
+    "<inventory_root>/system/chassis/fan0": {
+        "fru_type": "FAN",
+        "is_fru": True,
+    },
+    "<inventory_root>/system/chassis/fan1": {
+        "fru_type": "FAN",
+        "is_fru": True,
+    },
+    "<inventory_root>/system/chassis/fan2": {
+        "fru_type": "FAN",
+        "is_fru": True,
+    },
+    "<inventory_root>/system/chassis/fan3": {
+        "fru_type": "FAN",
+        "is_fru": True,
+    },
+    "<inventory_root>/system/chassis/motherboard/bmc": {
+        "fru_type": "BMC",
+        "is_fru": False,
+        "manufacturer": "ASPEED",
+    },
+    "<inventory_root>/system/chassis/motherboard/cpu0": {
+        "fru_type": "CPU",
+        "is_fru": True,
+    },
+    "<inventory_root>/system/chassis/motherboard/cpu1": {
+        "fru_type": "CPU",
+        "is_fru": True,
+    },
+    "<inventory_root>/system/chassis/motherboard/cpu0/core0": {
+        "fru_type": "CORE",
+        "is_fru": False,
+    },
+    "<inventory_root>/system/chassis/motherboard/cpu0/core1": {
+        "fru_type": "CORE",
+        "is_fru": False,
+    },
+    "<inventory_root>/system/chassis/motherboard/cpu0/core2": {
+        "fru_type": "CORE",
+        "is_fru": False,
+    },
+    "<inventory_root>/system/chassis/motherboard/cpu0/core3": {
+        "fru_type": "CORE",
+        "is_fru": False,
+    },
+    "<inventory_root>/system/chassis/motherboard/cpu0/core4": {
+        "fru_type": "CORE",
+        "is_fru": False,
+    },
+    "<inventory_root>/system/chassis/motherboard/cpu0/core5": {
+        "fru_type": "CORE",
+        "is_fru": False,
+    },
+    "<inventory_root>/system/chassis/motherboard/cpu0/core6": {
+        "fru_type": "CORE",
+        "is_fru": False,
+    },
+    "<inventory_root>/system/chassis/motherboard/cpu0/core7": {
+        "fru_type": "CORE",
+        "is_fru": False,
+    },
+    "<inventory_root>/system/chassis/motherboard/cpu0/core8": {
+        "fru_type": "CORE",
+        "is_fru": False,
+    },
+    "<inventory_root>/system/chassis/motherboard/cpu0/core9": {
+        "fru_type": "CORE",
+        "is_fru": False,
+    },
+    "<inventory_root>/system/chassis/motherboard/cpu0/core10": {
+        "fru_type": "CORE",
+        "is_fru": False,
+    },
+    "<inventory_root>/system/chassis/motherboard/cpu0/core11": {
+        "fru_type": "CORE",
+        "is_fru": False,
+    },
+    "<inventory_root>/system/chassis/motherboard/cpu0/core12": {
+        "fru_type": "CORE",
+        "is_fru": False,
+    },
+    "<inventory_root>/system/chassis/motherboard/cpu0/core13": {
+        "fru_type": "CORE",
+        "is_fru": False,
+    },
+    "<inventory_root>/system/chassis/motherboard/cpu0/core14": {
+        "fru_type": "CORE",
+        "is_fru": False,
+    },
+    "<inventory_root>/system/chassis/motherboard/cpu0/core15": {
+        "fru_type": "CORE",
+        "is_fru": False,
+    },
+    "<inventory_root>/system/chassis/motherboard/cpu0/core16": {
+        "fru_type": "CORE",
+        "is_fru": False,
+    },
+    "<inventory_root>/system/chassis/motherboard/cpu0/core17": {
+        "fru_type": "CORE",
+        "is_fru": False,
+    },
+    "<inventory_root>/system/chassis/motherboard/cpu0/core18": {
+        "fru_type": "CORE",
+        "is_fru": False,
+    },
+    "<inventory_root>/system/chassis/motherboard/cpu0/core19": {
+        "fru_type": "CORE",
+        "is_fru": False,
+    },
+    "<inventory_root>/system/chassis/motherboard/cpu0/core20": {
+        "fru_type": "CORE",
+        "is_fru": False,
+    },
+    "<inventory_root>/system/chassis/motherboard/cpu0/core21": {
+        "fru_type": "CORE",
+        "is_fru": False,
+    },
+    "<inventory_root>/system/chassis/motherboard/cpu0/core22": {
+        "fru_type": "CORE",
+        "is_fru": False,
+    },
+    "<inventory_root>/system/chassis/motherboard/cpu0/core23": {
+        "fru_type": "CORE",
+        "is_fru": False,
+    },
+    "<inventory_root>/system/chassis/motherboard/cpu1/core0": {
+        "fru_type": "CORE",
+        "is_fru": False,
+    },
+    "<inventory_root>/system/chassis/motherboard/cpu1/core1": {
+        "fru_type": "CORE",
+        "is_fru": False,
+    },
+    "<inventory_root>/system/chassis/motherboard/cpu1/core2": {
+        "fru_type": "CORE",
+        "is_fru": False,
+    },
+    "<inventory_root>/system/chassis/motherboard/cpu1/core3": {
+        "fru_type": "CORE",
+        "is_fru": False,
+    },
+    "<inventory_root>/system/chassis/motherboard/cpu1/core4": {
+        "fru_type": "CORE",
+        "is_fru": False,
+    },
+    "<inventory_root>/system/chassis/motherboard/cpu1/core5": {
+        "fru_type": "CORE",
+        "is_fru": False,
+    },
+    "<inventory_root>/system/chassis/motherboard/cpu1/core6": {
+        "fru_type": "CORE",
+        "is_fru": False,
+    },
+    "<inventory_root>/system/chassis/motherboard/cpu1/core7": {
+        "fru_type": "CORE",
+        "is_fru": False,
+    },
+    "<inventory_root>/system/chassis/motherboard/cpu1/core8": {
+        "fru_type": "CORE",
+        "is_fru": False,
+    },
+    "<inventory_root>/system/chassis/motherboard/cpu1/core9": {
+        "fru_type": "CORE",
+        "is_fru": False,
+    },
+    "<inventory_root>/system/chassis/motherboard/cpu1/core10": {
+        "fru_type": "CORE",
+        "is_fru": False,
+    },
+    "<inventory_root>/system/chassis/motherboard/cpu1/core11": {
+        "fru_type": "CORE",
+        "is_fru": False,
+    },
+    "<inventory_root>/system/chassis/motherboard/cpu1/core12": {
+        "fru_type": "CORE",
+        "is_fru": False,
+    },
+    "<inventory_root>/system/chassis/motherboard/cpu1/core13": {
+        "fru_type": "CORE",
+        "is_fru": False,
+    },
+    "<inventory_root>/system/chassis/motherboard/cpu1/core14": {
+        "fru_type": "CORE",
+        "is_fru": False,
+    },
+    "<inventory_root>/system/chassis/motherboard/cpu1/core15": {
+        "fru_type": "CORE",
+        "is_fru": False,
+    },
+    "<inventory_root>/system/chassis/motherboard/cpu1/core16": {
+        "fru_type": "CORE",
+        "is_fru": False,
+    },
+    "<inventory_root>/system/chassis/motherboard/cpu1/core17": {
+        "fru_type": "CORE",
+        "is_fru": False,
+    },
+    "<inventory_root>/system/chassis/motherboard/cpu1/core18": {
+        "fru_type": "CORE",
+        "is_fru": False,
+    },
+    "<inventory_root>/system/chassis/motherboard/cpu1/core19": {
+        "fru_type": "CORE",
+        "is_fru": False,
+    },
+    "<inventory_root>/system/chassis/motherboard/cpu1/core20": {
+        "fru_type": "CORE",
+        "is_fru": False,
+    },
+    "<inventory_root>/system/chassis/motherboard/cpu1/core21": {
+        "fru_type": "CORE",
+        "is_fru": False,
+    },
+    "<inventory_root>/system/chassis/motherboard/cpu1/core22": {
+        "fru_type": "CORE",
+        "is_fru": False,
+    },
+    "<inventory_root>/system/chassis/motherboard/cpu1/core23": {
+        "fru_type": "CORE",
+        "is_fru": False,
+    },
+    "<inventory_root>/system/chassis/motherboard/dimm0": {
+        "fru_type": "DIMM",
+        "is_fru": True,
+    },
+    "<inventory_root>/system/chassis/motherboard/dimm1": {
+        "fru_type": "DIMM",
+        "is_fru": True,
+    },
+    "<inventory_root>/system/chassis/motherboard/dimm2": {
+        "fru_type": "DIMM",
+        "is_fru": True,
+    },
+    "<inventory_root>/system/chassis/motherboard/dimm3": {
+        "fru_type": "DIMM",
+        "is_fru": True,
+    },
+    "<inventory_root>/system/chassis/motherboard/dimm4": {
+        "fru_type": "DIMM",
+        "is_fru": True,
+    },
+    "<inventory_root>/system/chassis/motherboard/dimm5": {
+        "fru_type": "DIMM",
+        "is_fru": True,
+    },
+    "<inventory_root>/system/chassis/motherboard/dimm6": {
+        "fru_type": "DIMM",
+        "is_fru": True,
+    },
+    "<inventory_root>/system/chassis/motherboard/dimm7": {
+        "fru_type": "DIMM",
+        "is_fru": True,
+    },
+    "<inventory_root>/system/chassis/motherboard/dimm8": {
+        "fru_type": "DIMM",
+        "is_fru": True,
+    },
+    "<inventory_root>/system/chassis/motherboard/dimm9": {
+        "fru_type": "DIMM",
+        "is_fru": True,
+    },
+    "<inventory_root>/system/chassis/motherboard/dimm10": {
+        "fru_type": "DIMM",
+        "is_fru": True,
+    },
+    "<inventory_root>/system/chassis/motherboard/dimm11": {
+        "fru_type": "DIMM",
+        "is_fru": True,
+    },
+    "<inventory_root>/system/chassis/motherboard/dimm12": {
+        "fru_type": "DIMM",
+        "is_fru": True,
+    },
+    "<inventory_root>/system/chassis/motherboard/dimm13": {
+        "fru_type": "DIMM",
+        "is_fru": True,
+    },
+    "<inventory_root>/system/chassis/motherboard/dimm14": {
+        "fru_type": "DIMM",
+        "is_fru": True,
+    },
+    "<inventory_root>/system/chassis/motherboard/dimm15": {
+        "fru_type": "DIMM",
+        "is_fru": True,
+    },
 }
 
 ID_LOOKUP = {
-    'FRU': {
-        0x01: '<inventory_root>/system/chassis/motherboard/cpu0',
-        0x02: '<inventory_root>/system/chassis/motherboard/cpu1',
-        0x03: '<inventory_root>/system/chassis/motherboard',
-        0x04: '<inventory_root>/system/chassis/motherboard/dimm0',
-        0x05: '<inventory_root>/system/chassis/motherboard/dimm1',
-        0x06: '<inventory_root>/system/chassis/motherboard/dimm2',
-        0x07: '<inventory_root>/system/chassis/motherboard/dimm3',
-        0x08: '<inventory_root>/system/chassis/motherboard/dimm4',
-        0x09: '<inventory_root>/system/chassis/motherboard/dimm5',
-        0x0a: '<inventory_root>/system/chassis/motherboard/dimm6',
-        0x0b: '<inventory_root>/system/chassis/motherboard/dimm7',
-        0x0c: '<inventory_root>/system/chassis/motherboard/dimm8',
-        0x0d: '<inventory_root>/system/chassis/motherboard/dimm9',
-        0x0e: '<inventory_root>/system/chassis/motherboard/dimm10',
-        0x0f: '<inventory_root>/system/chassis/motherboard/dimm11',
-        0x10: '<inventory_root>/system/chassis/motherboard/dimm12',
-        0x11: '<inventory_root>/system/chassis/motherboard/dimm13',
-        0x12: '<inventory_root>/system/chassis/motherboard/dimm14',
-        0x13: '<inventory_root>/system/chassis/motherboard/dimm15',
+    "FRU": {
+        0x01: "<inventory_root>/system/chassis/motherboard/cpu0",
+        0x02: "<inventory_root>/system/chassis/motherboard/cpu1",
+        0x03: "<inventory_root>/system/chassis/motherboard",
+        0x04: "<inventory_root>/system/chassis/motherboard/dimm0",
+        0x05: "<inventory_root>/system/chassis/motherboard/dimm1",
+        0x06: "<inventory_root>/system/chassis/motherboard/dimm2",
+        0x07: "<inventory_root>/system/chassis/motherboard/dimm3",
+        0x08: "<inventory_root>/system/chassis/motherboard/dimm4",
+        0x09: "<inventory_root>/system/chassis/motherboard/dimm5",
+        0x0A: "<inventory_root>/system/chassis/motherboard/dimm6",
+        0x0B: "<inventory_root>/system/chassis/motherboard/dimm7",
+        0x0C: "<inventory_root>/system/chassis/motherboard/dimm8",
+        0x0D: "<inventory_root>/system/chassis/motherboard/dimm9",
+        0x0E: "<inventory_root>/system/chassis/motherboard/dimm10",
+        0x0F: "<inventory_root>/system/chassis/motherboard/dimm11",
+        0x10: "<inventory_root>/system/chassis/motherboard/dimm12",
+        0x11: "<inventory_root>/system/chassis/motherboard/dimm13",
+        0x12: "<inventory_root>/system/chassis/motherboard/dimm14",
+        0x13: "<inventory_root>/system/chassis/motherboard/dimm15",
     },
-    'FRU_STR': {
-        'PRODUCT_0': '<inventory_root>/system/bios',
-        'BOARD_1': '<inventory_root>/system/chassis/motherboard/cpu0',
-        'BOARD_2': '<inventory_root>/system/chassis/motherboard/cpu1',
-        'CHASSIS_3': '<inventory_root>/system/chassis/motherboard',
-        'BOARD_3': '<inventory_root>/system/misc',
-        'PRODUCT_12': '<inventory_root>/system/chassis/motherboard/dimm0',
-        'PRODUCT_13': '<inventory_root>/system/chassis/motherboard/dimm1',
-        'PRODUCT_14': '<inventory_root>/system/chassis/motherboard/dimm2',
-        'PRODUCT_15': '<inventory_root>/system/chassis/motherboard/dimm3',
-        'PRODUCT_16': '<inventory_root>/system/chassis/motherboard/dimm4',
-        'PRODUCT_17': '<inventory_root>/system/chassis/motherboard/dimm5',
-        'PRODUCT_18': '<inventory_root>/system/chassis/motherboard/dimm6',
-        'PRODUCT_19': '<inventory_root>/system/chassis/motherboard/dimm7',
-        'PRODUCT_20': '<inventory_root>/system/chassis/motherboard/dimm8',
-        'PRODUCT_21': '<inventory_root>/system/chassis/motherboard/dimm9',
-        'PRODUCT_22': '<inventory_root>/system/chassis/motherboard/dimm10',
-        'PRODUCT_23': '<inventory_root>/system/chassis/motherboard/dimm11',
-        'PRODUCT_24': '<inventory_root>/system/chassis/motherboard/dimm12',
-        'PRODUCT_25': '<inventory_root>/system/chassis/motherboard/dimm13',
-        'PRODUCT_26': '<inventory_root>/system/chassis/motherboard/dimm14',
-        'PRODUCT_27': '<inventory_root>/system/chassis/motherboard/dimm15',
-        'PRODUCT_47': '<inventory_root>/system/misc',
+    "FRU_STR": {
+        "PRODUCT_0": "<inventory_root>/system/bios",
+        "BOARD_1": "<inventory_root>/system/chassis/motherboard/cpu0",
+        "BOARD_2": "<inventory_root>/system/chassis/motherboard/cpu1",
+        "CHASSIS_3": "<inventory_root>/system/chassis/motherboard",
+        "BOARD_3": "<inventory_root>/system/misc",
+        "PRODUCT_12": "<inventory_root>/system/chassis/motherboard/dimm0",
+        "PRODUCT_13": "<inventory_root>/system/chassis/motherboard/dimm1",
+        "PRODUCT_14": "<inventory_root>/system/chassis/motherboard/dimm2",
+        "PRODUCT_15": "<inventory_root>/system/chassis/motherboard/dimm3",
+        "PRODUCT_16": "<inventory_root>/system/chassis/motherboard/dimm4",
+        "PRODUCT_17": "<inventory_root>/system/chassis/motherboard/dimm5",
+        "PRODUCT_18": "<inventory_root>/system/chassis/motherboard/dimm6",
+        "PRODUCT_19": "<inventory_root>/system/chassis/motherboard/dimm7",
+        "PRODUCT_20": "<inventory_root>/system/chassis/motherboard/dimm8",
+        "PRODUCT_21": "<inventory_root>/system/chassis/motherboard/dimm9",
+        "PRODUCT_22": "<inventory_root>/system/chassis/motherboard/dimm10",
+        "PRODUCT_23": "<inventory_root>/system/chassis/motherboard/dimm11",
+        "PRODUCT_24": "<inventory_root>/system/chassis/motherboard/dimm12",
+        "PRODUCT_25": "<inventory_root>/system/chassis/motherboard/dimm13",
+        "PRODUCT_26": "<inventory_root>/system/chassis/motherboard/dimm14",
+        "PRODUCT_27": "<inventory_root>/system/chassis/motherboard/dimm15",
+        "PRODUCT_47": "<inventory_root>/system/misc",
     },
-    'SENSOR': {
-        0x01: '/org/openbmc/sensors/host/HostStatus',
-        0x02: '/org/openbmc/sensors/host/BootProgress',
-        0x03: '/org/openbmc/sensors/host/cpu0/OccStatus',
-        0x04: '/org/openbmc/sensors/host/cpu1/OccStatus',
-        0x08: '<inventory_root>/system/chassis/motherboard/cpu0',
-        0x09: '<inventory_root>/system/chassis/motherboard/cpu1',
-        0x0b: '<inventory_root>/system/chassis/motherboard/dimm0',
-        0x0c: '<inventory_root>/system/chassis/motherboard/dimm1',
-        0x0d: '<inventory_root>/system/chassis/motherboard/dimm2',
-        0x0e: '<inventory_root>/system/chassis/motherboard/dimm3',
-        0x0f: '<inventory_root>/system/chassis/motherboard/dimm4',
-        0x10: '<inventory_root>/system/chassis/motherboard/dimm5',
-        0x11: '<inventory_root>/system/chassis/motherboard/dimm6',
-        0x12: '<inventory_root>/system/chassis/motherboard/dimm7',
-        0x13: '<inventory_root>/system/chassis/motherboard/dimm8',
-        0x14: '<inventory_root>/system/chassis/motherboard/dimm9',
-        0x15: '<inventory_root>/system/chassis/motherboard/dimm10',
-        0x16: '<inventory_root>/system/chassis/motherboard/dimm11',
-        0x17: '<inventory_root>/system/chassis/motherboard/dimm12',
-        0x18: '<inventory_root>/system/chassis/motherboard/dimm13',
-        0x19: '<inventory_root>/system/chassis/motherboard/dimm14',
-        0x1a: '<inventory_root>/system/chassis/motherboard/dimm15',
-        0x2b: '<inventory_root>/system/chassis/motherboard/cpu0/core0',
-        0x2c: '<inventory_root>/system/chassis/motherboard/cpu0/core1',
-        0x2d: '<inventory_root>/system/chassis/motherboard/cpu0/core2',
-        0x2e: '<inventory_root>/system/chassis/motherboard/cpu0/core3',
-        0x2f: '<inventory_root>/system/chassis/motherboard/cpu0/core4',
-        0x30: '<inventory_root>/system/chassis/motherboard/cpu0/core5',
-        0x31: '<inventory_root>/system/chassis/motherboard/cpu0/core6',
-        0x32: '<inventory_root>/system/chassis/motherboard/cpu0/core7',
-        0x33: '<inventory_root>/system/chassis/motherboard/cpu0/core8',
-        0x34: '<inventory_root>/system/chassis/motherboard/cpu0/core9',
-        0x35: '<inventory_root>/system/chassis/motherboard/cpu0/core10',
-        0x36: '<inventory_root>/system/chassis/motherboard/cpu0/core11',
-        0x37: '<inventory_root>/system/chassis/motherboard/cpu0/core12',
-        0x38: '<inventory_root>/system/chassis/motherboard/cpu0/core13',
-        0x39: '<inventory_root>/system/chassis/motherboard/cpu0/core14',
-        0x3a: '<inventory_root>/system/chassis/motherboard/cpu0/core15',
-        0x3b: '<inventory_root>/system/chassis/motherboard/cpu0/core16',
-        0x3c: '<inventory_root>/system/chassis/motherboard/cpu0/core17',
-        0x3d: '<inventory_root>/system/chassis/motherboard/cpu0/core18',
-        0x3e: '<inventory_root>/system/chassis/motherboard/cpu0/core19',
-        0x3f: '<inventory_root>/system/chassis/motherboard/cpu0/core20',
-        0x40: '<inventory_root>/system/chassis/motherboard/cpu0/core21',
-        0x41: '<inventory_root>/system/chassis/motherboard/cpu0/core22',
-        0x42: '<inventory_root>/system/chassis/motherboard/cpu0/core23',
-        0x43: '<inventory_root>/system/chassis/motherboard/cpu1/core0',
-        0x44: '<inventory_root>/system/chassis/motherboard/cpu1/core1',
-        0x45: '<inventory_root>/system/chassis/motherboard/cpu1/core2',
-        0x46: '<inventory_root>/system/chassis/motherboard/cpu1/core3',
-        0x47: '<inventory_root>/system/chassis/motherboard/cpu1/core4',
-        0x48: '<inventory_root>/system/chassis/motherboard/cpu1/core5',
-        0x49: '<inventory_root>/system/chassis/motherboard/cpu1/core6',
-        0x4a: '<inventory_root>/system/chassis/motherboard/cpu1/core7',
-        0x4b: '<inventory_root>/system/chassis/motherboard/cpu1/core8',
-        0x4c: '<inventory_root>/system/chassis/motherboard/cpu1/core9',
-        0x4d: '<inventory_root>/system/chassis/motherboard/cpu1/core10',
-        0x4e: '<inventory_root>/system/chassis/motherboard/cpu1/core11',
-        0x4f: '<inventory_root>/system/chassis/motherboard/cpu1/core12',
-        0x50: '<inventory_root>/system/chassis/motherboard/cpu1/core13',
-        0x51: '<inventory_root>/system/chassis/motherboard/cpu1/core14',
-        0x52: '<inventory_root>/system/chassis/motherboard/cpu1/core15',
-        0x53: '<inventory_root>/system/chassis/motherboard/cpu1/core16',
-        0x54: '<inventory_root>/system/chassis/motherboard/cpu1/core17',
-        0x55: '<inventory_root>/system/chassis/motherboard/cpu1/core18',
-        0x56: '<inventory_root>/system/chassis/motherboard/cpu1/core19',
-        0x57: '<inventory_root>/system/chassis/motherboard/cpu1/core20',
-        0x58: '<inventory_root>/system/chassis/motherboard/cpu1/core21',
-        0x59: '<inventory_root>/system/chassis/motherboard/cpu1/core22',
-        0x5a: '<inventory_root>/system/chassis/motherboard/cpu1/core23',
-        0x8b: '/org/openbmc/sensors/host/BootCount',
-        0x8c: '<inventory_root>/system/chassis/motherboard',
-        0x8d: '<inventory_root>/system/chassis/motherboard/refclock',
-        0x8e: '<inventory_root>/system/chassis/motherboard/pcieclock',
-        0x8f: '<inventory_root>/system/chassis/motherboard/todclock',
-        0x90: '<inventory_root>/system/systemevent',
-        0x91: '/org/openbmc/sensors/host/OperatingSystemStatus',
-        0x92: '<inventory_root>/system/chassis/motherboard/pcielink',
+    "SENSOR": {
+        0x01: "/org/openbmc/sensors/host/HostStatus",
+        0x02: "/org/openbmc/sensors/host/BootProgress",
+        0x03: "/org/openbmc/sensors/host/cpu0/OccStatus",
+        0x04: "/org/openbmc/sensors/host/cpu1/OccStatus",
+        0x08: "<inventory_root>/system/chassis/motherboard/cpu0",
+        0x09: "<inventory_root>/system/chassis/motherboard/cpu1",
+        0x0B: "<inventory_root>/system/chassis/motherboard/dimm0",
+        0x0C: "<inventory_root>/system/chassis/motherboard/dimm1",
+        0x0D: "<inventory_root>/system/chassis/motherboard/dimm2",
+        0x0E: "<inventory_root>/system/chassis/motherboard/dimm3",
+        0x0F: "<inventory_root>/system/chassis/motherboard/dimm4",
+        0x10: "<inventory_root>/system/chassis/motherboard/dimm5",
+        0x11: "<inventory_root>/system/chassis/motherboard/dimm6",
+        0x12: "<inventory_root>/system/chassis/motherboard/dimm7",
+        0x13: "<inventory_root>/system/chassis/motherboard/dimm8",
+        0x14: "<inventory_root>/system/chassis/motherboard/dimm9",
+        0x15: "<inventory_root>/system/chassis/motherboard/dimm10",
+        0x16: "<inventory_root>/system/chassis/motherboard/dimm11",
+        0x17: "<inventory_root>/system/chassis/motherboard/dimm12",
+        0x18: "<inventory_root>/system/chassis/motherboard/dimm13",
+        0x19: "<inventory_root>/system/chassis/motherboard/dimm14",
+        0x1A: "<inventory_root>/system/chassis/motherboard/dimm15",
+        0x2B: "<inventory_root>/system/chassis/motherboard/cpu0/core0",
+        0x2C: "<inventory_root>/system/chassis/motherboard/cpu0/core1",
+        0x2D: "<inventory_root>/system/chassis/motherboard/cpu0/core2",
+        0x2E: "<inventory_root>/system/chassis/motherboard/cpu0/core3",
+        0x2F: "<inventory_root>/system/chassis/motherboard/cpu0/core4",
+        0x30: "<inventory_root>/system/chassis/motherboard/cpu0/core5",
+        0x31: "<inventory_root>/system/chassis/motherboard/cpu0/core6",
+        0x32: "<inventory_root>/system/chassis/motherboard/cpu0/core7",
+        0x33: "<inventory_root>/system/chassis/motherboard/cpu0/core8",
+        0x34: "<inventory_root>/system/chassis/motherboard/cpu0/core9",
+        0x35: "<inventory_root>/system/chassis/motherboard/cpu0/core10",
+        0x36: "<inventory_root>/system/chassis/motherboard/cpu0/core11",
+        0x37: "<inventory_root>/system/chassis/motherboard/cpu0/core12",
+        0x38: "<inventory_root>/system/chassis/motherboard/cpu0/core13",
+        0x39: "<inventory_root>/system/chassis/motherboard/cpu0/core14",
+        0x3A: "<inventory_root>/system/chassis/motherboard/cpu0/core15",
+        0x3B: "<inventory_root>/system/chassis/motherboard/cpu0/core16",
+        0x3C: "<inventory_root>/system/chassis/motherboard/cpu0/core17",
+        0x3D: "<inventory_root>/system/chassis/motherboard/cpu0/core18",
+        0x3E: "<inventory_root>/system/chassis/motherboard/cpu0/core19",
+        0x3F: "<inventory_root>/system/chassis/motherboard/cpu0/core20",
+        0x40: "<inventory_root>/system/chassis/motherboard/cpu0/core21",
+        0x41: "<inventory_root>/system/chassis/motherboard/cpu0/core22",
+        0x42: "<inventory_root>/system/chassis/motherboard/cpu0/core23",
+        0x43: "<inventory_root>/system/chassis/motherboard/cpu1/core0",
+        0x44: "<inventory_root>/system/chassis/motherboard/cpu1/core1",
+        0x45: "<inventory_root>/system/chassis/motherboard/cpu1/core2",
+        0x46: "<inventory_root>/system/chassis/motherboard/cpu1/core3",
+        0x47: "<inventory_root>/system/chassis/motherboard/cpu1/core4",
+        0x48: "<inventory_root>/system/chassis/motherboard/cpu1/core5",
+        0x49: "<inventory_root>/system/chassis/motherboard/cpu1/core6",
+        0x4A: "<inventory_root>/system/chassis/motherboard/cpu1/core7",
+        0x4B: "<inventory_root>/system/chassis/motherboard/cpu1/core8",
+        0x4C: "<inventory_root>/system/chassis/motherboard/cpu1/core9",
+        0x4D: "<inventory_root>/system/chassis/motherboard/cpu1/core10",
+        0x4E: "<inventory_root>/system/chassis/motherboard/cpu1/core11",
+        0x4F: "<inventory_root>/system/chassis/motherboard/cpu1/core12",
+        0x50: "<inventory_root>/system/chassis/motherboard/cpu1/core13",
+        0x51: "<inventory_root>/system/chassis/motherboard/cpu1/core14",
+        0x52: "<inventory_root>/system/chassis/motherboard/cpu1/core15",
+        0x53: "<inventory_root>/system/chassis/motherboard/cpu1/core16",
+        0x54: "<inventory_root>/system/chassis/motherboard/cpu1/core17",
+        0x55: "<inventory_root>/system/chassis/motherboard/cpu1/core18",
+        0x56: "<inventory_root>/system/chassis/motherboard/cpu1/core19",
+        0x57: "<inventory_root>/system/chassis/motherboard/cpu1/core20",
+        0x58: "<inventory_root>/system/chassis/motherboard/cpu1/core21",
+        0x59: "<inventory_root>/system/chassis/motherboard/cpu1/core22",
+        0x5A: "<inventory_root>/system/chassis/motherboard/cpu1/core23",
+        0x8B: "/org/openbmc/sensors/host/BootCount",
+        0x8C: "<inventory_root>/system/chassis/motherboard",
+        0x8D: "<inventory_root>/system/chassis/motherboard/refclock",
+        0x8E: "<inventory_root>/system/chassis/motherboard/pcieclock",
+        0x8F: "<inventory_root>/system/chassis/motherboard/todclock",
+        0x90: "<inventory_root>/system/systemevent",
+        0x91: "/org/openbmc/sensors/host/OperatingSystemStatus",
+        0x92: "<inventory_root>/system/chassis/motherboard/pcielink",
         #        0x08 : '<inventory_root>/system/powerlimit',
         #        0x10 : '<inventory_root>/system/chassis/motherboard/apss',
         #        0x06 : '/org/openbmc/sensors/host/powercap',
     },
-    'GPIO_PRESENT': {}
+    "GPIO_PRESENT": {},
 }
 
 GPIO_CONFIG = {}
-GPIO_CONFIG['SOFTWARE_PGOOD'] = \
-    {'gpio_pin': 'R1', 'direction': 'out'}
-GPIO_CONFIG['BMC_POWER_UP'] = \
-    {'gpio_pin': 'D1', 'direction': 'out'}
-GPIO_CONFIG['SYS_PWROK_BUFF'] = \
-    {'gpio_pin': 'D2', 'direction': 'in'}
-GPIO_CONFIG['BMC_WD_CLEAR_PULSE_N'] = \
-    {'gpio_pin': 'N5', 'direction': 'out'}
-GPIO_CONFIG['CHECKSTOP'] = \
-    {'gpio_pin': 'J2', 'direction': 'falling'}
-GPIO_CONFIG['BMC_CP0_RESET_N'] = \
-    {'gpio_pin': 'A1', 'direction': 'out'}
-GPIO_CONFIG['BMC_CP0_PERST_ENABLE_R'] = \
-    {'gpio_pin': 'A3', 'direction': 'out'}
-GPIO_CONFIG['FSI_DATA'] = \
-    {'gpio_pin': 'AA2', 'direction': 'out'}
-GPIO_CONFIG['FSI_CLK'] = \
-    {'gpio_pin': 'AA0', 'direction': 'out'}
-GPIO_CONFIG['FSI_ENABLE'] = \
-    {'gpio_pin': 'D0', 'direction': 'out'}
+GPIO_CONFIG["SOFTWARE_PGOOD"] = {"gpio_pin": "R1", "direction": "out"}
+GPIO_CONFIG["BMC_POWER_UP"] = {"gpio_pin": "D1", "direction": "out"}
+GPIO_CONFIG["SYS_PWROK_BUFF"] = {"gpio_pin": "D2", "direction": "in"}
+GPIO_CONFIG["BMC_WD_CLEAR_PULSE_N"] = {"gpio_pin": "N5", "direction": "out"}
+GPIO_CONFIG["CHECKSTOP"] = {"gpio_pin": "J2", "direction": "falling"}
+GPIO_CONFIG["BMC_CP0_RESET_N"] = {"gpio_pin": "A1", "direction": "out"}
+GPIO_CONFIG["BMC_CP0_PERST_ENABLE_R"] = {"gpio_pin": "A3", "direction": "out"}
+GPIO_CONFIG["FSI_DATA"] = {"gpio_pin": "AA2", "direction": "out"}
+GPIO_CONFIG["FSI_CLK"] = {"gpio_pin": "AA0", "direction": "out"}
+GPIO_CONFIG["FSI_ENABLE"] = {"gpio_pin": "D0", "direction": "out"}
 
 # DBG_CP0_MUX_SEL
-GPIO_CONFIG['CRONUS_SEL'] = \
-    {'gpio_pin': 'A6', 'direction': 'out'}
-GPIO_CONFIG['BMC_THROTTLE'] = \
-    {'gpio_pin': 'J3', 'direction': 'out'}
-GPIO_CONFIG['IDBTN'] = \
-    {'gpio_pin': 'Q7', 'direction': 'out'}
+GPIO_CONFIG["CRONUS_SEL"] = {"gpio_pin": "A6", "direction": "out"}
+GPIO_CONFIG["BMC_THROTTLE"] = {"gpio_pin": "J3", "direction": "out"}
+GPIO_CONFIG["IDBTN"] = {"gpio_pin": "Q7", "direction": "out"}
 
 # PM_FP_PWRBTN_IN_L
-GPIO_CONFIG['POWER_BUTTON'] = \
-    {'gpio_pin': 'I3', 'direction': 'both'}
+GPIO_CONFIG["POWER_BUTTON"] = {"gpio_pin": "I3", "direction": "both"}
 
 # PM_NMIBTN_IN_L
-GPIO_CONFIG['RESET_BUTTON'] = \
-    {'gpio_pin': 'J1', 'direction': 'both'}
+GPIO_CONFIG["RESET_BUTTON"] = {"gpio_pin": "J1", "direction": "both"}
 
 HWMON_CONFIG = {
-    '4-0050': {
-        'names': {
-            'caps_curr_powercap': {'object_path': 'powercap/curr_cap', 'poll_interval': 10000,
-                                   'scale': 1, 'units': 'W'},
-            'caps_curr_powerreading': {'object_path': 'powercap/system_power',
-                                       'poll_interval': 10000, 'scale': 1, 'units': 'W'},
-            'caps_max_powercap': {'object_path': 'powercap/max_cap', 'poll_interval': 10000,
-                                  'scale': 1, 'units': 'W'},
-            'caps_min_powercap': {'object_path': 'powercap/min_cap', 'poll_interval': 10000,
-                                  'scale': 1, 'units': 'W'},
-            'caps_norm_powercap': {'object_path': 'powercap/n_cap', 'poll_interval': 10000,
-                                   'scale': 1, 'units': 'W'},
-            'caps_user_powerlimit': {'object_path': 'powercap/user_cap', 'poll_interval': 10000,
-                                     'scale': 1, 'units': 'W'},
+    "4-0050": {
+        "names": {
+            "caps_curr_powercap": {
+                "object_path": "powercap/curr_cap",
+                "poll_interval": 10000,
+                "scale": 1,
+                "units": "W",
+            },
+            "caps_curr_powerreading": {
+                "object_path": "powercap/system_power",
+                "poll_interval": 10000,
+                "scale": 1,
+                "units": "W",
+            },
+            "caps_max_powercap": {
+                "object_path": "powercap/max_cap",
+                "poll_interval": 10000,
+                "scale": 1,
+                "units": "W",
+            },
+            "caps_min_powercap": {
+                "object_path": "powercap/min_cap",
+                "poll_interval": 10000,
+                "scale": 1,
+                "units": "W",
+            },
+            "caps_norm_powercap": {
+                "object_path": "powercap/n_cap",
+                "poll_interval": 10000,
+                "scale": 1,
+                "units": "W",
+            },
+            "caps_user_powerlimit": {
+                "object_path": "powercap/user_cap",
+                "poll_interval": 10000,
+                "scale": 1,
+                "units": "W",
+            },
         },
-        'labels': {
-            '176': {'object_path': 'temperature/cpu0/core0', 'poll_interval': 5000, 'scale': -3,
-                    'units': 'C',
-                    'critical_upper': 100, 'critical_lower': -100, 'warning_upper': 90,
-                    'warning_lower': -99, 'emergency_enabled': True},
-            '177': {'object_path': 'temperature/cpu0/core1', 'poll_interval': 5000, 'scale': -3,
-                    'units': 'C',
-                    'critical_upper': 100, 'critical_lower': -100, 'warning_upper': 90,
-                    'warning_lower': -99, 'emergency_enabled': True},
-            '178': {'object_path': 'temperature/cpu0/core2', 'poll_interval': 5000, 'scale': -3,
-                    'units': 'C',
-                    'critical_upper': 100, 'critical_lower': -100, 'warning_upper': 90,
-                    'warning_lower': -99, 'emergency_enabled': True},
-            '179': {'object_path': 'temperature/cpu0/core3', 'poll_interval': 5000, 'scale': -3,
-                    'units': 'C',
-                    'critical_upper': 100, 'critical_lower': -100, 'warning_upper': 90,
-                    'warning_lower': -99, 'emergency_enabled': True},
-            '180': {'object_path': 'temperature/cpu0/core4', 'poll_interval': 5000, 'scale': -3,
-                    'units': 'C',
-                    'critical_upper': 100, 'critical_lower': -100, 'warning_upper': 90,
-                    'warning_lower': -99, 'emergency_enabled': True},
-            '181': {'object_path': 'temperature/cpu0/core5', 'poll_interval': 5000, 'scale': -3,
-                    'units': 'C',
-                    'critical_upper': 100, 'critical_lower': -100, 'warning_upper': 90,
-                    'warning_lower': -99, 'emergency_enabled': True},
-            '182': {'object_path': 'temperature/cpu0/core6', 'poll_interval': 5000, 'scale': -3,
-                    'units': 'C',
-                    'critical_upper': 100, 'critical_lower': -100, 'warning_upper': 90,
-                    'warning_lower': -99, 'emergency_enabled': True},
-            '183': {'object_path': 'temperature/cpu0/core7', 'poll_interval': 5000, 'scale': -3,
-                    'units': 'C',
-                    'critical_upper': 100, 'critical_lower': -100, 'warning_upper': 90,
-                    'warning_lower': -99, 'emergency_enabled': True},
-            '184': {'object_path': 'temperature/cpu0/core8', 'poll_interval': 5000, 'scale': -3,
-                    'units': 'C',
-                    'critical_upper': 100, 'critical_lower': -100, 'warning_upper': 90,
-                    'warning_lower': -99, 'emergency_enabled': True},
-            '185': {'object_path': 'temperature/cpu0/core9', 'poll_interval': 5000, 'scale': -3,
-                    'units': 'C',
-                    'critical_upper': 100, 'critical_lower': -100, 'warning_upper': 90,
-                    'warning_lower': -99, 'emergency_enabled': True},
-            '186': {'object_path': 'temperature/cpu0/core10', 'poll_interval': 5000, 'scale': -3,
-                    'units': 'C',
-                    'critical_upper': 100, 'critical_lower': -100, 'warning_upper': 90,
-                    'warning_lower': -99, 'emergency_enabled': True},
-            '187': {'object_path': 'temperature/cpu0/core11', 'poll_interval': 5000, 'scale': -3,
-                    'units': 'C',
-                    'critical_upper': 100, 'critical_lower': -100, 'warning_upper': 90,
-                    'warning_lower': -99, 'emergency_enabled': True},
-            '102': {'object_path': 'temperature/dimm0', 'poll_interval': 5000, 'scale': -3,
-                    'units': 'C'},
-            '103': {'object_path': 'temperature/dimm1', 'poll_interval': 5000, 'scale': -3,
-                    'units': 'C'},
-            '104': {'object_path': 'temperature/dimm2', 'poll_interval': 5000, 'scale': -3,
-                    'units': 'C'},
-            '105': {'object_path': 'temperature/dimm3', 'poll_interval': 5000, 'scale': -3,
-                    'units': 'C'},
-            '106': {'object_path': 'temperature/dimm4', 'poll_interval': 5000, 'scale': -3,
-                    'units': 'C'},
-            '107': {'object_path': 'temperature/dimm5', 'poll_interval': 5000, 'scale': -3,
-                    'units': 'C'},
-            '108': {'object_path': 'temperature/dimm6', 'poll_interval': 5000, 'scale': -3,
-                    'units': 'C'},
-            '109': {'object_path': 'temperature/dimm7', 'poll_interval': 5000, 'scale': -3,
-                    'units': 'C'},
-        }
+        "labels": {
+            "176": {
+                "object_path": "temperature/cpu0/core0",
+                "poll_interval": 5000,
+                "scale": -3,
+                "units": "C",
+                "critical_upper": 100,
+                "critical_lower": -100,
+                "warning_upper": 90,
+                "warning_lower": -99,
+                "emergency_enabled": True,
+            },
+            "177": {
+                "object_path": "temperature/cpu0/core1",
+                "poll_interval": 5000,
+                "scale": -3,
+                "units": "C",
+                "critical_upper": 100,
+                "critical_lower": -100,
+                "warning_upper": 90,
+                "warning_lower": -99,
+                "emergency_enabled": True,
+            },
+            "178": {
+                "object_path": "temperature/cpu0/core2",
+                "poll_interval": 5000,
+                "scale": -3,
+                "units": "C",
+                "critical_upper": 100,
+                "critical_lower": -100,
+                "warning_upper": 90,
+                "warning_lower": -99,
+                "emergency_enabled": True,
+            },
+            "179": {
+                "object_path": "temperature/cpu0/core3",
+                "poll_interval": 5000,
+                "scale": -3,
+                "units": "C",
+                "critical_upper": 100,
+                "critical_lower": -100,
+                "warning_upper": 90,
+                "warning_lower": -99,
+                "emergency_enabled": True,
+            },
+            "180": {
+                "object_path": "temperature/cpu0/core4",
+                "poll_interval": 5000,
+                "scale": -3,
+                "units": "C",
+                "critical_upper": 100,
+                "critical_lower": -100,
+                "warning_upper": 90,
+                "warning_lower": -99,
+                "emergency_enabled": True,
+            },
+            "181": {
+                "object_path": "temperature/cpu0/core5",
+                "poll_interval": 5000,
+                "scale": -3,
+                "units": "C",
+                "critical_upper": 100,
+                "critical_lower": -100,
+                "warning_upper": 90,
+                "warning_lower": -99,
+                "emergency_enabled": True,
+            },
+            "182": {
+                "object_path": "temperature/cpu0/core6",
+                "poll_interval": 5000,
+                "scale": -3,
+                "units": "C",
+                "critical_upper": 100,
+                "critical_lower": -100,
+                "warning_upper": 90,
+                "warning_lower": -99,
+                "emergency_enabled": True,
+            },
+            "183": {
+                "object_path": "temperature/cpu0/core7",
+                "poll_interval": 5000,
+                "scale": -3,
+                "units": "C",
+                "critical_upper": 100,
+                "critical_lower": -100,
+                "warning_upper": 90,
+                "warning_lower": -99,
+                "emergency_enabled": True,
+            },
+            "184": {
+                "object_path": "temperature/cpu0/core8",
+                "poll_interval": 5000,
+                "scale": -3,
+                "units": "C",
+                "critical_upper": 100,
+                "critical_lower": -100,
+                "warning_upper": 90,
+                "warning_lower": -99,
+                "emergency_enabled": True,
+            },
+            "185": {
+                "object_path": "temperature/cpu0/core9",
+                "poll_interval": 5000,
+                "scale": -3,
+                "units": "C",
+                "critical_upper": 100,
+                "critical_lower": -100,
+                "warning_upper": 90,
+                "warning_lower": -99,
+                "emergency_enabled": True,
+            },
+            "186": {
+                "object_path": "temperature/cpu0/core10",
+                "poll_interval": 5000,
+                "scale": -3,
+                "units": "C",
+                "critical_upper": 100,
+                "critical_lower": -100,
+                "warning_upper": 90,
+                "warning_lower": -99,
+                "emergency_enabled": True,
+            },
+            "187": {
+                "object_path": "temperature/cpu0/core11",
+                "poll_interval": 5000,
+                "scale": -3,
+                "units": "C",
+                "critical_upper": 100,
+                "critical_lower": -100,
+                "warning_upper": 90,
+                "warning_lower": -99,
+                "emergency_enabled": True,
+            },
+            "102": {
+                "object_path": "temperature/dimm0",
+                "poll_interval": 5000,
+                "scale": -3,
+                "units": "C",
+            },
+            "103": {
+                "object_path": "temperature/dimm1",
+                "poll_interval": 5000,
+                "scale": -3,
+                "units": "C",
+            },
+            "104": {
+                "object_path": "temperature/dimm2",
+                "poll_interval": 5000,
+                "scale": -3,
+                "units": "C",
+            },
+            "105": {
+                "object_path": "temperature/dimm3",
+                "poll_interval": 5000,
+                "scale": -3,
+                "units": "C",
+            },
+            "106": {
+                "object_path": "temperature/dimm4",
+                "poll_interval": 5000,
+                "scale": -3,
+                "units": "C",
+            },
+            "107": {
+                "object_path": "temperature/dimm5",
+                "poll_interval": 5000,
+                "scale": -3,
+                "units": "C",
+            },
+            "108": {
+                "object_path": "temperature/dimm6",
+                "poll_interval": 5000,
+                "scale": -3,
+                "units": "C",
+            },
+            "109": {
+                "object_path": "temperature/dimm7",
+                "poll_interval": 5000,
+                "scale": -3,
+                "units": "C",
+            },
+        },
     },
-    '5-0050': {
-        'labels': {
-            '188': {'object_path': 'temperature/cpu1/core0', 'poll_interval': 5000, 'scale': -3,
-                    'units': 'C',
-                    'critical_upper': 100, 'critical_lower': -100, 'warning_upper': 90,
-                    'warning_lower': -99, 'emergency_enabled': True},
-            '189': {'object_path': 'temperature/cpu1/core1', 'poll_interval': 5000, 'scale': -3,
-                    'units': 'C',
-                    'critical_upper': 100, 'critical_lower': -100, 'warning_upper': 90,
-                    'warning_lower': -99, 'emergency_enabled': True},
-            '190': {'object_path': 'temperature/cpu1/core2', 'poll_interval': 5000, 'scale': -3,
-                    'units': 'C',
-                    'critical_upper': 100, 'critical_lower': -100, 'warning_upper': 90,
-                    'warning_lower': -99, 'emergency_enabled': True},
-            '191': {'object_path': 'temperature/cpu1/core3', 'poll_interval': 5000, 'scale': -3,
-                    'units': 'C',
-                    'critical_upper': 100, 'critical_lower': -100, 'warning_upper': 90,
-                    'warning_lower': -99, 'emergency_enabled': True},
-            '192': {'object_path': 'temperature/cpu1/core4', 'poll_interval': 5000, 'scale': -3,
-                    'units': 'C',
-                    'critical_upper': 100, 'critical_lower': -100, 'warning_upper': 90,
-                    'warning_lower': -99, 'emergency_enabled': True},
-            '193': {'object_path': 'temperature/cpu1/core5', 'poll_interval': 5000, 'scale': -3,
-                    'units': 'C',
-                    'critical_upper': 100, 'critical_lower': -100, 'warning_upper': 90,
-                    'warning_lower': -99, 'emergency_enabled': True},
-            '194': {'object_path': 'temperature/cpu1/core6', 'poll_interval': 5000, 'scale': -3,
-                    'units': 'C',
-                    'critical_upper': 100, 'critical_lower': -100, 'warning_upper': 90,
-                    'warning_lower': -99, 'emergency_enabled': True},
-            '195': {'object_path': 'temperature/cpu1/core7', 'poll_interval': 5000, 'scale': -3,
-                    'units': 'C',
-                    'critical_upper': 100, 'critical_lower': -100, 'warning_upper': 90,
-                    'warning_lower': -99, 'emergency_enabled': True},
-            '196': {'object_path': 'temperature/cpu1/core8', 'poll_interval': 5000, 'scale': -3,
-                    'units': 'C',
-                    'critical_upper': 100, 'critical_lower': -100, 'warning_upper': 90,
-                    'warning_lower': -99, 'emergency_enabled': True},
-            '197': {'object_path': 'temperature/cpu1/core9', 'poll_interval': 5000, 'scale': -3,
-                    'units': 'C',
-                    'critical_upper': 100, 'critical_lower': -100, 'warning_upper': 90,
-                    'warning_lower': -99, 'emergency_enabled': True},
-            '198': {'object_path': 'temperature/cpu1/core10', 'poll_interval': 5000, 'scale': -3,
-                    'units': 'C',
-                    'critical_upper': 100, 'critical_lower': -100, 'warning_upper': 90,
-                    'warning_lower': -99, 'emergency_enabled': True},
-            '199': {'object_path': 'temperature/cpu1/core11', 'poll_interval': 5000, 'scale': -3,
-                    'units': 'C',
-                    'critical_upper': 100, 'critical_lower': -100, 'warning_upper': 90,
-                    'warning_lower': -99, 'emergency_enabled': True},
-            '110': {'object_path': 'temperature/dimm8', 'poll_interval': 5000, 'scale': -3,
-                    'units': 'C'},
-            '111': {'object_path': 'temperature/dimm9', 'poll_interval': 5000, 'scale': -3,
-                    'units': 'C'},
-            '112': {'object_path': 'temperature/dimm10', 'poll_interval': 5000, 'scale': -3,
-                    'units': 'C'},
-            '113': {'object_path': 'temperature/dimm11', 'poll_interval': 5000, 'scale': -3,
-                    'units': 'C'},
-            '114': {'object_path': 'temperature/dimm12', 'poll_interval': 5000, 'scale': -3,
-                    'units': 'C'},
-            '115': {'object_path': 'temperature/dimm13', 'poll_interval': 5000, 'scale': -3,
-                    'units': 'C'},
-            '116': {'object_path': 'temperature/dimm14', 'poll_interval': 5000, 'scale': -3,
-                    'units': 'C'},
-            '117': {'object_path': 'temperature/dimm15', 'poll_interval': 5000, 'scale': -3,
-                    'units': 'C'},
+    "5-0050": {
+        "labels": {
+            "188": {
+                "object_path": "temperature/cpu1/core0",
+                "poll_interval": 5000,
+                "scale": -3,
+                "units": "C",
+                "critical_upper": 100,
+                "critical_lower": -100,
+                "warning_upper": 90,
+                "warning_lower": -99,
+                "emergency_enabled": True,
+            },
+            "189": {
+                "object_path": "temperature/cpu1/core1",
+                "poll_interval": 5000,
+                "scale": -3,
+                "units": "C",
+                "critical_upper": 100,
+                "critical_lower": -100,
+                "warning_upper": 90,
+                "warning_lower": -99,
+                "emergency_enabled": True,
+            },
+            "190": {
+                "object_path": "temperature/cpu1/core2",
+                "poll_interval": 5000,
+                "scale": -3,
+                "units": "C",
+                "critical_upper": 100,
+                "critical_lower": -100,
+                "warning_upper": 90,
+                "warning_lower": -99,
+                "emergency_enabled": True,
+            },
+            "191": {
+                "object_path": "temperature/cpu1/core3",
+                "poll_interval": 5000,
+                "scale": -3,
+                "units": "C",
+                "critical_upper": 100,
+                "critical_lower": -100,
+                "warning_upper": 90,
+                "warning_lower": -99,
+                "emergency_enabled": True,
+            },
+            "192": {
+                "object_path": "temperature/cpu1/core4",
+                "poll_interval": 5000,
+                "scale": -3,
+                "units": "C",
+                "critical_upper": 100,
+                "critical_lower": -100,
+                "warning_upper": 90,
+                "warning_lower": -99,
+                "emergency_enabled": True,
+            },
+            "193": {
+                "object_path": "temperature/cpu1/core5",
+                "poll_interval": 5000,
+                "scale": -3,
+                "units": "C",
+                "critical_upper": 100,
+                "critical_lower": -100,
+                "warning_upper": 90,
+                "warning_lower": -99,
+                "emergency_enabled": True,
+            },
+            "194": {
+                "object_path": "temperature/cpu1/core6",
+                "poll_interval": 5000,
+                "scale": -3,
+                "units": "C",
+                "critical_upper": 100,
+                "critical_lower": -100,
+                "warning_upper": 90,
+                "warning_lower": -99,
+                "emergency_enabled": True,
+            },
+            "195": {
+                "object_path": "temperature/cpu1/core7",
+                "poll_interval": 5000,
+                "scale": -3,
+                "units": "C",
+                "critical_upper": 100,
+                "critical_lower": -100,
+                "warning_upper": 90,
+                "warning_lower": -99,
+                "emergency_enabled": True,
+            },
+            "196": {
+                "object_path": "temperature/cpu1/core8",
+                "poll_interval": 5000,
+                "scale": -3,
+                "units": "C",
+                "critical_upper": 100,
+                "critical_lower": -100,
+                "warning_upper": 90,
+                "warning_lower": -99,
+                "emergency_enabled": True,
+            },
+            "197": {
+                "object_path": "temperature/cpu1/core9",
+                "poll_interval": 5000,
+                "scale": -3,
+                "units": "C",
+                "critical_upper": 100,
+                "critical_lower": -100,
+                "warning_upper": 90,
+                "warning_lower": -99,
+                "emergency_enabled": True,
+            },
+            "198": {
+                "object_path": "temperature/cpu1/core10",
+                "poll_interval": 5000,
+                "scale": -3,
+                "units": "C",
+                "critical_upper": 100,
+                "critical_lower": -100,
+                "warning_upper": 90,
+                "warning_lower": -99,
+                "emergency_enabled": True,
+            },
+            "199": {
+                "object_path": "temperature/cpu1/core11",
+                "poll_interval": 5000,
+                "scale": -3,
+                "units": "C",
+                "critical_upper": 100,
+                "critical_lower": -100,
+                "warning_upper": 90,
+                "warning_lower": -99,
+                "emergency_enabled": True,
+            },
+            "110": {
+                "object_path": "temperature/dimm8",
+                "poll_interval": 5000,
+                "scale": -3,
+                "units": "C",
+            },
+            "111": {
+                "object_path": "temperature/dimm9",
+                "poll_interval": 5000,
+                "scale": -3,
+                "units": "C",
+            },
+            "112": {
+                "object_path": "temperature/dimm10",
+                "poll_interval": 5000,
+                "scale": -3,
+                "units": "C",
+            },
+            "113": {
+                "object_path": "temperature/dimm11",
+                "poll_interval": 5000,
+                "scale": -3,
+                "units": "C",
+            },
+            "114": {
+                "object_path": "temperature/dimm12",
+                "poll_interval": 5000,
+                "scale": -3,
+                "units": "C",
+            },
+            "115": {
+                "object_path": "temperature/dimm13",
+                "poll_interval": 5000,
+                "scale": -3,
+                "units": "C",
+            },
+            "116": {
+                "object_path": "temperature/dimm14",
+                "poll_interval": 5000,
+                "scale": -3,
+                "units": "C",
+            },
+            "117": {
+                "object_path": "temperature/dimm15",
+                "poll_interval": 5000,
+                "scale": -3,
+                "units": "C",
+            },
         }
     },
 }
 
 
 GPIO_CONFIGS = {
-    'power_config': {
-        'power_good_in': 'SYS_PWROK_BUFF',
-        'power_up_outs': [
-            ('SOFTWARE_PGOOD', True),
-            ('BMC_POWER_UP', True),
+    "power_config": {
+        "power_good_in": "SYS_PWROK_BUFF",
+        "power_up_outs": [
+            ("SOFTWARE_PGOOD", True),
+            ("BMC_POWER_UP", True),
         ],
-        'reset_outs': [
-            ('BMC_CP0_RESET_N', False),
-            ('BMC_CP0_PERST_ENABLE_R', False),
+        "reset_outs": [
+            ("BMC_CP0_RESET_N", False),
+            ("BMC_CP0_PERST_ENABLE_R", False),
         ],
     },
-    'hostctl_config': {
-        'fsi_data': 'FSI_DATA',
-        'fsi_clk': 'FSI_CLK',
-        'fsi_enable': 'FSI_ENABLE',
-        'cronus_sel': 'CRONUS_SEL',
-        'optionals': [
-        ],
+    "hostctl_config": {
+        "fsi_data": "FSI_DATA",
+        "fsi_clk": "FSI_CLK",
+        "fsi_enable": "FSI_ENABLE",
+        "cronus_sel": "CRONUS_SEL",
+        "optionals": [],
     },
 }
 
@@ -473,14 +946,18 @@
 # Miscellaneous non-poll sensor with system specific properties.
 # The sensor id is the same as those defined in ID_LOOKUP['SENSOR'].
 MISC_SENSORS = {
-    0x8b: {'class': 'BootCountSensor'},
-    0x02: {'class': 'BootProgressSensor'},
+    0x8B: {"class": "BootCountSensor"},
+    0x02: {"class": "BootProgressSensor"},
     # OCC active sensors aren't in the P9 XML yet.  These are wrong.
-    0x03: {'class': 'OccStatusSensor',
-           'os_path': '/sys/bus/i2c/devices/3-0050/online'},
-    0x04: {'class': 'OccStatusSensor',
-           'os_path': '/sys/bus/i2c/devices/3-0051/online'},
-    0x91: {'class': 'OperatingSystemStatusSensor'},
+    0x03: {
+        "class": "OccStatusSensor",
+        "os_path": "/sys/bus/i2c/devices/3-0050/online",
+    },
+    0x04: {
+        "class": "OccStatusSensor",
+        "os_path": "/sys/bus/i2c/devices/3-0051/online",
+    },
+    0x91: {"class": "OperatingSystemStatusSensor"},
     # 0x06 : { 'class' : 'PowerCap',
     #    'os_path' : '/sys/class/hwmon/hwmon3/user_powercap' },
 }
diff --git a/data/Witherspoon.py b/data/Witherspoon.py
index e106eb9..a33293c 100755
--- a/data/Witherspoon.py
+++ b/data/Witherspoon.py
@@ -5,363 +5,584 @@
 # - a process emits a GotoSystemState signal with state name to goto
 # - objects specified in EXIT_STATE_DEPEND have started
 SYSTEM_STATES = [
-    'BASE_APPS',
-    'BMC_STARTING',
-    'BMC_READY',
-    'HOST_POWERING_ON',
-    'HOST_POWERED_ON',
-    'HOST_BOOTING',
-    'HOST_BOOTED',
-    'HOST_POWERED_OFF',
+    "BASE_APPS",
+    "BMC_STARTING",
+    "BMC_READY",
+    "HOST_POWERING_ON",
+    "HOST_POWERED_ON",
+    "HOST_BOOTING",
+    "HOST_BOOTED",
+    "HOST_POWERED_OFF",
 ]
 
 EXIT_STATE_DEPEND = {
-    'BASE_APPS': {
-        '/org/openbmc/sensors': 0,
+    "BASE_APPS": {
+        "/org/openbmc/sensors": 0,
     },
-    'BMC_STARTING': {
-        '/org/openbmc/control/chassis0': 0,
-        '/org/openbmc/control/power0': 0,
-        '/org/openbmc/control/flash/bios': 0,
+    "BMC_STARTING": {
+        "/org/openbmc/control/chassis0": 0,
+        "/org/openbmc/control/power0": 0,
+        "/org/openbmc/control/flash/bios": 0,
     },
 }
 
 FRU_INSTANCES = {
-    '<inventory_root>/system': {'fru_type': 'SYSTEM', 'is_fru': True, 'present': "True"},
-    '<inventory_root>/system/bios': {'fru_type': 'SYSTEM', 'is_fru': True, 'present': "True"},
-    '<inventory_root>/system/misc': {'fru_type': 'SYSTEM', 'is_fru': False, },
-
-    '<inventory_root>/system/chassis': {'fru_type': 'SYSTEM', 'is_fru': True, 'present': "True"},
-
-    '<inventory_root>/system/chassis/motherboard': {'fru_type': 'MAIN_PLANAR', 'is_fru': True, },
-
-    '<inventory_root>/system/systemevent': {'fru_type': 'SYSTEM_EVENT', 'is_fru': False, },
-    '<inventory_root>/system/chassis/motherboard/refclock': {'fru_type': 'MAIN_PLANAR', 'is_fru': False, },
-    '<inventory_root>/system/chassis/motherboard/pcieclock': {'fru_type': 'MAIN_PLANAR', 'is_fru': False, },
-    '<inventory_root>/system/chassis/motherboard/todclock': {'fru_type': 'MAIN_PLANAR', 'is_fru': False, },
-    '<inventory_root>/system/chassis/motherboard/apss': {'fru_type': 'MAIN_PLANAR', 'is_fru': False, },
-
-    '<inventory_root>/system/chassis/fan0': {'fru_type': 'FAN', 'is_fru': True, },
-    '<inventory_root>/system/chassis/fan1': {'fru_type': 'FAN', 'is_fru': True, },
-    '<inventory_root>/system/chassis/fan2': {'fru_type': 'FAN', 'is_fru': True, },
-    '<inventory_root>/system/chassis/fan3': {'fru_type': 'FAN', 'is_fru': True, },
-
-    '<inventory_root>/system/chassis/motherboard/bmc': {'fru_type': 'BMC', 'is_fru': False,
-                                                        'manufacturer': 'ASPEED'},
-
-    '<inventory_root>/system/chassis/motherboard/cpu0': {'fru_type': 'CPU', 'is_fru': True, },
-    '<inventory_root>/system/chassis/motherboard/cpu1': {'fru_type': 'CPU', 'is_fru': True, },
-
-    '<inventory_root>/system/chassis/motherboard/cpu0/core0': {'fru_type': 'CORE', 'is_fru': False, },
-    '<inventory_root>/system/chassis/motherboard/cpu0/core1': {'fru_type': 'CORE', 'is_fru': False, },
-    '<inventory_root>/system/chassis/motherboard/cpu0/core2': {'fru_type': 'CORE', 'is_fru': False, },
-    '<inventory_root>/system/chassis/motherboard/cpu0/core3': {'fru_type': 'CORE', 'is_fru': False, },
-    '<inventory_root>/system/chassis/motherboard/cpu0/core4': {'fru_type': 'CORE', 'is_fru': False, },
-    '<inventory_root>/system/chassis/motherboard/cpu0/core5': {'fru_type': 'CORE', 'is_fru': False, },
-    '<inventory_root>/system/chassis/motherboard/cpu0/core6': {'fru_type': 'CORE', 'is_fru': False, },
-    '<inventory_root>/system/chassis/motherboard/cpu0/core7': {'fru_type': 'CORE', 'is_fru': False, },
-    '<inventory_root>/system/chassis/motherboard/cpu0/core8': {'fru_type': 'CORE', 'is_fru': False, },
-    '<inventory_root>/system/chassis/motherboard/cpu0/core9': {'fru_type': 'CORE', 'is_fru': False, },
-    '<inventory_root>/system/chassis/motherboard/cpu0/core10': {'fru_type': 'CORE', 'is_fru': False, },
-    '<inventory_root>/system/chassis/motherboard/cpu0/core11': {'fru_type': 'CORE', 'is_fru': False, },
-
-    '<inventory_root>/system/chassis/motherboard/cpu1/core0': {'fru_type': 'CORE', 'is_fru': False, },
-    '<inventory_root>/system/chassis/motherboard/cpu1/core1': {'fru_type': 'CORE', 'is_fru': False, },
-    '<inventory_root>/system/chassis/motherboard/cpu1/core2': {'fru_type': 'CORE', 'is_fru': False, },
-    '<inventory_root>/system/chassis/motherboard/cpu1/core3': {'fru_type': 'CORE', 'is_fru': False, },
-    '<inventory_root>/system/chassis/motherboard/cpu1/core4': {'fru_type': 'CORE', 'is_fru': False, },
-    '<inventory_root>/system/chassis/motherboard/cpu1/core5': {'fru_type': 'CORE', 'is_fru': False, },
-    '<inventory_root>/system/chassis/motherboard/cpu1/core6': {'fru_type': 'CORE', 'is_fru': False, },
-    '<inventory_root>/system/chassis/motherboard/cpu1/core7': {'fru_type': 'CORE', 'is_fru': False, },
-    '<inventory_root>/system/chassis/motherboard/cpu1/core8': {'fru_type': 'CORE', 'is_fru': False, },
-    '<inventory_root>/system/chassis/motherboard/cpu1/core9': {'fru_type': 'CORE', 'is_fru': False, },
-    '<inventory_root>/system/chassis/motherboard/cpu1/core10': {'fru_type': 'CORE', 'is_fru': False, },
-    '<inventory_root>/system/chassis/motherboard/cpu1/core11': {'fru_type': 'CORE', 'is_fru': False, },
-
-    '<inventory_root>/system/chassis/motherboard/membuf0': {'fru_type': 'MEMORY_BUFFER', 'is_fru': False, },
-    '<inventory_root>/system/chassis/motherboard/membuf1': {'fru_type': 'MEMORY_BUFFER', 'is_fru': False, },
-    '<inventory_root>/system/chassis/motherboard/membuf2': {'fru_type': 'MEMORY_BUFFER', 'is_fru': False, },
-    '<inventory_root>/system/chassis/motherboard/membuf3': {'fru_type': 'MEMORY_BUFFER', 'is_fru': False, },
-    '<inventory_root>/system/chassis/motherboard/membuf4': {'fru_type': 'MEMORY_BUFFER', 'is_fru': False, },
-    '<inventory_root>/system/chassis/motherboard/membuf5': {'fru_type': 'MEMORY_BUFFER', 'is_fru': False, },
-    '<inventory_root>/system/chassis/motherboard/membuf6': {'fru_type': 'MEMORY_BUFFER', 'is_fru': False, },
-    '<inventory_root>/system/chassis/motherboard/membuf7': {'fru_type': 'MEMORY_BUFFER', 'is_fru': False, },
-
-    '<inventory_root>/system/chassis/motherboard/dimm0': {'fru_type': 'DIMM', 'is_fru': True, },
-    '<inventory_root>/system/chassis/motherboard/dimm1': {'fru_type': 'DIMM', 'is_fru': True, },
-    '<inventory_root>/system/chassis/motherboard/dimm2': {'fru_type': 'DIMM', 'is_fru': True, },
-    '<inventory_root>/system/chassis/motherboard/dimm3': {'fru_type': 'DIMM', 'is_fru': True, },
-    '<inventory_root>/system/chassis/motherboard/dimm4': {'fru_type': 'DIMM', 'is_fru': True, },
-    '<inventory_root>/system/chassis/motherboard/dimm5': {'fru_type': 'DIMM', 'is_fru': True, },
-    '<inventory_root>/system/chassis/motherboard/dimm6': {'fru_type': 'DIMM', 'is_fru': True, },
-    '<inventory_root>/system/chassis/motherboard/dimm7': {'fru_type': 'DIMM', 'is_fru': True, },
-    '<inventory_root>/system/chassis/motherboard/dimm8': {'fru_type': 'DIMM', 'is_fru': True, },
-    '<inventory_root>/system/chassis/motherboard/dimm9': {'fru_type': 'DIMM', 'is_fru': True, },
-    '<inventory_root>/system/chassis/motherboard/dimm10': {'fru_type': 'DIMM', 'is_fru': True, },
-    '<inventory_root>/system/chassis/motherboard/dimm11': {'fru_type': 'DIMM', 'is_fru': True, },
-    '<inventory_root>/system/chassis/motherboard/dimm12': {'fru_type': 'DIMM', 'is_fru': True, },
-    '<inventory_root>/system/chassis/motherboard/dimm13': {'fru_type': 'DIMM', 'is_fru': True, },
-    '<inventory_root>/system/chassis/motherboard/dimm14': {'fru_type': 'DIMM', 'is_fru': True, },
-    '<inventory_root>/system/chassis/motherboard/dimm15': {'fru_type': 'DIMM', 'is_fru': True, },
-    '<inventory_root>/system/chassis/motherboard/dimm16': {'fru_type': 'DIMM', 'is_fru': True, },
-    '<inventory_root>/system/chassis/motherboard/dimm17': {'fru_type': 'DIMM', 'is_fru': True, },
-    '<inventory_root>/system/chassis/motherboard/dimm18': {'fru_type': 'DIMM', 'is_fru': True, },
-    '<inventory_root>/system/chassis/motherboard/dimm19': {'fru_type': 'DIMM', 'is_fru': True, },
-    '<inventory_root>/system/chassis/motherboard/dimm20': {'fru_type': 'DIMM', 'is_fru': True, },
-    '<inventory_root>/system/chassis/motherboard/dimm21': {'fru_type': 'DIMM', 'is_fru': True, },
-    '<inventory_root>/system/chassis/motherboard/dimm22': {'fru_type': 'DIMM', 'is_fru': True, },
-    '<inventory_root>/system/chassis/motherboard/dimm23': {'fru_type': 'DIMM', 'is_fru': True, },
-    '<inventory_root>/system/chassis/motherboard/dimm24': {'fru_type': 'DIMM', 'is_fru': True, },
-    '<inventory_root>/system/chassis/motherboard/dimm25': {'fru_type': 'DIMM', 'is_fru': True, },
-    '<inventory_root>/system/chassis/motherboard/dimm26': {'fru_type': 'DIMM', 'is_fru': True, },
-    '<inventory_root>/system/chassis/motherboard/dimm27': {'fru_type': 'DIMM', 'is_fru': True, },
-    '<inventory_root>/system/chassis/motherboard/dimm28': {'fru_type': 'DIMM', 'is_fru': True, },
-    '<inventory_root>/system/chassis/motherboard/dimm29': {'fru_type': 'DIMM', 'is_fru': True, },
-    '<inventory_root>/system/chassis/motherboard/dimm30': {'fru_type': 'DIMM', 'is_fru': True, },
-    '<inventory_root>/system/chassis/motherboard/dimm31': {'fru_type': 'DIMM', 'is_fru': True, },
+    "<inventory_root>/system": {
+        "fru_type": "SYSTEM",
+        "is_fru": True,
+        "present": "True",
+    },
+    "<inventory_root>/system/bios": {
+        "fru_type": "SYSTEM",
+        "is_fru": True,
+        "present": "True",
+    },
+    "<inventory_root>/system/misc": {
+        "fru_type": "SYSTEM",
+        "is_fru": False,
+    },
+    "<inventory_root>/system/chassis": {
+        "fru_type": "SYSTEM",
+        "is_fru": True,
+        "present": "True",
+    },
+    "<inventory_root>/system/chassis/motherboard": {
+        "fru_type": "MAIN_PLANAR",
+        "is_fru": True,
+    },
+    "<inventory_root>/system/systemevent": {
+        "fru_type": "SYSTEM_EVENT",
+        "is_fru": False,
+    },
+    "<inventory_root>/system/chassis/motherboard/refclock": {
+        "fru_type": "MAIN_PLANAR",
+        "is_fru": False,
+    },
+    "<inventory_root>/system/chassis/motherboard/pcieclock": {
+        "fru_type": "MAIN_PLANAR",
+        "is_fru": False,
+    },
+    "<inventory_root>/system/chassis/motherboard/todclock": {
+        "fru_type": "MAIN_PLANAR",
+        "is_fru": False,
+    },
+    "<inventory_root>/system/chassis/motherboard/apss": {
+        "fru_type": "MAIN_PLANAR",
+        "is_fru": False,
+    },
+    "<inventory_root>/system/chassis/fan0": {
+        "fru_type": "FAN",
+        "is_fru": True,
+    },
+    "<inventory_root>/system/chassis/fan1": {
+        "fru_type": "FAN",
+        "is_fru": True,
+    },
+    "<inventory_root>/system/chassis/fan2": {
+        "fru_type": "FAN",
+        "is_fru": True,
+    },
+    "<inventory_root>/system/chassis/fan3": {
+        "fru_type": "FAN",
+        "is_fru": True,
+    },
+    "<inventory_root>/system/chassis/motherboard/bmc": {
+        "fru_type": "BMC",
+        "is_fru": False,
+        "manufacturer": "ASPEED",
+    },
+    "<inventory_root>/system/chassis/motherboard/cpu0": {
+        "fru_type": "CPU",
+        "is_fru": True,
+    },
+    "<inventory_root>/system/chassis/motherboard/cpu1": {
+        "fru_type": "CPU",
+        "is_fru": True,
+    },
+    "<inventory_root>/system/chassis/motherboard/cpu0/core0": {
+        "fru_type": "CORE",
+        "is_fru": False,
+    },
+    "<inventory_root>/system/chassis/motherboard/cpu0/core1": {
+        "fru_type": "CORE",
+        "is_fru": False,
+    },
+    "<inventory_root>/system/chassis/motherboard/cpu0/core2": {
+        "fru_type": "CORE",
+        "is_fru": False,
+    },
+    "<inventory_root>/system/chassis/motherboard/cpu0/core3": {
+        "fru_type": "CORE",
+        "is_fru": False,
+    },
+    "<inventory_root>/system/chassis/motherboard/cpu0/core4": {
+        "fru_type": "CORE",
+        "is_fru": False,
+    },
+    "<inventory_root>/system/chassis/motherboard/cpu0/core5": {
+        "fru_type": "CORE",
+        "is_fru": False,
+    },
+    "<inventory_root>/system/chassis/motherboard/cpu0/core6": {
+        "fru_type": "CORE",
+        "is_fru": False,
+    },
+    "<inventory_root>/system/chassis/motherboard/cpu0/core7": {
+        "fru_type": "CORE",
+        "is_fru": False,
+    },
+    "<inventory_root>/system/chassis/motherboard/cpu0/core8": {
+        "fru_type": "CORE",
+        "is_fru": False,
+    },
+    "<inventory_root>/system/chassis/motherboard/cpu0/core9": {
+        "fru_type": "CORE",
+        "is_fru": False,
+    },
+    "<inventory_root>/system/chassis/motherboard/cpu0/core10": {
+        "fru_type": "CORE",
+        "is_fru": False,
+    },
+    "<inventory_root>/system/chassis/motherboard/cpu0/core11": {
+        "fru_type": "CORE",
+        "is_fru": False,
+    },
+    "<inventory_root>/system/chassis/motherboard/cpu1/core0": {
+        "fru_type": "CORE",
+        "is_fru": False,
+    },
+    "<inventory_root>/system/chassis/motherboard/cpu1/core1": {
+        "fru_type": "CORE",
+        "is_fru": False,
+    },
+    "<inventory_root>/system/chassis/motherboard/cpu1/core2": {
+        "fru_type": "CORE",
+        "is_fru": False,
+    },
+    "<inventory_root>/system/chassis/motherboard/cpu1/core3": {
+        "fru_type": "CORE",
+        "is_fru": False,
+    },
+    "<inventory_root>/system/chassis/motherboard/cpu1/core4": {
+        "fru_type": "CORE",
+        "is_fru": False,
+    },
+    "<inventory_root>/system/chassis/motherboard/cpu1/core5": {
+        "fru_type": "CORE",
+        "is_fru": False,
+    },
+    "<inventory_root>/system/chassis/motherboard/cpu1/core6": {
+        "fru_type": "CORE",
+        "is_fru": False,
+    },
+    "<inventory_root>/system/chassis/motherboard/cpu1/core7": {
+        "fru_type": "CORE",
+        "is_fru": False,
+    },
+    "<inventory_root>/system/chassis/motherboard/cpu1/core8": {
+        "fru_type": "CORE",
+        "is_fru": False,
+    },
+    "<inventory_root>/system/chassis/motherboard/cpu1/core9": {
+        "fru_type": "CORE",
+        "is_fru": False,
+    },
+    "<inventory_root>/system/chassis/motherboard/cpu1/core10": {
+        "fru_type": "CORE",
+        "is_fru": False,
+    },
+    "<inventory_root>/system/chassis/motherboard/cpu1/core11": {
+        "fru_type": "CORE",
+        "is_fru": False,
+    },
+    "<inventory_root>/system/chassis/motherboard/membuf0": {
+        "fru_type": "MEMORY_BUFFER",
+        "is_fru": False,
+    },
+    "<inventory_root>/system/chassis/motherboard/membuf1": {
+        "fru_type": "MEMORY_BUFFER",
+        "is_fru": False,
+    },
+    "<inventory_root>/system/chassis/motherboard/membuf2": {
+        "fru_type": "MEMORY_BUFFER",
+        "is_fru": False,
+    },
+    "<inventory_root>/system/chassis/motherboard/membuf3": {
+        "fru_type": "MEMORY_BUFFER",
+        "is_fru": False,
+    },
+    "<inventory_root>/system/chassis/motherboard/membuf4": {
+        "fru_type": "MEMORY_BUFFER",
+        "is_fru": False,
+    },
+    "<inventory_root>/system/chassis/motherboard/membuf5": {
+        "fru_type": "MEMORY_BUFFER",
+        "is_fru": False,
+    },
+    "<inventory_root>/system/chassis/motherboard/membuf6": {
+        "fru_type": "MEMORY_BUFFER",
+        "is_fru": False,
+    },
+    "<inventory_root>/system/chassis/motherboard/membuf7": {
+        "fru_type": "MEMORY_BUFFER",
+        "is_fru": False,
+    },
+    "<inventory_root>/system/chassis/motherboard/dimm0": {
+        "fru_type": "DIMM",
+        "is_fru": True,
+    },
+    "<inventory_root>/system/chassis/motherboard/dimm1": {
+        "fru_type": "DIMM",
+        "is_fru": True,
+    },
+    "<inventory_root>/system/chassis/motherboard/dimm2": {
+        "fru_type": "DIMM",
+        "is_fru": True,
+    },
+    "<inventory_root>/system/chassis/motherboard/dimm3": {
+        "fru_type": "DIMM",
+        "is_fru": True,
+    },
+    "<inventory_root>/system/chassis/motherboard/dimm4": {
+        "fru_type": "DIMM",
+        "is_fru": True,
+    },
+    "<inventory_root>/system/chassis/motherboard/dimm5": {
+        "fru_type": "DIMM",
+        "is_fru": True,
+    },
+    "<inventory_root>/system/chassis/motherboard/dimm6": {
+        "fru_type": "DIMM",
+        "is_fru": True,
+    },
+    "<inventory_root>/system/chassis/motherboard/dimm7": {
+        "fru_type": "DIMM",
+        "is_fru": True,
+    },
+    "<inventory_root>/system/chassis/motherboard/dimm8": {
+        "fru_type": "DIMM",
+        "is_fru": True,
+    },
+    "<inventory_root>/system/chassis/motherboard/dimm9": {
+        "fru_type": "DIMM",
+        "is_fru": True,
+    },
+    "<inventory_root>/system/chassis/motherboard/dimm10": {
+        "fru_type": "DIMM",
+        "is_fru": True,
+    },
+    "<inventory_root>/system/chassis/motherboard/dimm11": {
+        "fru_type": "DIMM",
+        "is_fru": True,
+    },
+    "<inventory_root>/system/chassis/motherboard/dimm12": {
+        "fru_type": "DIMM",
+        "is_fru": True,
+    },
+    "<inventory_root>/system/chassis/motherboard/dimm13": {
+        "fru_type": "DIMM",
+        "is_fru": True,
+    },
+    "<inventory_root>/system/chassis/motherboard/dimm14": {
+        "fru_type": "DIMM",
+        "is_fru": True,
+    },
+    "<inventory_root>/system/chassis/motherboard/dimm15": {
+        "fru_type": "DIMM",
+        "is_fru": True,
+    },
+    "<inventory_root>/system/chassis/motherboard/dimm16": {
+        "fru_type": "DIMM",
+        "is_fru": True,
+    },
+    "<inventory_root>/system/chassis/motherboard/dimm17": {
+        "fru_type": "DIMM",
+        "is_fru": True,
+    },
+    "<inventory_root>/system/chassis/motherboard/dimm18": {
+        "fru_type": "DIMM",
+        "is_fru": True,
+    },
+    "<inventory_root>/system/chassis/motherboard/dimm19": {
+        "fru_type": "DIMM",
+        "is_fru": True,
+    },
+    "<inventory_root>/system/chassis/motherboard/dimm20": {
+        "fru_type": "DIMM",
+        "is_fru": True,
+    },
+    "<inventory_root>/system/chassis/motherboard/dimm21": {
+        "fru_type": "DIMM",
+        "is_fru": True,
+    },
+    "<inventory_root>/system/chassis/motherboard/dimm22": {
+        "fru_type": "DIMM",
+        "is_fru": True,
+    },
+    "<inventory_root>/system/chassis/motherboard/dimm23": {
+        "fru_type": "DIMM",
+        "is_fru": True,
+    },
+    "<inventory_root>/system/chassis/motherboard/dimm24": {
+        "fru_type": "DIMM",
+        "is_fru": True,
+    },
+    "<inventory_root>/system/chassis/motherboard/dimm25": {
+        "fru_type": "DIMM",
+        "is_fru": True,
+    },
+    "<inventory_root>/system/chassis/motherboard/dimm26": {
+        "fru_type": "DIMM",
+        "is_fru": True,
+    },
+    "<inventory_root>/system/chassis/motherboard/dimm27": {
+        "fru_type": "DIMM",
+        "is_fru": True,
+    },
+    "<inventory_root>/system/chassis/motherboard/dimm28": {
+        "fru_type": "DIMM",
+        "is_fru": True,
+    },
+    "<inventory_root>/system/chassis/motherboard/dimm29": {
+        "fru_type": "DIMM",
+        "is_fru": True,
+    },
+    "<inventory_root>/system/chassis/motherboard/dimm30": {
+        "fru_type": "DIMM",
+        "is_fru": True,
+    },
+    "<inventory_root>/system/chassis/motherboard/dimm31": {
+        "fru_type": "DIMM",
+        "is_fru": True,
+    },
 }
 
 ID_LOOKUP = {
-    'FRU': {
-        0x01: '<inventory_root>/system/chassis/motherboard/cpu0',
-        0x02: '<inventory_root>/system/chassis/motherboard/cpu1',
-        0x03: '<inventory_root>/system/chassis/motherboard',
-        0x04: '<inventory_root>/system/chassis/motherboard/membuf0',
-        0x05: '<inventory_root>/system/chassis/motherboard/membuf1',
-        0x06: '<inventory_root>/system/chassis/motherboard/membuf2',
-        0x07: '<inventory_root>/system/chassis/motherboard/membuf3',
-        0x08: '<inventory_root>/system/chassis/motherboard/membuf4',
-        0x09: '<inventory_root>/system/chassis/motherboard/membuf5',
-        0x0c: '<inventory_root>/system/chassis/motherboard/dimm0',
-        0x0d: '<inventory_root>/system/chassis/motherboard/dimm1',
-        0x0e: '<inventory_root>/system/chassis/motherboard/dimm2',
-        0x0f: '<inventory_root>/system/chassis/motherboard/dimm3',
-        0x10: '<inventory_root>/system/chassis/motherboard/dimm4',
-        0x11: '<inventory_root>/system/chassis/motherboard/dimm5',
-        0x12: '<inventory_root>/system/chassis/motherboard/dimm6',
-        0x13: '<inventory_root>/system/chassis/motherboard/dimm7',
-        0x14: '<inventory_root>/system/chassis/motherboard/dimm8',
-        0x15: '<inventory_root>/system/chassis/motherboard/dimm9',
-        0x16: '<inventory_root>/system/chassis/motherboard/dimm10',
-        0x17: '<inventory_root>/system/chassis/motherboard/dimm11',
-        0x18: '<inventory_root>/system/chassis/motherboard/dimm12',
-        0x19: '<inventory_root>/system/chassis/motherboard/dimm13',
-        0x1a: '<inventory_root>/system/chassis/motherboard/dimm14',
-        0x1b: '<inventory_root>/system/chassis/motherboard/dimm15',
-        0x1c: '<inventory_root>/system/chassis/motherboard/dimm16',
-        0x1d: '<inventory_root>/system/chassis/motherboard/dimm17',
-        0x1e: '<inventory_root>/system/chassis/motherboard/dimm18',
-        0x1f: '<inventory_root>/system/chassis/motherboard/dimm19',
-        0x20: '<inventory_root>/system/chassis/motherboard/dimm20',
-        0x21: '<inventory_root>/system/chassis/motherboard/dimm21',
-        0x22: '<inventory_root>/system/chassis/motherboard/dimm22',
-        0x23: '<inventory_root>/system/chassis/motherboard/dimm23',
-        0x24: '<inventory_root>/system/chassis/motherboard/dimm24',
-        0x25: '<inventory_root>/system/chassis/motherboard/dimm25',
-        0x26: '<inventory_root>/system/chassis/motherboard/dimm26',
-        0x27: '<inventory_root>/system/chassis/motherboard/dimm27',
-        0x28: '<inventory_root>/system/chassis/motherboard/dimm28',
-        0x29: '<inventory_root>/system/chassis/motherboard/dimm29',
-        0x2a: '<inventory_root>/system/chassis/motherboard/dimm30',
-        0x2b: '<inventory_root>/system/chassis/motherboard/dimm31',
+    "FRU": {
+        0x01: "<inventory_root>/system/chassis/motherboard/cpu0",
+        0x02: "<inventory_root>/system/chassis/motherboard/cpu1",
+        0x03: "<inventory_root>/system/chassis/motherboard",
+        0x04: "<inventory_root>/system/chassis/motherboard/membuf0",
+        0x05: "<inventory_root>/system/chassis/motherboard/membuf1",
+        0x06: "<inventory_root>/system/chassis/motherboard/membuf2",
+        0x07: "<inventory_root>/system/chassis/motherboard/membuf3",
+        0x08: "<inventory_root>/system/chassis/motherboard/membuf4",
+        0x09: "<inventory_root>/system/chassis/motherboard/membuf5",
+        0x0C: "<inventory_root>/system/chassis/motherboard/dimm0",
+        0x0D: "<inventory_root>/system/chassis/motherboard/dimm1",
+        0x0E: "<inventory_root>/system/chassis/motherboard/dimm2",
+        0x0F: "<inventory_root>/system/chassis/motherboard/dimm3",
+        0x10: "<inventory_root>/system/chassis/motherboard/dimm4",
+        0x11: "<inventory_root>/system/chassis/motherboard/dimm5",
+        0x12: "<inventory_root>/system/chassis/motherboard/dimm6",
+        0x13: "<inventory_root>/system/chassis/motherboard/dimm7",
+        0x14: "<inventory_root>/system/chassis/motherboard/dimm8",
+        0x15: "<inventory_root>/system/chassis/motherboard/dimm9",
+        0x16: "<inventory_root>/system/chassis/motherboard/dimm10",
+        0x17: "<inventory_root>/system/chassis/motherboard/dimm11",
+        0x18: "<inventory_root>/system/chassis/motherboard/dimm12",
+        0x19: "<inventory_root>/system/chassis/motherboard/dimm13",
+        0x1A: "<inventory_root>/system/chassis/motherboard/dimm14",
+        0x1B: "<inventory_root>/system/chassis/motherboard/dimm15",
+        0x1C: "<inventory_root>/system/chassis/motherboard/dimm16",
+        0x1D: "<inventory_root>/system/chassis/motherboard/dimm17",
+        0x1E: "<inventory_root>/system/chassis/motherboard/dimm18",
+        0x1F: "<inventory_root>/system/chassis/motherboard/dimm19",
+        0x20: "<inventory_root>/system/chassis/motherboard/dimm20",
+        0x21: "<inventory_root>/system/chassis/motherboard/dimm21",
+        0x22: "<inventory_root>/system/chassis/motherboard/dimm22",
+        0x23: "<inventory_root>/system/chassis/motherboard/dimm23",
+        0x24: "<inventory_root>/system/chassis/motherboard/dimm24",
+        0x25: "<inventory_root>/system/chassis/motherboard/dimm25",
+        0x26: "<inventory_root>/system/chassis/motherboard/dimm26",
+        0x27: "<inventory_root>/system/chassis/motherboard/dimm27",
+        0x28: "<inventory_root>/system/chassis/motherboard/dimm28",
+        0x29: "<inventory_root>/system/chassis/motherboard/dimm29",
+        0x2A: "<inventory_root>/system/chassis/motherboard/dimm30",
+        0x2B: "<inventory_root>/system/chassis/motherboard/dimm31",
     },
-    'FRU_STR': {
-        'PRODUCT_0': '<inventory_root>/system/bios',
-        'BOARD_1': '<inventory_root>/system/chassis/motherboard/cpu0',
-        'BOARD_2': '<inventory_root>/system/chassis/motherboard/cpu1',
-        'CHASSIS_3': '<inventory_root>/system/chassis/motherboard',
-        'BOARD_3': '<inventory_root>/system/misc',
-        'BOARD_4': '<inventory_root>/system/chassis/motherboard/membuf0',
-        'BOARD_5': '<inventory_root>/system/chassis/motherboard/membuf1',
-        'BOARD_6': '<inventory_root>/system/chassis/motherboard/membuf2',
-        'BOARD_7': '<inventory_root>/system/chassis/motherboard/membuf3',
-        'BOARD_8': '<inventory_root>/system/chassis/motherboard/membuf4',
-        'BOARD_9': '<inventory_root>/system/chassis/motherboard/membuf5',
-        'BOARD_10': '<inventory_root>/system/chassis/motherboard/membuf6',
-        'BOARD_11': '<inventory_root>/system/chassis/motherboard/membuf7',
-        'PRODUCT_12': '<inventory_root>/system/chassis/motherboard/dimm0',
-        'PRODUCT_13': '<inventory_root>/system/chassis/motherboard/dimm1',
-        'PRODUCT_14': '<inventory_root>/system/chassis/motherboard/dimm2',
-        'PRODUCT_15': '<inventory_root>/system/chassis/motherboard/dimm3',
-        'PRODUCT_16': '<inventory_root>/system/chassis/motherboard/dimm4',
-        'PRODUCT_17': '<inventory_root>/system/chassis/motherboard/dimm5',
-        'PRODUCT_18': '<inventory_root>/system/chassis/motherboard/dimm6',
-        'PRODUCT_19': '<inventory_root>/system/chassis/motherboard/dimm7',
-        'PRODUCT_20': '<inventory_root>/system/chassis/motherboard/dimm8',
-        'PRODUCT_21': '<inventory_root>/system/chassis/motherboard/dimm9',
-        'PRODUCT_22': '<inventory_root>/system/chassis/motherboard/dimm10',
-        'PRODUCT_23': '<inventory_root>/system/chassis/motherboard/dimm11',
-        'PRODUCT_24': '<inventory_root>/system/chassis/motherboard/dimm12',
-        'PRODUCT_25': '<inventory_root>/system/chassis/motherboard/dimm13',
-        'PRODUCT_26': '<inventory_root>/system/chassis/motherboard/dimm14',
-        'PRODUCT_27': '<inventory_root>/system/chassis/motherboard/dimm15',
-        'PRODUCT_28': '<inventory_root>/system/chassis/motherboard/dimm16',
-        'PRODUCT_29': '<inventory_root>/system/chassis/motherboard/dimm17',
-        'PRODUCT_30': '<inventory_root>/system/chassis/motherboard/dimm18',
-        'PRODUCT_31': '<inventory_root>/system/chassis/motherboard/dimm19',
-        'PRODUCT_32': '<inventory_root>/system/chassis/motherboard/dimm20',
-        'PRODUCT_33': '<inventory_root>/system/chassis/motherboard/dimm21',
-        'PRODUCT_34': '<inventory_root>/system/chassis/motherboard/dimm22',
-        'PRODUCT_35': '<inventory_root>/system/chassis/motherboard/dimm23',
-        'PRODUCT_36': '<inventory_root>/system/chassis/motherboard/dimm24',
-        'PRODUCT_37': '<inventory_root>/system/chassis/motherboard/dimm25',
-        'PRODUCT_38': '<inventory_root>/system/chassis/motherboard/dimm26',
-        'PRODUCT_39': '<inventory_root>/system/chassis/motherboard/dimm27',
-        'PRODUCT_40': '<inventory_root>/system/chassis/motherboard/dimm28',
-        'PRODUCT_41': '<inventory_root>/system/chassis/motherboard/dimm29',
-        'PRODUCT_42': '<inventory_root>/system/chassis/motherboard/dimm30',
-        'PRODUCT_43': '<inventory_root>/system/chassis/motherboard/dimm31',
-        'PRODUCT_47': '<inventory_root>/system/misc',
+    "FRU_STR": {
+        "PRODUCT_0": "<inventory_root>/system/bios",
+        "BOARD_1": "<inventory_root>/system/chassis/motherboard/cpu0",
+        "BOARD_2": "<inventory_root>/system/chassis/motherboard/cpu1",
+        "CHASSIS_3": "<inventory_root>/system/chassis/motherboard",
+        "BOARD_3": "<inventory_root>/system/misc",
+        "BOARD_4": "<inventory_root>/system/chassis/motherboard/membuf0",
+        "BOARD_5": "<inventory_root>/system/chassis/motherboard/membuf1",
+        "BOARD_6": "<inventory_root>/system/chassis/motherboard/membuf2",
+        "BOARD_7": "<inventory_root>/system/chassis/motherboard/membuf3",
+        "BOARD_8": "<inventory_root>/system/chassis/motherboard/membuf4",
+        "BOARD_9": "<inventory_root>/system/chassis/motherboard/membuf5",
+        "BOARD_10": "<inventory_root>/system/chassis/motherboard/membuf6",
+        "BOARD_11": "<inventory_root>/system/chassis/motherboard/membuf7",
+        "PRODUCT_12": "<inventory_root>/system/chassis/motherboard/dimm0",
+        "PRODUCT_13": "<inventory_root>/system/chassis/motherboard/dimm1",
+        "PRODUCT_14": "<inventory_root>/system/chassis/motherboard/dimm2",
+        "PRODUCT_15": "<inventory_root>/system/chassis/motherboard/dimm3",
+        "PRODUCT_16": "<inventory_root>/system/chassis/motherboard/dimm4",
+        "PRODUCT_17": "<inventory_root>/system/chassis/motherboard/dimm5",
+        "PRODUCT_18": "<inventory_root>/system/chassis/motherboard/dimm6",
+        "PRODUCT_19": "<inventory_root>/system/chassis/motherboard/dimm7",
+        "PRODUCT_20": "<inventory_root>/system/chassis/motherboard/dimm8",
+        "PRODUCT_21": "<inventory_root>/system/chassis/motherboard/dimm9",
+        "PRODUCT_22": "<inventory_root>/system/chassis/motherboard/dimm10",
+        "PRODUCT_23": "<inventory_root>/system/chassis/motherboard/dimm11",
+        "PRODUCT_24": "<inventory_root>/system/chassis/motherboard/dimm12",
+        "PRODUCT_25": "<inventory_root>/system/chassis/motherboard/dimm13",
+        "PRODUCT_26": "<inventory_root>/system/chassis/motherboard/dimm14",
+        "PRODUCT_27": "<inventory_root>/system/chassis/motherboard/dimm15",
+        "PRODUCT_28": "<inventory_root>/system/chassis/motherboard/dimm16",
+        "PRODUCT_29": "<inventory_root>/system/chassis/motherboard/dimm17",
+        "PRODUCT_30": "<inventory_root>/system/chassis/motherboard/dimm18",
+        "PRODUCT_31": "<inventory_root>/system/chassis/motherboard/dimm19",
+        "PRODUCT_32": "<inventory_root>/system/chassis/motherboard/dimm20",
+        "PRODUCT_33": "<inventory_root>/system/chassis/motherboard/dimm21",
+        "PRODUCT_34": "<inventory_root>/system/chassis/motherboard/dimm22",
+        "PRODUCT_35": "<inventory_root>/system/chassis/motherboard/dimm23",
+        "PRODUCT_36": "<inventory_root>/system/chassis/motherboard/dimm24",
+        "PRODUCT_37": "<inventory_root>/system/chassis/motherboard/dimm25",
+        "PRODUCT_38": "<inventory_root>/system/chassis/motherboard/dimm26",
+        "PRODUCT_39": "<inventory_root>/system/chassis/motherboard/dimm27",
+        "PRODUCT_40": "<inventory_root>/system/chassis/motherboard/dimm28",
+        "PRODUCT_41": "<inventory_root>/system/chassis/motherboard/dimm29",
+        "PRODUCT_42": "<inventory_root>/system/chassis/motherboard/dimm30",
+        "PRODUCT_43": "<inventory_root>/system/chassis/motherboard/dimm31",
+        "PRODUCT_47": "<inventory_root>/system/misc",
     },
-    'SENSOR': {
-        0x02: '/org/openbmc/sensors/host/HostStatus',
-        0x03: '/org/openbmc/sensors/host/BootProgress',
-        0x5a: '<inventory_root>/system/chassis/motherboard/cpu0',
-        0xa4: '<inventory_root>/system/chassis/motherboard/cpu1',
-        0x1e: '<inventory_root>/system/chassis/motherboard/dimm3',
-        0x1f: '<inventory_root>/system/chassis/motherboard/dimm2',
-        0x20: '<inventory_root>/system/chassis/motherboard/dimm1',
-        0x21: '<inventory_root>/system/chassis/motherboard/dimm0',
-        0x22: '<inventory_root>/system/chassis/motherboard/dimm7',
-        0x23: '<inventory_root>/system/chassis/motherboard/dimm6',
-        0x24: '<inventory_root>/system/chassis/motherboard/dimm5',
-        0x25: '<inventory_root>/system/chassis/motherboard/dimm4',
-        0x26: '<inventory_root>/system/chassis/motherboard/dimm11',
-        0x27: '<inventory_root>/system/chassis/motherboard/dimm10',
-        0x28: '<inventory_root>/system/chassis/motherboard/dimm9',
-        0x29: '<inventory_root>/system/chassis/motherboard/dimm8',
-        0x2a: '<inventory_root>/system/chassis/motherboard/dimm15',
-        0x2b: '<inventory_root>/system/chassis/motherboard/dimm14',
-        0x2c: '<inventory_root>/system/chassis/motherboard/dimm13',
-        0x2d: '<inventory_root>/system/chassis/motherboard/dimm12',
-        0x2e: '<inventory_root>/system/chassis/motherboard/dimm19',
-        0x2f: '<inventory_root>/system/chassis/motherboard/dimm18',
-        0x30: '<inventory_root>/system/chassis/motherboard/dimm17',
-        0x31: '<inventory_root>/system/chassis/motherboard/dimm16',
-        0x32: '<inventory_root>/system/chassis/motherboard/dimm23',
-        0x33: '<inventory_root>/system/chassis/motherboard/dimm22',
-        0x34: '<inventory_root>/system/chassis/motherboard/dimm21',
-        0x35: '<inventory_root>/system/chassis/motherboard/dimm20',
-        0x36: '<inventory_root>/system/chassis/motherboard/dimm27',
-        0x37: '<inventory_root>/system/chassis/motherboard/dimm26',
-        0x38: '<inventory_root>/system/chassis/motherboard/dimm25',
-        0x39: '<inventory_root>/system/chassis/motherboard/dimm24',
-        0x3a: '<inventory_root>/system/chassis/motherboard/dimm31',
-        0x3b: '<inventory_root>/system/chassis/motherboard/dimm30',
-        0x3c: '<inventory_root>/system/chassis/motherboard/dimm29',
-        0x3d: '<inventory_root>/system/chassis/motherboard/dimm28',
-        0x3e: '<inventory_root>/system/chassis/motherboard/cpu0/core0',
-        0x3f: '<inventory_root>/system/chassis/motherboard/cpu0/core1',
-        0x40: '<inventory_root>/system/chassis/motherboard/cpu0/core2',
-        0x41: '<inventory_root>/system/chassis/motherboard/cpu0/core3',
-        0x42: '<inventory_root>/system/chassis/motherboard/cpu0/core4',
-        0x43: '<inventory_root>/system/chassis/motherboard/cpu0/core5',
-        0x44: '<inventory_root>/system/chassis/motherboard/cpu0/core6',
-        0x45: '<inventory_root>/system/chassis/motherboard/cpu0/core7',
-        0x46: '<inventory_root>/system/chassis/motherboard/cpu0/core8',
-        0x47: '<inventory_root>/system/chassis/motherboard/cpu0/core9',
-        0x48: '<inventory_root>/system/chassis/motherboard/cpu0/core10',
-        0x49: '<inventory_root>/system/chassis/motherboard/cpu0/core11',
-        0x4a: '<inventory_root>/system/chassis/motherboard/cpu1/core0',
-        0x4b: '<inventory_root>/system/chassis/motherboard/cpu1/core1',
-        0x4c: '<inventory_root>/system/chassis/motherboard/cpu1/core2',
-        0x4d: '<inventory_root>/system/chassis/motherboard/cpu1/core3',
-        0x4e: '<inventory_root>/system/chassis/motherboard/cpu1/core4',
-        0x4f: '<inventory_root>/system/chassis/motherboard/cpu1/core5',
-        0x50: '<inventory_root>/system/chassis/motherboard/cpu1/core6',
-        0x51: '<inventory_root>/system/chassis/motherboard/cpu1/core7',
-        0x52: '<inventory_root>/system/chassis/motherboard/cpu1/core8',
-        0x53: '<inventory_root>/system/chassis/motherboard/cpu1/core9',
-        0x54: '<inventory_root>/system/chassis/motherboard/cpu1/core10',
-        0x55: '<inventory_root>/system/chassis/motherboard/cpu1/core11',
-        0x56: '<inventory_root>/system/chassis/motherboard/membuf0',
-        0x57: '<inventory_root>/system/chassis/motherboard/membuf1',
-        0x58: '<inventory_root>/system/chassis/motherboard/membuf2',
-        0x59: '<inventory_root>/system/chassis/motherboard/membuf3',
-        0x5a: '<inventory_root>/system/chassis/motherboard/membuf4',
-        0x5b: '<inventory_root>/system/chassis/motherboard/membuf5',
-        0x5c: '<inventory_root>/system/chassis/motherboard/membuf6',
-        0x5d: '<inventory_root>/system/chassis/motherboard/membuf7',
-        0x07: '/org/openbmc/sensors/host/BootCount',
-        0x0c: '<inventory_root>/system/chassis/motherboard',
-        0x01: '<inventory_root>/system/systemevent',
-        0x08: '<inventory_root>/system/powerlimit',
-        0x0d: '<inventory_root>/system/chassis/motherboard/refclock',
-        0x0e: '<inventory_root>/system/chassis/motherboard/pcieclock',
-        0x0f: '<inventory_root>/system/chassis/motherboard/todclock',
-        0x10: '<inventory_root>/system/chassis/motherboard/apss',
-        0x02: '/org/openbmc/sensors/host/OperatingSystemStatus',
-        0x04: '<inventory_root>/system/chassis/motherboard/pcielink',
-        0x0b: '/xyz/openbmc_project/sensors/chassis/PowerSupplyRedundancy',
-        0xda: '/org/openbmc/sensors/host/TurboAllowed',
-        0xD8: '/org/openbmc/sensors/host/PowerSupplyDerating',
+    "SENSOR": {
+        0x02: "/org/openbmc/sensors/host/HostStatus",
+        0x03: "/org/openbmc/sensors/host/BootProgress",
+        0x5A: "<inventory_root>/system/chassis/motherboard/cpu0",
+        0xA4: "<inventory_root>/system/chassis/motherboard/cpu1",
+        0x1E: "<inventory_root>/system/chassis/motherboard/dimm3",
+        0x1F: "<inventory_root>/system/chassis/motherboard/dimm2",
+        0x20: "<inventory_root>/system/chassis/motherboard/dimm1",
+        0x21: "<inventory_root>/system/chassis/motherboard/dimm0",
+        0x22: "<inventory_root>/system/chassis/motherboard/dimm7",
+        0x23: "<inventory_root>/system/chassis/motherboard/dimm6",
+        0x24: "<inventory_root>/system/chassis/motherboard/dimm5",
+        0x25: "<inventory_root>/system/chassis/motherboard/dimm4",
+        0x26: "<inventory_root>/system/chassis/motherboard/dimm11",
+        0x27: "<inventory_root>/system/chassis/motherboard/dimm10",
+        0x28: "<inventory_root>/system/chassis/motherboard/dimm9",
+        0x29: "<inventory_root>/system/chassis/motherboard/dimm8",
+        0x2A: "<inventory_root>/system/chassis/motherboard/dimm15",
+        0x2B: "<inventory_root>/system/chassis/motherboard/dimm14",
+        0x2C: "<inventory_root>/system/chassis/motherboard/dimm13",
+        0x2D: "<inventory_root>/system/chassis/motherboard/dimm12",
+        0x2E: "<inventory_root>/system/chassis/motherboard/dimm19",
+        0x2F: "<inventory_root>/system/chassis/motherboard/dimm18",
+        0x30: "<inventory_root>/system/chassis/motherboard/dimm17",
+        0x31: "<inventory_root>/system/chassis/motherboard/dimm16",
+        0x32: "<inventory_root>/system/chassis/motherboard/dimm23",
+        0x33: "<inventory_root>/system/chassis/motherboard/dimm22",
+        0x34: "<inventory_root>/system/chassis/motherboard/dimm21",
+        0x35: "<inventory_root>/system/chassis/motherboard/dimm20",
+        0x36: "<inventory_root>/system/chassis/motherboard/dimm27",
+        0x37: "<inventory_root>/system/chassis/motherboard/dimm26",
+        0x38: "<inventory_root>/system/chassis/motherboard/dimm25",
+        0x39: "<inventory_root>/system/chassis/motherboard/dimm24",
+        0x3A: "<inventory_root>/system/chassis/motherboard/dimm31",
+        0x3B: "<inventory_root>/system/chassis/motherboard/dimm30",
+        0x3C: "<inventory_root>/system/chassis/motherboard/dimm29",
+        0x3D: "<inventory_root>/system/chassis/motherboard/dimm28",
+        0x3E: "<inventory_root>/system/chassis/motherboard/cpu0/core0",
+        0x3F: "<inventory_root>/system/chassis/motherboard/cpu0/core1",
+        0x40: "<inventory_root>/system/chassis/motherboard/cpu0/core2",
+        0x41: "<inventory_root>/system/chassis/motherboard/cpu0/core3",
+        0x42: "<inventory_root>/system/chassis/motherboard/cpu0/core4",
+        0x43: "<inventory_root>/system/chassis/motherboard/cpu0/core5",
+        0x44: "<inventory_root>/system/chassis/motherboard/cpu0/core6",
+        0x45: "<inventory_root>/system/chassis/motherboard/cpu0/core7",
+        0x46: "<inventory_root>/system/chassis/motherboard/cpu0/core8",
+        0x47: "<inventory_root>/system/chassis/motherboard/cpu0/core9",
+        0x48: "<inventory_root>/system/chassis/motherboard/cpu0/core10",
+        0x49: "<inventory_root>/system/chassis/motherboard/cpu0/core11",
+        0x4A: "<inventory_root>/system/chassis/motherboard/cpu1/core0",
+        0x4B: "<inventory_root>/system/chassis/motherboard/cpu1/core1",
+        0x4C: "<inventory_root>/system/chassis/motherboard/cpu1/core2",
+        0x4D: "<inventory_root>/system/chassis/motherboard/cpu1/core3",
+        0x4E: "<inventory_root>/system/chassis/motherboard/cpu1/core4",
+        0x4F: "<inventory_root>/system/chassis/motherboard/cpu1/core5",
+        0x50: "<inventory_root>/system/chassis/motherboard/cpu1/core6",
+        0x51: "<inventory_root>/system/chassis/motherboard/cpu1/core7",
+        0x52: "<inventory_root>/system/chassis/motherboard/cpu1/core8",
+        0x53: "<inventory_root>/system/chassis/motherboard/cpu1/core9",
+        0x54: "<inventory_root>/system/chassis/motherboard/cpu1/core10",
+        0x55: "<inventory_root>/system/chassis/motherboard/cpu1/core11",
+        0x56: "<inventory_root>/system/chassis/motherboard/membuf0",
+        0x57: "<inventory_root>/system/chassis/motherboard/membuf1",
+        0x58: "<inventory_root>/system/chassis/motherboard/membuf2",
+        0x59: "<inventory_root>/system/chassis/motherboard/membuf3",
+        0x5A: "<inventory_root>/system/chassis/motherboard/membuf4",
+        0x5B: "<inventory_root>/system/chassis/motherboard/membuf5",
+        0x5C: "<inventory_root>/system/chassis/motherboard/membuf6",
+        0x5D: "<inventory_root>/system/chassis/motherboard/membuf7",
+        0x07: "/org/openbmc/sensors/host/BootCount",
+        0x0C: "<inventory_root>/system/chassis/motherboard",
+        0x01: "<inventory_root>/system/systemevent",
+        0x08: "<inventory_root>/system/powerlimit",
+        0x0D: "<inventory_root>/system/chassis/motherboard/refclock",
+        0x0E: "<inventory_root>/system/chassis/motherboard/pcieclock",
+        0x0F: "<inventory_root>/system/chassis/motherboard/todclock",
+        0x10: "<inventory_root>/system/chassis/motherboard/apss",
+        0x02: "/org/openbmc/sensors/host/OperatingSystemStatus",
+        0x04: "<inventory_root>/system/chassis/motherboard/pcielink",
+        0x0B: "/xyz/openbmc_project/sensors/chassis/PowerSupplyRedundancy",
+        0xDA: "/org/openbmc/sensors/host/TurboAllowed",
+        0xD8: "/org/openbmc/sensors/host/PowerSupplyDerating",
     },
-    'GPIO_PRESENT': {}
+    "GPIO_PRESENT": {},
 }
 
 GPIO_CONFIG = {}
-GPIO_CONFIG['BMC_POWER_UP'] = \
-    {'gpio_pin': 'D1', 'direction': 'out'}
-GPIO_CONFIG['SOFTWARE_PGOOD'] = \
-    {'gpio_pin': 'R1', 'direction': 'out'}
-GPIO_CONFIG['SYS_PWROK_BUFF'] = \
-    {'gpio_pin': 'D2', 'direction': 'in'}
+GPIO_CONFIG["BMC_POWER_UP"] = {"gpio_pin": "D1", "direction": "out"}
+GPIO_CONFIG["SOFTWARE_PGOOD"] = {"gpio_pin": "R1", "direction": "out"}
+GPIO_CONFIG["SYS_PWROK_BUFF"] = {"gpio_pin": "D2", "direction": "in"}
 
 # PV_CP_MD_JTAG_ATTENTION_N
-GPIO_CONFIG['CHECKSTOP'] = \
-    {'gpio_pin': 'J2', 'direction': 'falling'}
+GPIO_CONFIG["CHECKSTOP"] = {"gpio_pin": "J2", "direction": "falling"}
 
-GPIO_CONFIG['BMC_CP0_RESET_N'] = \
-    {'gpio_pin': 'A1', 'direction': 'out'}
+GPIO_CONFIG["BMC_CP0_RESET_N"] = {"gpio_pin": "A1", "direction": "out"}
 # pcie switch reset
-GPIO_CONFIG['BMC_VS1_PERST_N'] = \
-    {'gpio_pin': 'B7', 'direction': 'out'}
+GPIO_CONFIG["BMC_VS1_PERST_N"] = {"gpio_pin": "B7", "direction": "out"}
 # pcie slots reset - not connected?
-GPIO_CONFIG['BMC_CP0_PERST_ENABLE_R'] = \
-    {'gpio_pin': 'A3', 'direction': 'out'}
+GPIO_CONFIG["BMC_CP0_PERST_ENABLE_R"] = {"gpio_pin": "A3", "direction": "out"}
 
 # SOFT_FSI_DAT
-GPIO_CONFIG['FSI_DATA'] = \
-    {'gpio_pin': 'E0', 'direction': 'out'}
+GPIO_CONFIG["FSI_DATA"] = {"gpio_pin": "E0", "direction": "out"}
 # SOFT_FSI_CLK
-GPIO_CONFIG['FSI_CLK'] = \
-    {'gpio_pin': 'AA0', 'direction': 'out'}
+GPIO_CONFIG["FSI_CLK"] = {"gpio_pin": "AA0", "direction": "out"}
 # BMC_FSI_IN_ENA
-GPIO_CONFIG['FSI_ENABLE'] = \
-    {'gpio_pin': 'D0', 'direction': 'out'}
+GPIO_CONFIG["FSI_ENABLE"] = {"gpio_pin": "D0", "direction": "out"}
 # FSI_JMFG0_PRSNT_N
-GPIO_CONFIG['CRONUS_SEL'] = \
-    {'gpio_pin': 'A6', 'direction': 'out'}
+GPIO_CONFIG["CRONUS_SEL"] = {"gpio_pin": "A6", "direction": "out"}
 
 # FP_PWR_BTN_N
-GPIO_CONFIG['POWER_BUTTON'] = \
-    {'gpio_pin': 'I3', 'direction': 'both'}
+GPIO_CONFIG["POWER_BUTTON"] = {"gpio_pin": "I3", "direction": "both"}
 # BMC_NMIBTN_IN_N
-GPIO_CONFIG['RESET_BUTTON'] = \
-    {'gpio_pin': 'J1', 'direction': 'both'}
+GPIO_CONFIG["RESET_BUTTON"] = {"gpio_pin": "J1", "direction": "both"}
 
 # FP_ID_BTN_N
-GPIO_CONFIG['IDBTN'] = \
-    {'gpio_pin': 'Q7', 'direction': 'out'}
+GPIO_CONFIG["IDBTN"] = {"gpio_pin": "Q7", "direction": "out"}
 
 GPIO_CONFIGS = {
-    'power_config': {
-        'power_good_in': 'SYS_PWROK_BUFF',
-        'power_up_outs': [
-            ('SOFTWARE_PGOOD', True),
-            ('BMC_POWER_UP', True),
+    "power_config": {
+        "power_good_in": "SYS_PWROK_BUFF",
+        "power_up_outs": [
+            ("SOFTWARE_PGOOD", True),
+            ("BMC_POWER_UP", True),
         ],
-        'reset_outs': [
-            ('BMC_CP0_RESET_N', False),
+        "reset_outs": [
+            ("BMC_CP0_RESET_N", False),
         ],
     },
-    'hostctl_config': {
-        'fsi_data': 'FSI_DATA',
-        'fsi_clk': 'FSI_CLK',
-        'fsi_enable': 'FSI_ENABLE',
-        'cronus_sel': 'CRONUS_SEL',
-        'optionals': [
-        ],
+    "hostctl_config": {
+        "fsi_data": "FSI_DATA",
+        "fsi_clk": "FSI_CLK",
+        "fsi_enable": "FSI_ENABLE",
+        "cronus_sel": "CRONUS_SEL",
+        "optionals": [],
     },
 }
 
@@ -369,13 +590,13 @@
 # Miscellaneous non-poll sensor with system specific properties.
 # The sensor id is the same as those defined in ID_LOOKUP['SENSOR'].
 MISC_SENSORS = {
-    0x07: {'class': 'BootCountSensor'},
-    0x03: {'class': 'BootProgressSensor'},
-    0x02: {'class': 'OperatingSystemStatusSensor'},
+    0x07: {"class": "BootCountSensor"},
+    0x03: {"class": "BootProgressSensor"},
+    0x02: {"class": "OperatingSystemStatusSensor"},
     # Garrison value is used, Not in P9 XML yet.
-    0x0b: {'class': 'PowerSupplyRedundancySensor'},
-    0xda: {'class': 'TurboAllowedSensor'},
-    0xD8: {'class': 'PowerSupplyDeratingSensor'},
+    0x0B: {"class": "PowerSupplyRedundancySensor"},
+    0xDA: {"class": "TurboAllowedSensor"},
+    0xD8: {"class": "PowerSupplyDeratingSensor"},
 }
 
 # vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4
diff --git a/data/inventory.py b/data/inventory.py
index 00de1dd..6e3bc64 100644
--- a/data/inventory.py
+++ b/data/inventory.py
@@ -1,20 +1,7 @@
 inventory_dict = {
-    "core": [
-        "PrettyName",
-        "Present",
-        "Functional"
-    ],
-    "fan": [
-        "PrettyName",
-        "Present",
-        "MeetsMinimumShipLevel",
-        "Functional"
-    ],
-    "fan_wc": [
-        "PrettyName",
-        "Present",
-        "MeetsMinimumShipLevel"
-    ],
+    "core": ["PrettyName", "Present", "Functional"],
+    "fan": ["PrettyName", "Present", "MeetsMinimumShipLevel", "Functional"],
+    "fan_wc": ["PrettyName", "Present", "MeetsMinimumShipLevel"],
     "fru": [
         "PrettyName",
         "Present",
@@ -26,12 +13,7 @@
         "Version",
         "FieldReplaceable",
         "Cached",
-        "Functional"
+        "Functional",
     ],
-    "gpu": [
-        "PrettyName",
-        "Present",
-        "FieldReplaceable",
-        "Functional"
-    ]
+    "gpu": ["PrettyName", "Present", "FieldReplaceable", "Functional"],
 }
diff --git a/data/ipmi_raw_cmd_table.py b/data/ipmi_raw_cmd_table.py
index 729e968..4df9872 100644
--- a/data/ipmi_raw_cmd_table.py
+++ b/data/ipmi_raw_cmd_table.py
@@ -11,16 +11,14 @@
 # Refer:
 # openbmc/meta-openbmc-machines/meta-openpower/meta-ibm/meta-witherspoon/recipe
 # s-phosphor/ipmi/phosphor-ipmi-host/cipher_list.json
-valid_ciphers = ['17']
-unsupported_ciphers = ['1', '2', '15', '16']
+valid_ciphers = ["17"]
+unsupported_ciphers = ["1", "2", "15", "16"]
 
 IPMI_RAW_CMD = {
     # Interface name
-    'power_supply_redundancy':
-    {
+    "power_supply_redundancy": {
         # Command action type
-        'Get':
-        [
+        "Get": [
             # raw command, expected output(s), comment
             "0x04 0x2d 0x0b",
             "00 00 01 00",
@@ -30,73 +28,61 @@
             "00 40 02 00",
             "40 is scanning enabled and 02 indicates redundancy enabled",
         ],
-        'Enabled':
-        [
+        "Enabled": [
             # raw command, expected output, comment
             "0x04 0x30 0x0b 0x00 0x00 0x02 0x00 0x00 0x00 0x00 0x00 0x00",
             "none",
             "Enabled nibble position 6th LSB e.g. 0x2",
         ],
-        'Disabled':
-        [
+        "Disabled": [
             # raw command, expected output, comment
             "0x04 0x30 0x0b 0x00 0x00 0x01 0x00 0x00 0x00 0x00 0x00 0x00",
             "none",
             "Enabled nibble position 6th LSB e.g. 0x1",
         ],
     },
-    'power_reading':
-    {
-        'Get':
-        [
+    "power_reading": {
+        "Get": [
             # raw command, expected output(s), comment
             "0x2c 0x02 0xdc 0x01 0x01 0x00",
             "dc d5 00 d5 00 d5 00 d5 00 00 00 00 00 00 00 00 00 00",
             "Byte position 2nd LSB e.g. d5 Instantaneous power readings",
         ],
     },
-    'conf_param':
-    {
-        'Enabled':
-        [
+    "conf_param": {
+        "Enabled": [
             # raw command, expected output, comment
             "0x2c 0x12 0xdc 0x02 0x00 0x01",
             "dc",
             "Enabled nibble position 6th LSB e.g. 0x01",
         ],
-        'Disabled':
-        [
+        "Disabled": [
             # raw command, expected output, comment
             "0x2c 0x12 0xdc 0x02 0x00 0x00",
             "dc",
             "Disable nibble position 6th LSB e.g. 0x00",
-        ]
+        ],
     },
-    'SEL_entry':
-    {
-        'Reserve':
-        [
+    "SEL_entry": {
+        "Reserve": [
             # raw command, expected output, comment
             "0x0a 0x42",
             "27 00",
             "27 is Reservation ID, LSB, 00 Reservation ID, MSB ",
         ],
-        'Get_SEL_Time':
-        [
+        "Get_SEL_Time": [
             # raw command
-            '0x0a 0x48',
+            "0x0a 0x48",
         ],
-        'Set_SEL_Time':
-        [
+        "Set_SEL_Time": [
             # raw command, expected output(s)
-            '0x0a 0x49',
-            'rsp=0xd5',
-            'not supported in present state',
-            'rsp=0xc7',
-            'Request data length invalid',
+            "0x0a 0x49",
+            "rsp=0xd5",
+            "not supported in present state",
+            "rsp=0xc7",
+            "Request data length invalid",
         ],
-        'Clear_SEL':
-        [
+        "Clear_SEL": [
             # raw command, expected output(s)
             "0x0a 0x47",
             "0x43 0x4c 0x52 0xaa",
@@ -106,56 +92,48 @@
             "Reservation cancelled or invalid",
             "0x43 0x4c 0x52 0x00",
         ],
-        'SEL_info':
-        [
+        "SEL_info": [
             # raw command
             "0x0a 0x40"
         ],
-        'Create_SEL':
-        [
+        "Create_SEL": [
             # raw command
             "0x0a 0x44 0x00 0x00 0x02 0x00 0x00 0x00 0x00 0x00 0x00 0x04",
             "0x00 0xa0 0x04 0x07",
         ],
-        'Get_SEL_Entry':
-        [
+        "Get_SEL_Entry": [
             # raw command
             "0x0a 0x43 0x00 0x00",
             "0x00 0xff",
         ],
     },
-    'Self_Test_Results':
-    {
-        'Get':
-        [
+    "Self_Test_Results": {
+        "Get": [
             # raw command, expected output(s), comment
             "0x06 0x04",
             "56 00",
             "56h = Self Test function not implemented in this controller.",
         ]
     },
-    'Device GUID':
-    {
-        'Get':
-        [
+    "Device GUID": {
+        "Get": [
             # raw command, expected output(s), comment
             "0x06 0x08",
             "01 70 9b ae da 6f dd 9c b4 4c 36 be 66 c8 49 28",
             "Get GUID bytes 1 through 16.",
-
         ]
     },
-    'LAN_Config_Params':
-    {
-        'Get':
-        [
+    "LAN_Config_Params": {
+        "Get": [
             # raw command, expected output, comment
             "0x0c 0x02",
             "11 02",
-            "11 is Parameter revision, 02 is Configuration parameter data e.g. Cipher Suite Entry count",
+            (
+                "11 is Parameter revision, 02 is Configuration parameter data"
+                " e.g. Cipher Suite Entry count"
+            ),
         ],
-        'Set':
-        [
+        "Set": [
             # raw command, expected output, error response
             "0x0c 0x01",
             "11 00",
@@ -163,135 +141,116 @@
             "Invalid data field in request",
         ],
     },
-    'Payload':
-    {
-        'Get_Payload_Activation_Status':
-        [
+    "Payload": {
+        "Get_Payload_Activation_Status": [
             # raw command, expected output(s), comment
             "0x06 0x4a 0x01",
             "01 00 00",
-            "1st byte is instance capacity, last two bytes is activation status of instances",
+            (
+                "1st byte is instance capacity, last two bytes is activation"
+                " status of instances"
+            ),
         ],
-        'Activate_Payload':
-        [
+        "Activate_Payload": [
             # raw command, expected output(s), comment
             "0x06 0x48 0x01 0x01 0xc6 0x00 0x00 0x00",
             "00 00 00 00 ff 00 ff 00 6f 02 ff ff",
-            "Last two bits are payload vlan number, - FFFFh if VLAN addressing is not used",
+            (
+                "Last two bits are payload vlan number, - FFFFh if VLAN"
+                " addressing is not used"
+            ),
         ],
-        'Deactivate_Payload':
-        [
+        "Deactivate_Payload": [
             # raw command, expected output(s), comment
             "0x06 0x49 0x01 0x01 0x00 0x00 0x00 0x00",
             "",
             "Line feed only",
         ],
-        'Get_Payload_Instance_Info':
-        [
+        "Get_Payload_Instance_Info": [
             # raw command, expected output(s), comment
             "0x06 0x4b 0x01 0x01",
             "00 00 00 00 00 00 00 00 00 00 00 00",
-            "When the payload is activated, the first four bytes are the session ID,"
-            "otherwise it should be 00."
+            (
+                "When the payload is activated, the first four bytes are the"
+                " session ID,otherwise it should be 00."
+            ),
         ],
-        'Get_User_Access_Payload':
-        [
+        "Get_User_Access_Payload": [
             # raw command,
             "0x06 0x4d"
         ],
-        'Set_User_Access_Payload':
-        [
+        "Set_User_Access_Payload": [
             # raw command,
             "0x06 0x4c"
         ],
-        'Get_Channel_Payload_Version':
-        [
+        "Get_Channel_Payload_Version": [
             # raw command,
             "0x06 0x4F"
         ],
-        'Get_Channel_Payload_Support':
-        [
+        "Get_Channel_Payload_Support": [
             # raw command,
             "0x06 0x4E"
         ],
     },
-    'BIOS_POST_Code':
-    {
-        'Get':
-        [
+    "BIOS_POST_Code": {
+        "Get": [
             # raw command, expected output, comment
             "0x30 0xe9",
             "",
             "Response bytes will vary in length depending on state of system",
             "0x89",
-            "error response byte when host is powered off"
+            "error response byte when host is powered off",
         ]
     },
-    'Device ID':
-    {
-        'Get':
-        [
+    "Device ID": {
+        "Get": [
             # raw command, error response, error code
             "0x06 0x01",
             "Error: Unable to establish IPMI v2 / RMCP+ session",
             "0xc7",
         ]
     },
-    'Cold Reset':
-    {
-        'reset':
-        [
+    "Cold Reset": {
+        "reset": [
             # raw command
             "0x06 0x02"
         ]
     },
-    'lan_parameters':
-    {
-        'get_ip':
-        [
+    "lan_parameters": {
+        "get_ip": [
             # raw command
             "0x0c 0x02 0x01 0x03 0 0"
         ],
-        'get_ip_src':
-        [
+        "get_ip_src": [
             # raw command
             "0x0c 0x02 0x01 0x04 0 0"
         ],
-        'get_dot1q':
-        [
+        "get_dot1q": [
             # raw command
             "0x0c 0x02 0x01 0x14 0 0"
-        ]
+        ],
     },
-    'SDR_Info':
-    {
-        'get':
-        [
+    "SDR_Info": {
+        "get": [
             # raw command
             "0x04 0x20 1"
         ]
     },
-    'Chassis_status':
-    {
-        'get':
-        [
+    "Chassis_status": {
+        "get": [
             # raw command
             "0x00 0x01"
         ]
     },
-    'SEL_Info':
-    {
-        'get':
-        [
+    "SEL_Info": {
+        "get": [
             # raw command
             "0x0a 0x40"
         ]
     },
-    'Watchdog':
-    {
+    "Watchdog": {
         # Command action type
-        'Get':
-        [
+        "Get": [
             # raw command, expected output(s), comment
             "0x06 0x25",
             "05 00 00 00 64 00",
@@ -341,8 +300,7 @@
             "0x06 0x25 0x00",
             "Get with one extra byte",
         ],
-        'Set':
-        [
+        "Set": [
             # raw command, expected output, comment
             "0x06 0x24 0x05 0x00 0x00 0x00 0x64 0x00",
             "none",
@@ -435,8 +393,7 @@
             "none",
             "Set with one extra byte",
         ],
-        'Reset':
-        [
+        "Reset": [
             # raw command, expected output, comment
             "0x06 0x22",
             "none",
@@ -447,21 +404,17 @@
             "0x06 0x22",
             "none",
             "Reset watchdog timer without initialized watchdog",
-        ]
+        ],
     },
-    'SOL':
-    {
-        'Set_SOL':
-        [
+    "SOL": {
+        "Set_SOL": [
             # raw command, expected output(s), comment
-            'Invalid value',
-            'Valid values are serial, 9.6 19.2, 38.4, 57.6 and 115.2',
+            "Invalid value",
+            "Valid values are serial, 9.6 19.2, 38.4, 57.6 and 115.2",
         ]
     },
-    'Get SDR':
-    {
-        'Get':
-        [
+    "Get SDR": {
+        "Get": [
             # Get SDR raw command without Reservation ID.
             "0x0a 0x23 0x00 0x00 0x00 0x00 0x00 0xff",
             # Netfunction and cmd.
@@ -469,22 +422,18 @@
             # Record ID offset and bytes to read.
             "0x01 0x0f",
             #  Raw command To Get SDR Partial without Reservation ID.
-            "0x0a 0x23 0x00 0x00 0x00 0x00 0x01 0x0f"
+            "0x0a 0x23 0x00 0x00 0x00 0x00 0x01 0x0f",
         ],
     },
-    'Get':
-    {
-        'POH_Counter':
-        [
+    "Get": {
+        "POH_Counter": [
             # raw command, error response
-            '0x00 0x0f',
-            'Error: Unable to establish IPMI v2 / RMCP+ session'
+            "0x00 0x0f",
+            "Error: Unable to establish IPMI v2 / RMCP+ session",
         ]
     },
-    'Device_SDR':
-    {
-        'Get_Info':
-        [
+    "Device_SDR": {
+        "Get_Info": [
             # raw command, expected output(s), comment
             "0x04 0x20 0x00",
             "0x04 0x20 0x01",
@@ -493,16 +442,14 @@
             "rsp=0xd4",
             "Insufficient privilege level",
         ],
-        'Get':
-        [
+        "Get": [
             # raw command, expected output(s), comment
             "0x04 0x21",
             "0x00 0x00 0x00 0xff",
             "rsp=0xc7",
             "Request data length invalid",
         ],
-        'Reserve_Repository':
-        [
+        "Reserve_Repository": [
             # raw command, expected output(s), comment
             "0x04 0x22",
             "rsp=0xc7",
@@ -510,114 +457,91 @@
             "rsp=0xd4",
             "Insufficient privilege level",
             "Reservation cancelled or invalid",
-        ]
+        ],
     },
-    'System_Info':
-    {
-        'param0_Set_In_Progress':
-        {
-            'Get':
-            [
+    "System_Info": {
+        "param0_Set_In_Progress": {
+            "Get": [
                 # raw command, expected output(s)
                 "0x06 0x59 0x00 0x00 0x00 0x00",
                 "Request data length invalid",
             ],
-            'Set':
-            [
+            "Set": [
                 # raw command, expected output(s)
                 "0x06 0x58 0x00",
                 "Request data length invalid",
                 "Invalid data field in request",
             ],
         },
-        'param1_System_Firmware_Version':
-        {
-            'Get':
-            [
+        "param1_System_Firmware_Version": {
+            "Get": [
                 # raw command, expected output(s)
                 "0x06 0x59 0x00 0x01 0x00 0x00",
                 "Request data length invalid",
             ],
-            'Set':
-            [
+            "Set": [
                 # raw command, expected output(s)
                 "0x06 0x58 0x01 0x00 0x00 0x0e",
                 "Invalid data field in request",
             ],
         },
-        'param2_System_Name':
-        {
-            'Get':
-            [
+        "param2_System_Name": {
+            "Get": [
                 # raw command, expected output(s)
                 "0x06 0x59 0x00 0x02 0x00 0x00",
                 "Request data length invalid",
             ],
-            'Set':
-            [
+            "Set": [
                 # raw command, expected output(s)
                 "0x06 0x58 0x02 0x00 0x00 0x0e",
                 "Invalid data field in request",
             ],
         },
-        'param3_Primary_Operating_System_Name':
-        {
-            'Get':
-            [
+        "param3_Primary_Operating_System_Name": {
+            "Get": [
                 # raw command, expected output(s)
                 "0x06 0x59 0x00 0x03 0x00 0x00",
                 "Request data length invalid",
             ],
-            'Set':
-            [
+            "Set": [
                 # raw command, expected output(s)
                 "0x06 0x58 0x03 0x00 0x00 0x0e",
                 "Invalid data field in request",
             ],
         },
-        'param4_Operating_System_Name':
-        {
-            'Get':
-            [
+        "param4_Operating_System_Name": {
+            "Get": [
                 # raw command, expected output(s)
                 "0x06 0x59 0x00 0x04 0x00 0x00",
                 "Request data length invalid",
             ],
-            'Set':
-            [
+            "Set": [
                 # raw command, expected output(s)
                 "0x06 0x58 0x04 0x00 0x00 0x0e",
                 "Invalid data field in request",
             ],
         },
-        'param5_Present_OS_Version_number':
-        {
-            'Get':
-            [
+        "param5_Present_OS_Version_number": {
+            "Get": [
                 # raw command, expected output(s)
                 "0x06 0x59 0x00 0x05 0x00 0x00",
                 "Request data length invalid",
             ],
-            'Set':
-            [
+            "Set": [
                 # raw command, expected output(s)
                 "0x06 0x58 0x05 0x00 0x00 0x0e",
                 "Invalid data field in request",
-            ]
-        }
+            ],
+        },
     },
-    'Get Channel Auth Cap':
-    {
-        'get':
-        [
+    "Get Channel Auth Cap": {
+        "get": [
             # raw command
             "0x06 0x38",
         ]
     },
-    'Cipher Suite':
-    {
-        'get':
-        [
+    "Cipher Suite": {
+        "get": [
             # raw command, supported algorithm
             "0x06 0x54",
             "03 44 81",
@@ -626,10 +550,8 @@
             # 81 - aes_cbc_128
         ]
     },
-    'SDR':
-    {
-        'Get':
-        [
+    "SDR": {
+        "Get": [
             # Get SDR raw command without Reservation ID.
             "0x0a 0x23 0x00 0x00 0x00 0x00 0x00 0xff",
             # Netfunction and command.
@@ -637,50 +559,41 @@
             # Record ID offset and bytes to read.
             "0x00 0x00 0x01 0x0f",
             #  Raw command To Get SDR Partial without reservation ID.
-            "0x0a 0x23 0x00 0x00 0x00 0x00 0x01 0x0f"
+            "0x0a 0x23 0x00 0x00 0x00 0x00 0x01 0x0f",
         ],
-        'Reserve SDR Repository':
-        [
+        "Reserve SDR Repository": [
             # raw command, expected output(s), comment
             "0x0a 0x22",
         ],
-        'SDR Repository Info':
-        [
+        "SDR Repository Info": [
             # raw command.
             "0x0a 0x20",
         ],
-        'Get SDR allocation Info':
-        [
+        "Get SDR allocation Info": [
             # raw command.
             "0x0a 0x21"
         ],
-        'Delete SDR':
-        [
+        "Delete SDR": [
             # raw command.
             "0x0a 0x26"
         ],
-        'Partially Add SDR':
-        [
+        "Partially Add SDR": [
             # raw command.
             "0x0a 0x25"
-        ]
+        ],
     },
-    'FRU':
-    {
-        'Inventory_Area_Info':
-        [
+    "FRU": {
+        "Inventory_Area_Info": [
             # raw command, expected output(s), comment
             "0x0a 0x10",
             "Invalid data field in request",
-            "Request data length invalid"
+            "Request data length invalid",
         ],
-        'Read':
-        [
+        "Read": [
             # raw command
             "0x0a 0x11",
         ],
-        'Write':
-        [
+        "Write": [
             # raw command
             "0x0a 0x12",
         ],
diff --git a/data/ipmi_rest_fru_field_map.py b/data/ipmi_rest_fru_field_map.py
index 0ada176..a0acfd7 100644
--- a/data/ipmi_rest_fru_field_map.py
+++ b/data/ipmi_rest_fru_field_map.py
@@ -13,42 +13,40 @@
         "board_mfg": "Manufacturer",
         "board_product": "PrettyName",
         "board_serial": "SerialNumber",
-        "board_part_number": "PartNumber"
+        "board_part_number": "PartNumber",
     },
     "system": {
         "chassis_part_number": "Model",
-        "chassis_serial": "SerialNumber"
+        "chassis_serial": "SerialNumber",
     },
     "motherboard": {
         "board_mfg": "Manufacturer",
         "board_product": "PrettyName",
         "board_serial": "SerialNumber",
-        "board_part_number": "PartNumber"
+        "board_part_number": "PartNumber",
     },
     "dimm": {
         "product_manufacturer": "Manufacturer",
         "product_name": "PrettyName",
         "product_part_number": "Model",
         "product_version": "Version",
-        "product_serial": "SerialNumber"
+        "product_serial": "SerialNumber",
     },
-    "fan": {
-        "product_name": "PrettyName"
-    },
+    "fan": {"product_name": "PrettyName"},
     "bmc": {
         # "board_mfg_date": "BuildDate",
         "board_mfg": "Manufacturer",
         "board_product": "PrettyName",
         "board_serial": "SerialNumber",
-        "board_part_number": "PartNumber"
+        "board_part_number": "PartNumber",
     },
     "powersupply": {
         # "board_mfg_date": "BuildDate",
         "board_product": "PrettyName",
         "board_serial": "SerialNumber",
-        "board_part_number": "PartNumber"
+        "board_part_number": "PartNumber",
     },
     "gv100card": {
         # "board_mfg_date": "BuildDate",
-    }
+    },
 }
diff --git a/data/ipmi_variable.py b/data/ipmi_variable.py
index b9958ed..a9f2166 100644
--- a/data/ipmi_variable.py
+++ b/data/ipmi_variable.py
@@ -17,7 +17,7 @@
     "SMBus v2.0": "smbus-v2.0",
     "USB 1.x": "usb-1x",
     "USB 2.x": "usb-2x",
-    "System Interface": "system-interface"
+    "System Interface": "system-interface",
 }
 
 
diff --git a/data/model.py b/data/model.py
index de5ca9a..8134c99 100755
--- a/data/model.py
+++ b/data/model.py
@@ -1,55 +1,52 @@
 #!/usr/bin/env python3 -u
-import sys
-from robot.libraries.BuiltIn import BuiltIn
 import imp
 import string
+import sys
+
+from robot.libraries.BuiltIn import BuiltIn
 
 
 def get_sensor(module_name, value):
-    m = imp.load_source('module.name', module_name)
+    m = imp.load_source("module.name", module_name)
 
-    for i in m.ID_LOOKUP['SENSOR']:
-
-        if m.ID_LOOKUP['SENSOR'][i] == value:
+    for i in m.ID_LOOKUP["SENSOR"]:
+        if m.ID_LOOKUP["SENSOR"][i] == value:
             return i
 
     return 0xFF
 
 
 def get_inventory_sensor(module_name, value):
-    m = imp.load_source('module.name', module_name)
+    m = imp.load_source("module.name", module_name)
 
-    value = string.replace(value, m.INVENTORY_ROOT, '<inventory_root>')
+    value = string.replace(value, m.INVENTORY_ROOT, "<inventory_root>")
 
-    for i in m.ID_LOOKUP['SENSOR']:
-
-        if m.ID_LOOKUP['SENSOR'][i] == value:
+    for i in m.ID_LOOKUP["SENSOR"]:
+        if m.ID_LOOKUP["SENSOR"][i] == value:
             return i
 
     return 0xFF
 
 
 def get_inventory_list(module_name):
-
     inventory_list = []
-    m = imp.load_source('module.name', module_name)
+    m = imp.load_source("module.name", module_name)
 
-    for i in m.ID_LOOKUP['FRU']:
-        s = m.ID_LOOKUP['FRU'][i]
-        s = s.replace('<inventory_root>', m.INVENTORY_ROOT)
+    for i in m.ID_LOOKUP["FRU"]:
+        s = m.ID_LOOKUP["FRU"][i]
+        s = s.replace("<inventory_root>", m.INVENTORY_ROOT)
         inventory_list.append(s)
 
     return inventory_list
 
 
 def get_inventory_fru_type_list(module_name, fru_type):
-
     inventory_list = []
-    m = imp.load_source('module.name', module_name)
+    m = imp.load_source("module.name", module_name)
 
     for i in m.FRU_INSTANCES.keys():
-        if m.FRU_INSTANCES[i]['fru_type'] == fru_type:
-            s = i.replace('<inventory_root>', m.INVENTORY_ROOT)
+        if m.FRU_INSTANCES[i]["fru_type"] == fru_type:
+            s = i.replace("<inventory_root>", m.INVENTORY_ROOT)
             inventory_list.append(s)
 
     return inventory_list
@@ -61,7 +58,7 @@
 
 def get_FRU_component_name_list(module_name):
     name_list = []
-    m = imp.load_source('module.name', module_name)
+    m = imp.load_source("module.name", module_name)
 
     for name in m.FRU_COMPONENT_NAME:
         name_list.append(name)
@@ -71,8 +68,7 @@
 
 
 def get_ipmi_rest_fru_field_map(module_name):
-
-    m = imp.load_source('module.name', module_name)
+    m = imp.load_source("module.name", module_name)
 
     ipmi_rest_fru_field_map = dict.copy(m.ipmi_rest_fru_field_map)
 
diff --git a/data/pel_variables.py b/data/pel_variables.py
index 7c0c823..e5c3d6f 100644
--- a/data/pel_variables.py
+++ b/data/pel_variables.py
@@ -5,41 +5,72 @@
 """
 
 PEL_DETAILS = {
-    'CreatorID': 'BMC',
-    'CompID': '0x1000',
-    'Subsystem': 'Platform Firmware',
-    'Message': 'This is a test error',
-    'SRC': 'BD8D1002',
-    'Sev': 'Unrecoverable Error'}
+    "CreatorID": "BMC",
+    "CompID": "0x1000",
+    "Subsystem": "Platform Firmware",
+    "Message": "This is a test error",
+    "SRC": "BD8D1002",
+    "Sev": "Unrecoverable Error",
+}
 
-ERROR_LOG_CREATE_BASE_CMD = 'busctl call xyz.openbmc_project.Logging /xyz/openbmc_project/logging \
-    xyz.openbmc_project.Logging.Create Create ssa{ss} '
+ERROR_LOG_CREATE_BASE_CMD = (
+    "busctl call xyz.openbmc_project.Logging /xyz/openbmc_project/logging    "
+    " xyz.openbmc_project.Logging.Create Create ssa{ss} "
+)
 
-CMD_INTERNAL_FAILURE = ERROR_LOG_CREATE_BASE_CMD + 'xyz.openbmc_project.Common.Error.InternalFailure \
-    xyz.openbmc_project.Logging.Entry.Level.Error 0'
+CMD_INTERNAL_FAILURE = (
+    ERROR_LOG_CREATE_BASE_CMD
+    + "xyz.openbmc_project.Common.Error.InternalFailure    "
+    " xyz.openbmc_project.Logging.Entry.Level.Error 0"
+)
 
-CMD_FRU_CALLOUT = ERROR_LOG_CREATE_BASE_CMD + 'xyz.openbmc_project.Sensor.Device.Error.ReadFailure \
-    xyz.openbmc_project.Logging.Entry.Level.Error 2 "TIMEOUT_IN_MSEC" "5" "CALLOUT_INVENTORY_PATH" \
-    "/xyz/openbmc_project/inventory/system/chassis/motherboard"'
+CMD_FRU_CALLOUT = (
+    ERROR_LOG_CREATE_BASE_CMD
+    + "xyz.openbmc_project.Sensor.Device.Error.ReadFailure    "
+    ' xyz.openbmc_project.Logging.Entry.Level.Error 2 "TIMEOUT_IN_MSEC" "5"'
+    ' "CALLOUT_INVENTORY_PATH"    '
+    ' "/xyz/openbmc_project/inventory/system/chassis/motherboard"'
+)
 
-CMD_PROCEDURAL_SYMBOLIC_FRU_CALLOUT = ERROR_LOG_CREATE_BASE_CMD + 'org.open_power.Logging.Error.TestError1 \
-    xyz.openbmc_project.Logging.Entry.Level.Error 0'
+CMD_PROCEDURAL_SYMBOLIC_FRU_CALLOUT = (
+    ERROR_LOG_CREATE_BASE_CMD
+    + "org.open_power.Logging.Error.TestError1    "
+    " xyz.openbmc_project.Logging.Entry.Level.Error 0"
+)
 
-CMD_INFORMATIONAL_ERROR = ERROR_LOG_CREATE_BASE_CMD + 'xyz.openbmc_project.Common.Error.TestError2 \
-    xyz.openbmc_project.Logging.Entry.Level.Informational 0'
+CMD_INFORMATIONAL_ERROR = (
+    ERROR_LOG_CREATE_BASE_CMD
+    + "xyz.openbmc_project.Common.Error.TestError2    "
+    " xyz.openbmc_project.Logging.Entry.Level.Informational 0"
+)
 
-CMD_INVENTORY_PREFIX = 'busctl get-property xyz.openbmc_project.Inventory.Manager \
-    /xyz/openbmc_project/inventory/system/chassis/motherboard'
+CMD_INVENTORY_PREFIX = (
+    "busctl get-property xyz.openbmc_project.Inventory.Manager    "
+    " /xyz/openbmc_project/inventory/system/chassis/motherboard"
+)
 
-CMD_UNRECOVERABLE_ERROR = ERROR_LOG_CREATE_BASE_CMD + 'org.open_power.Logging.Error.TestError1 \
-    xyz.openbmc_project.Logging.Entry.Level.Error 0'
+CMD_UNRECOVERABLE_ERROR = (
+    ERROR_LOG_CREATE_BASE_CMD
+    + "org.open_power.Logging.Error.TestError1    "
+    " xyz.openbmc_project.Logging.Entry.Level.Error 0"
+)
 
-CMD_PREDICTIVE_ERROR = ERROR_LOG_CREATE_BASE_CMD + \
-    'xyz.openbmc_project.Sensor.Threshold.Error.TemperatureWarningLow \
-    xyz.openbmc_project.Logging.Entry.Level.Warning 0'
+CMD_PREDICTIVE_ERROR = (
+    ERROR_LOG_CREATE_BASE_CMD
+    + "xyz.openbmc_project.Sensor.Threshold.Error.TemperatureWarningLow    "
+    " xyz.openbmc_project.Logging.Entry.Level.Warning 0"
+)
 
-CMD_UNRECOVERABLE_HOST_ERROR = ERROR_LOG_CREATE_BASE_CMD + 'xyz.openbmc_project.Host.Error.Event \
-    xyz.openbmc_project.Logging.Entry.Level.Error 1 RAWPEL /tmp/FILE_NBMC_UNRECOVERABLE'
+CMD_UNRECOVERABLE_HOST_ERROR = (
+    ERROR_LOG_CREATE_BASE_CMD
+    + "xyz.openbmc_project.Host.Error.Event    "
+    " xyz.openbmc_project.Logging.Entry.Level.Error 1 RAWPEL"
+    " /tmp/FILE_NBMC_UNRECOVERABLE"
+)
 
-CMD_INFORMATIONAL_HOST_ERROR = ERROR_LOG_CREATE_BASE_CMD + 'xyz.openbmc_project.Host.Error.Event \
-    xyz.openbmc_project.Logging.Entry.Level.Error 1 RAWPEL /tmp/FILE_HOST_INFORMATIONAL'
+CMD_INFORMATIONAL_HOST_ERROR = (
+    ERROR_LOG_CREATE_BASE_CMD
+    + "xyz.openbmc_project.Host.Error.Event    "
+    " xyz.openbmc_project.Logging.Entry.Level.Error 1 RAWPEL"
+    " /tmp/FILE_HOST_INFORMATIONAL"
+)
diff --git a/data/platform_variables.py b/data/platform_variables.py
index 94d8a53..512b8ea 100644
--- a/data/platform_variables.py
+++ b/data/platform_variables.py
@@ -4,11 +4,12 @@
  Define methods to import platform specific files.
 """
 
-import sys
-from robot.libraries.BuiltIn import BuiltIn
 import imp
-import string
 import importlib
+import string
+import sys
+
+from robot.libraries.BuiltIn import BuiltIn
 
 
 def get_service_restart_policy_services(module_name):
diff --git a/data/pldm_variables.py b/data/pldm_variables.py
index c5407d6..61b0ea1 100755
--- a/data/pldm_variables.py
+++ b/data/pldm_variables.py
@@ -4,38 +4,66 @@
 Contains PLDM-related constants.
 """
 
-PLDM_SUPPORTED_TYPES = ['base', 'platform', 'bios', 'fru', 'oem-ibm']
+PLDM_SUPPORTED_TYPES = ["base", "platform", "bios", "fru", "oem-ibm"]
 
 # PLDM types.
-PLDM_TYPE_BASE = {'VALUE': '00', 'STRING': 'base'}
-PLDM_TYPE_PLATFORM = {'VALUE': '02', 'STRING': 'platform'}
-PLDM_TYPE_BIOS = {'VALUE': '03', 'STRING': 'bios'}
-PLDM_TYPE_FRU = {'VALUE': '04', 'STRING': 'fru'}
-PLDM_TYPE_OEM = {'VALUE': '63', 'STRING': 'oem-ibm'}
-PLDM_SUPPORTED_TYPES = ['0(base)', '2(platform)', '3(bios)', '4(fru)', '63(oem-ibm)']
+PLDM_TYPE_BASE = {"VALUE": "00", "STRING": "base"}
+PLDM_TYPE_PLATFORM = {"VALUE": "02", "STRING": "platform"}
+PLDM_TYPE_BIOS = {"VALUE": "03", "STRING": "bios"}
+PLDM_TYPE_FRU = {"VALUE": "04", "STRING": "fru"}
+PLDM_TYPE_OEM = {"VALUE": "63", "STRING": "oem-ibm"}
+PLDM_SUPPORTED_TYPES = [
+    "0(base)",
+    "2(platform)",
+    "3(bios)",
+    "4(fru)",
+    "63(oem-ibm)",
+]
 
-VERSION_BASE = {'VALUE': ['f1', 'f0', 'f0', '00'], 'STRING': '1.0.0'}
-VERSION_PLATFORM = {'VALUE': ['f1', 'f2', 'f0', '00'], 'STRING': '1.2.0'}
-VERSION_BIOS = {'VALUE': ['f1', 'f1', 'f1', '00'], 'STRING': '1.0.0'}
-VERSION_FRU = {'VALUE': ['f1', 'f0', 'f0', '00'], 'STRING': '1.0.0'}
-VERSION_OEM = {'VALUE': ['f1', 'f0', 'f0', '00'], 'STRING': '1.0.0'}
+VERSION_BASE = {"VALUE": ["f1", "f0", "f0", "00"], "STRING": "1.0.0"}
+VERSION_PLATFORM = {"VALUE": ["f1", "f2", "f0", "00"], "STRING": "1.2.0"}
+VERSION_BIOS = {"VALUE": ["f1", "f1", "f1", "00"], "STRING": "1.0.0"}
+VERSION_FRU = {"VALUE": ["f1", "f0", "f0", "00"], "STRING": "1.0.0"}
+VERSION_OEM = {"VALUE": ["f1", "f0", "f0", "00"], "STRING": "1.0.0"}
 
 
-PLDM_BASE_CMDS = ['2(GetTID)', '3(GetPLDMVersion)', '4(GetPLDMTypes)', '5(GetPLDMCommands)']
-PLDM_PLATFORM_CMDS = ['57(SetStateEffecterStates)', '81(GetPDR)']
-PLDM_BIOS_CMDS = ['1(GetBIOSTable)', '7(SetBIOSAttributeCurrentValue)',
-                  '8(GetBIOSAttributeCurrentValueByHandle)', '12(GetDateTime)',
-                  '13(SetDateTime)']
-PLDM_FRU_CMDS = ['1(GetFRURecordTableMetadata)', '2(GetFRURecordTable)', '4(GetFRURecordByOption)']
-PLDM_OEM_CMDS = ['1(GetFileTable)', '4(ReadFile)', '5(WriteFile)', '6(ReadFileInToMemory)',
-                 '7(WriteFileFromMemory)', '8(ReadFileByTypeIntoMemory)',
-                 '9(WriteFileByTypeFromMemory)', '10(NewFileAvailable)',
-                 '11(ReadFileByType)', '12(WriteFileByType)', '13(FileAck)',
-                 '240(GetAlertStatus)']
+PLDM_BASE_CMDS = [
+    "2(GetTID)",
+    "3(GetPLDMVersion)",
+    "4(GetPLDMTypes)",
+    "5(GetPLDMCommands)",
+]
+PLDM_PLATFORM_CMDS = ["57(SetStateEffecterStates)", "81(GetPDR)"]
+PLDM_BIOS_CMDS = [
+    "1(GetBIOSTable)",
+    "7(SetBIOSAttributeCurrentValue)",
+    "8(GetBIOSAttributeCurrentValueByHandle)",
+    "12(GetDateTime)",
+    "13(SetDateTime)",
+]
+PLDM_FRU_CMDS = [
+    "1(GetFRURecordTableMetadata)",
+    "2(GetFRURecordTable)",
+    "4(GetFRURecordByOption)",
+]
+PLDM_OEM_CMDS = [
+    "1(GetFileTable)",
+    "4(ReadFile)",
+    "5(WriteFile)",
+    "6(ReadFileInToMemory)",
+    "7(WriteFileFromMemory)",
+    "8(ReadFileByTypeIntoMemory)",
+    "9(WriteFileByTypeFromMemory)",
+    "10(NewFileAvailable)",
+    "11(ReadFileByType)",
+    "12(WriteFileByType)",
+    "13(FileAck)",
+    "240(GetAlertStatus)",
+]
 
 # PLDM command format.
 
-'''
+"""
 e.g. : GetPLDMVersion usage
 
 pldmtool base GetPLDMVersion -t <pldm_type>
@@ -44,46 +72,49 @@
 
 base->0,platform->2,bios->3,fru->4
 
-'''
-CMD_GETPLDMVERSION = 'base GetPLDMVersion -t %s'
+"""
+CMD_GETPLDMVERSION = "base GetPLDMVersion -t %s"
 
-'''
+"""
 e.g. : PLDM raw command usage
 
 pldmtool raw -d 0x80 0x00 0x03 0x00 0x00 0x00 0x00 0x01 0x00
 
 pldm raw -d 0x<header> 0x<pldm_type> 0x<pldm_cmd_type> 0x<payload_data>
-'''
+"""
 
-CMD_PLDMTOOL_RAW = 'raw -d 0x80' + '0x%s' + ' ' + '0x%s'
+CMD_PLDMTOOL_RAW = "raw -d 0x80" + "0x%s" + " " + "0x%s"
 
 
 # PLDM command payload data.
 
-PAYLOAD_GetPLDMVersion = \
-    ' 0x00 0x00 0x00 0x00 0x%s 0x%s'    # %(TransferOperationFlag, PLDMType)
+PAYLOAD_GetPLDMVersion = (  # %(TransferOperationFlag, PLDMType)
+    " 0x00 0x00 0x00 0x00 0x%s 0x%s"
+)
 
 
-'''
+"""
 e.g. : SetDateTime usage
 
 pldmtool bios SetDateTime -d <YYYYMMDDHHMMSS>
 
-'''
-CMD_SETDATETIME = 'bios SetDateTime -d %s'
+"""
+CMD_SETDATETIME = "bios SetDateTime -d %s"
 
 
-CMD_GETPDR = 'platform GetPDR -d %s'
+CMD_GETPDR = "platform GetPDR -d %s"
 
-'''
+"""
 e.g. : SetStateEffecterStates usage
 
 pldmtool platform GetPDR -i <effter_handle> -c <count> -d <effecterID, effecterState>
 
 pldmtool platform SetStateEffecterStates -i 1 -c 1 -d 1 1
-'''
+"""
 
-CMD_SETSTATEEFFECTERSTATES = 'platform SetStateEffecterStates -i %s -c %s -d %s'
+CMD_SETSTATEEFFECTERSTATES = (
+    "platform SetStateEffecterStates -i %s -c %s -d %s"
+)
 
 # GetPDR parsed response message for record handle.
 # Dictionary value array holds the expected output for record handle 1, 2.
@@ -93,98 +124,137 @@
 #      Only record handle 0, 1, 2 are supported as of now.
 
 RESPONSE_DICT_GETPDR_SETSTATEEFFECTER = {
-    'PDRHeaderVersion': [1],
-    'PDRType': ['State Effecter PDR'],
-    'recordChangeNumber': [0],
-    'effecterID': [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
-    'entityType': ['Virtual Machine Manager', 'System chassis (main enclosure)',
-                   'System Firmware', 'Processor Module', '32801(OEM)',
-                   'Management Controller', '24577(OEM)'],
-    'entityInstanceNumber': [0, 1, 2, 3, 4],
-    'containerID': [0, 1],
-    'effecterSemanticID': [0],
-    'effecterInit': ['noInit'],
-    'effecterDescriptionPDR': [False],
-    'compositeEffecterCount': [1]}
+    "PDRHeaderVersion": [1],
+    "PDRType": ["State Effecter PDR"],
+    "recordChangeNumber": [0],
+    "effecterID": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
+    "entityType": [
+        "Virtual Machine Manager",
+        "System chassis (main enclosure)",
+        "System Firmware",
+        "Processor Module",
+        "32801(OEM)",
+        "Management Controller",
+        "24577(OEM)",
+    ],
+    "entityInstanceNumber": [0, 1, 2, 3, 4],
+    "containerID": [0, 1],
+    "effecterSemanticID": [0],
+    "effecterInit": ["noInit"],
+    "effecterDescriptionPDR": [False],
+    "compositeEffecterCount": [1],
+}
 
 RESPONSE_DICT_GETPDR_FRURECORDSETIDENTIFIER = {
-    'PDRHeaderVersion': [1],
-    'PDRType': ['FRU Record Set PDR'],
-    'recordChangeNumber': [0],
-    'dataLength': [10],
-    'entityType': ['System Board', 'Chassis front panel board (control panel)',
-                   'Management Controller', 'OEM', 'Power converter',
-                   'System (logical)', 'System chassis (main enclosure)',
-                   'Chassis front panel board (control panel)',
-                   'Processor Module', 'Memory Module', 'Power Supply',
-                   '24576(OEM)', '60(OEM)', 'Processor', '142(OEM)'],
-    'containerID': [0, 1, 2, 3]}
+    "PDRHeaderVersion": [1],
+    "PDRType": ["FRU Record Set PDR"],
+    "recordChangeNumber": [0],
+    "dataLength": [10],
+    "entityType": [
+        "System Board",
+        "Chassis front panel board (control panel)",
+        "Management Controller",
+        "OEM",
+        "Power converter",
+        "System (logical)",
+        "System chassis (main enclosure)",
+        "Chassis front panel board (control panel)",
+        "Processor Module",
+        "Memory Module",
+        "Power Supply",
+        "24576(OEM)",
+        "60(OEM)",
+        "Processor",
+        "142(OEM)",
+    ],
+    "containerID": [0, 1, 2, 3],
+}
 
 RESPONSE_DICT_GETPDR_PDRENTITYASSOCIATION = {
-    'PDRHeaderVersion': [1],
-    'PDRType': ['Entity Association PDR'],
-    'recordChangeNumber': [0],
-    'containerID': [1, 2, 3],
-    'associationtype': ['Physical'],
-    'containerentityType': ['System Board', 'System (logical)',
-                            'System chassis (main enclosure)']}
+    "PDRHeaderVersion": [1],
+    "PDRType": ["Entity Association PDR"],
+    "recordChangeNumber": [0],
+    "containerID": [1, 2, 3],
+    "associationtype": ["Physical"],
+    "containerentityType": [
+        "System Board",
+        "System (logical)",
+        "System chassis (main enclosure)",
+    ],
+}
 
 RESPONSE_DICT_GETPDR_STATESENSORPDR = {
-    'entityType': ['Communication Channel', 'Connector', 'Processor Module',
-                   '32774(OEM)', '57346(OEM)', '57347(OEM)', '32801(OEM)',
-                   '91(OEM)', '5(OEM)', '24577(OEM)'],
-    'sensorInit': ['noInit'],
-    'sensorAuxiliaryNamesPDR': [False]}
+    "entityType": [
+        "Communication Channel",
+        "Connector",
+        "Processor Module",
+        "32774(OEM)",
+        "57346(OEM)",
+        "57347(OEM)",
+        "32801(OEM)",
+        "91(OEM)",
+        "5(OEM)",
+        "24577(OEM)",
+    ],
+    "sensorInit": ["noInit"],
+    "sensorAuxiliaryNamesPDR": [False],
+}
 
 RESPONSE_DICT_GETPDR_TERMINUSLOCATORPDR = {
-    'PDRHeaderVersion': [1],
-    'PDRType': ['Terminus Locator PDR'],
-    'recordChangeNumber': [0],
-    'validity': ['valid'],
-    'TID': [0, 1, 208],
-    'containerID': [0, 1],
-    'terminusLocatorType': ['MCTP_EID'],
-    'terminusLocatorValueSize': [1]}
+    "PDRHeaderVersion": [1],
+    "PDRType": ["Terminus Locator PDR"],
+    "recordChangeNumber": [0],
+    "validity": ["valid"],
+    "TID": [0, 1, 208],
+    "containerID": [0, 1],
+    "terminusLocatorType": ["MCTP_EID"],
+    "terminusLocatorValueSize": [1],
+}
 
 RESPONSE_DICT_GETPDR_NUMERICEFFECTERPDR = {
-    'PDRHeaderVersion': [1],
-    'PDRType': ['Numeric Effecter PDR'],
-    'recordChangeNumber': [0],
-    'entityInstanceNumber': [0, 1],
-    'containerID': [0],
-    'effecterSemanticID': [0],
-    'effecterInit': [0],
-    'effecterAuxiliaryNames': [False],
-    'baseUnit': [0, 72, 21],
-    'unitModifier': [0],
-    'baseOEMUnitHandle': [0],
-    'auxUnit': [0],
-    'auxUnitModifier': [0],
-    'auxrateUnit': [0],
-    'auxOEMUnitHandle': [0],
-    'resolution': [1, 0],
-    'offset': [0],
-    'accuracy': [0],
-    'plusTolerance': [0],
-    'minusTolerance': [0],
-    'stateTransitionInterval': [0],
-    'TransitionInterval': [0],
-    'minSettable': [0],
-    'rangeFieldSupport': [0],
-    'nominalValue': [0],
-    'normalMax': [0],
-    'normalMin': [0],
-    'ratedMax': [0],
-    'ratedMin': [0]}
+    "PDRHeaderVersion": [1],
+    "PDRType": ["Numeric Effecter PDR"],
+    "recordChangeNumber": [0],
+    "entityInstanceNumber": [0, 1],
+    "containerID": [0],
+    "effecterSemanticID": [0],
+    "effecterInit": [0],
+    "effecterAuxiliaryNames": [False],
+    "baseUnit": [0, 72, 21],
+    "unitModifier": [0],
+    "baseOEMUnitHandle": [0],
+    "auxUnit": [0],
+    "auxUnitModifier": [0],
+    "auxrateUnit": [0],
+    "auxOEMUnitHandle": [0],
+    "resolution": [1, 0],
+    "offset": [0],
+    "accuracy": [0],
+    "plusTolerance": [0],
+    "minusTolerance": [0],
+    "stateTransitionInterval": [0],
+    "TransitionInterval": [0],
+    "minSettable": [0],
+    "rangeFieldSupport": [0],
+    "nominalValue": [0],
+    "normalMax": [0],
+    "normalMin": [0],
+    "ratedMax": [0],
+    "ratedMin": [0],
+}
 
 PLDM_PDR_TYPES = {
-    'PLDM_STATE_EFFECTER_PDR': 'State Effecter PDR',
-    'PLDM_PDR_FRU_RECORD_SET': 'FRU Record Set PDR',
-    'PLDM_PDR_ENTITY_ASSOCIATION': 'Entity Association PDR',
-    'PLDM_STATE_SENSOR_PDR': 'State Sensor PDR',
-    'PLDM_NUMERIC_EFFECTER_PDR': 'Numeric Effecter PDR',
-    'PLDM_TERMINUS_LOCATOR_PDR': 'Terminus Locator PDR',
-    'PLDM_COMPACT_NUMERIC_SENSOR_PDR': '21'}
+    "PLDM_STATE_EFFECTER_PDR": "State Effecter PDR",
+    "PLDM_PDR_FRU_RECORD_SET": "FRU Record Set PDR",
+    "PLDM_PDR_ENTITY_ASSOCIATION": "Entity Association PDR",
+    "PLDM_STATE_SENSOR_PDR": "State Sensor PDR",
+    "PLDM_NUMERIC_EFFECTER_PDR": "Numeric Effecter PDR",
+    "PLDM_TERMINUS_LOCATOR_PDR": "Terminus Locator PDR",
+    "PLDM_COMPACT_NUMERIC_SENSOR_PDR": "21",
+}
 
 RESPONSE_LIST_GETBIOSTABLE_ATTRVALTABLE = [
-    'BIOSString', 'BIOSInteger', 'BIOSEnumeration']
+    "BIOSString",
+    "BIOSInteger",
+    "BIOSEnumeration",
+]
diff --git a/data/variables.py b/data/variables.py
index 2c9933e..55d513f 100755
--- a/data/variables.py
+++ b/data/variables.py
@@ -1,235 +1,245 @@
 import os
+
 from robot.libraries.BuiltIn import BuiltIn
 
-OPENBMC_BASE_URI = '/xyz/openbmc_project/'
-OPENBMC_BASE_DBUS = 'xyz.openbmc_project.'
+OPENBMC_BASE_URI = "/xyz/openbmc_project/"
+OPENBMC_BASE_DBUS = "xyz.openbmc_project."
 
 # Generic Dbus commands.
 OPENBMC_DBUS_GET_PROPERTY = "busctl get-property "
 OPENBMC_DBUS_SET_PROPERTY = "busctl set-property "
 
 # org open power base URI.
-OPENPOWER_BASE_URI = '/org/open_power/'
-OPENPOWER_CONTROL = OPENPOWER_BASE_URI + 'control/'
-OPENPOWER_SENSORS = OPENPOWER_BASE_URI + 'sensors/'
+OPENPOWER_BASE_URI = "/org/open_power/"
+OPENPOWER_CONTROL = OPENPOWER_BASE_URI + "control/"
+OPENPOWER_SENSORS = OPENPOWER_BASE_URI + "sensors/"
 
 # REST URI base endpoint paths.
-CONTROL_URI = OPENBMC_BASE_URI + 'control/'
+CONTROL_URI = OPENBMC_BASE_URI + "control/"
 # Continue to keep to support legacy code.
-SETTINGS_URI = '/org/openbmc/settings/'
-WATCHDOG_URI = OPENBMC_BASE_URI + 'watchdog/'
-TIME_MANAGER_URI = OPENBMC_BASE_URI + 'time/'
-NETWORK_MANAGER = OPENBMC_BASE_URI + 'network/'
-NETWORK_RESOURCE = 'xyz.openbmc_project.Network.IP.Protocol.IPv4'
+SETTINGS_URI = "/org/openbmc/settings/"
+WATCHDOG_URI = OPENBMC_BASE_URI + "watchdog/"
+TIME_MANAGER_URI = OPENBMC_BASE_URI + "time/"
+NETWORK_MANAGER = OPENBMC_BASE_URI + "network/"
+NETWORK_RESOURCE = "xyz.openbmc_project.Network.IP.Protocol.IPv4"
 # SNMP
-SNMP_MANAGER_URI = NETWORK_MANAGER + 'snmp/manager/'
+SNMP_MANAGER_URI = NETWORK_MANAGER + "snmp/manager/"
 # Sensors base variables.
-SENSORS_URI = OPENBMC_BASE_URI + 'sensors/'
+SENSORS_URI = OPENBMC_BASE_URI + "sensors/"
 # Thermal Control base variables
-THERMAL_CONTROL_URI = CONTROL_URI + 'thermal/0'
-THERMAL_METRICS = 'ThermalSubsystem/ThermalMetrics'
+THERMAL_CONTROL_URI = CONTROL_URI + "thermal/0"
+THERMAL_METRICS = "ThermalSubsystem/ThermalMetrics"
 
-COMPONENT_NAME_OF_POWER_SUPPLY = 'powersupply'
+COMPONENT_NAME_OF_POWER_SUPPLY = "powersupply"
 
 # State Manager base variables
-BMC_REBOOT_TRANS = 'xyz.openbmc_project.State.BMC.Transition.Reboot'
+BMC_REBOOT_TRANS = "xyz.openbmc_project.State.BMC.Transition.Reboot"
 
-HOST_POWEROFF_TRANS = 'xyz.openbmc_project.State.Host.Transition.Off'
-HOST_POWERON_TRANS = 'xyz.openbmc_project.State.Host.Transition.On'
-HOST_REBOOT_TRANS = 'xyz.openbmc_project.State.Host.Transition.Reboot'
-HOST_POWEROFF_STATE = 'xyz.openbmc_project.State.Host.HostState.Off'
-HOST_POWERON_STATE = 'xyz.openbmc_project.State.Host.HostState.Running'
+HOST_POWEROFF_TRANS = "xyz.openbmc_project.State.Host.Transition.Off"
+HOST_POWERON_TRANS = "xyz.openbmc_project.State.Host.Transition.On"
+HOST_REBOOT_TRANS = "xyz.openbmc_project.State.Host.Transition.Reboot"
+HOST_POWEROFF_STATE = "xyz.openbmc_project.State.Host.HostState.Off"
+HOST_POWERON_STATE = "xyz.openbmc_project.State.Host.HostState.Running"
 
-CHASSIS_POWEROFF_TRANS = 'xyz.openbmc_project.State.Chassis.Transition.Off'
-CHASSIS_POWERON_TRANS = 'xyz.openbmc_project.State.Chassis.Transition.On'
-CHASSIS_POWEROFF_STATE = 'xyz.openbmc_project.State.Chassis.PowerState.Off'
-CHASSIS_POWERON_STATE = 'xyz.openbmc_project.State.Chassis.PowerState.On'
+CHASSIS_POWEROFF_TRANS = "xyz.openbmc_project.State.Chassis.Transition.Off"
+CHASSIS_POWERON_TRANS = "xyz.openbmc_project.State.Chassis.Transition.On"
+CHASSIS_POWEROFF_STATE = "xyz.openbmc_project.State.Chassis.PowerState.Off"
+CHASSIS_POWERON_STATE = "xyz.openbmc_project.State.Chassis.PowerState.On"
 
 # State Manager URI variables.
-SYSTEM_STATE_URI = OPENBMC_BASE_URI + 'state/'
-BMC_STATE_URI = OPENBMC_BASE_URI + 'state/bmc0/'
-HOST_STATE_URI = OPENBMC_BASE_URI + 'state/host0/'
-CHASSIS_STATE_URI = OPENBMC_BASE_URI + 'state/chassis0/'
-HOST_WATCHDOG_URI = OPENBMC_BASE_URI + 'watchdog/host0/'
+SYSTEM_STATE_URI = OPENBMC_BASE_URI + "state/"
+BMC_STATE_URI = OPENBMC_BASE_URI + "state/bmc0/"
+HOST_STATE_URI = OPENBMC_BASE_URI + "state/host0/"
+CHASSIS_STATE_URI = OPENBMC_BASE_URI + "state/chassis0/"
+HOST_WATCHDOG_URI = OPENBMC_BASE_URI + "watchdog/host0/"
 
 # OS state for x86 architecture
-OS_STATE_URI = OPENBMC_BASE_URI + 'state/os/'
+OS_STATE_URI = OPENBMC_BASE_URI + "state/os/"
 
 # Logging URI variables
-BMC_LOGGING_URI = OPENBMC_BASE_URI + 'logging/'
-BMC_LOGGING_ENTRY = BMC_LOGGING_URI + 'entry/'
-REDFISH_BMC_LOGGING_ENTRY = '/redfish/v1/Systems/system/LogServices/EventLog/Entries/'
+BMC_LOGGING_URI = OPENBMC_BASE_URI + "logging/"
+BMC_LOGGING_ENTRY = BMC_LOGGING_URI + "entry/"
+REDFISH_BMC_LOGGING_ENTRY = (
+    "/redfish/v1/Systems/system/LogServices/EventLog/Entries/"
+)
 
 
 # Software manager version
-SOFTWARE_VERSION_URI = OPENBMC_BASE_URI + 'software/'
-ACTIVE = 'xyz.openbmc_project.Software.Activation.Activations.Active'
-READY = 'xyz.openbmc_project.Software.Activation.Activations.Ready'
-INVALID = 'xyz.openbmc_project.Software.Activation.Activations.Invalid'
-ACTIVATING = 'xyz.openbmc_project.Software.Activation.Activations.Activating'
-NOTREADY = 'xyz.openbmc_project.Software.Activation.Activations.NotReady'
-FAILED = 'xyz.openbmc_project.Software.Activation.Activations.Failed'
+SOFTWARE_VERSION_URI = OPENBMC_BASE_URI + "software/"
+ACTIVE = "xyz.openbmc_project.Software.Activation.Activations.Active"
+READY = "xyz.openbmc_project.Software.Activation.Activations.Ready"
+INVALID = "xyz.openbmc_project.Software.Activation.Activations.Invalid"
+ACTIVATING = "xyz.openbmc_project.Software.Activation.Activations.Activating"
+NOTREADY = "xyz.openbmc_project.Software.Activation.Activations.NotReady"
+FAILED = "xyz.openbmc_project.Software.Activation.Activations.Failed"
 
-SOFTWARE_ACTIVATION = 'xyz.openbmc_project.Software.Activation'
-REQUESTED_ACTIVATION = SOFTWARE_ACTIVATION + '.RequestedActivations'
-REQUESTED_ACTIVE = REQUESTED_ACTIVATION + '.Active'
-REQUESTED_NONE = REQUESTED_ACTIVATION + '.None'
+SOFTWARE_ACTIVATION = "xyz.openbmc_project.Software.Activation"
+REQUESTED_ACTIVATION = SOFTWARE_ACTIVATION + ".RequestedActivations"
+REQUESTED_ACTIVE = REQUESTED_ACTIVATION + ".Active"
+REQUESTED_NONE = REQUESTED_ACTIVATION + ".None"
 
-SOFTWARE_PURPOSE = 'xyz.openbmc_project.Software.Version.VersionPurpose'
-VERSION_PURPOSE_HOST = SOFTWARE_PURPOSE + '.Host'
-VERSION_PURPOSE_BMC = SOFTWARE_PURPOSE + '.BMC'
-VERSION_PURPOSE_SYSTEM = SOFTWARE_PURPOSE + '.System'
+SOFTWARE_PURPOSE = "xyz.openbmc_project.Software.Version.VersionPurpose"
+VERSION_PURPOSE_HOST = SOFTWARE_PURPOSE + ".Host"
+VERSION_PURPOSE_BMC = SOFTWARE_PURPOSE + ".BMC"
+VERSION_PURPOSE_SYSTEM = SOFTWARE_PURPOSE + ".System"
 
 # Image Upload Directory Path
-IMAGE_UPLOAD_DIR_PATH = '/tmp/images/'
+IMAGE_UPLOAD_DIR_PATH = "/tmp/images/"
 
 # Inventory URI variables
-HOST_INVENTORY_URI = OPENBMC_BASE_URI + 'inventory/'
-CHASSIS_INVENTORY_URI = HOST_INVENTORY_URI + 'system/chassis/'
-MOTHERBOARD_INVENTORY_URI = CHASSIS_INVENTORY_URI + 'motherboard/'
+HOST_INVENTORY_URI = OPENBMC_BASE_URI + "inventory/"
+CHASSIS_INVENTORY_URI = HOST_INVENTORY_URI + "system/chassis/"
+MOTHERBOARD_INVENTORY_URI = CHASSIS_INVENTORY_URI + "motherboard/"
 
 # Led URI variable
-LED_GROUPS_URI = OPENBMC_BASE_URI + 'led/groups/'
-LED_PHYSICAL_URI = OPENBMC_BASE_URI + 'led/physical/'
-LED_LAMP_TEST_ASSERTED_URI = LED_GROUPS_URI + 'lamp_test/'
-LED_PHYSICAL_PS0_URI = LED_PHYSICAL_URI + 'cffps1_69/'
-LED_PHYSICAL_PS1_URI = LED_PHYSICAL_URI + 'cffps1_68/'
-LED_PHYSICAL_FAN0_URI = LED_PHYSICAL_URI + 'fan0/'
-LED_PHYSICAL_FAN2_URI = LED_PHYSICAL_URI + 'fan2/'
-LED_PHYSICAL_FAN3_URI = LED_PHYSICAL_URI + 'fan3/'
+LED_GROUPS_URI = OPENBMC_BASE_URI + "led/groups/"
+LED_PHYSICAL_URI = OPENBMC_BASE_URI + "led/physical/"
+LED_LAMP_TEST_ASSERTED_URI = LED_GROUPS_URI + "lamp_test/"
+LED_PHYSICAL_PS0_URI = LED_PHYSICAL_URI + "cffps1_69/"
+LED_PHYSICAL_PS1_URI = LED_PHYSICAL_URI + "cffps1_68/"
+LED_PHYSICAL_FAN0_URI = LED_PHYSICAL_URI + "fan0/"
+LED_PHYSICAL_FAN2_URI = LED_PHYSICAL_URI + "fan2/"
+LED_PHYSICAL_FAN3_URI = LED_PHYSICAL_URI + "fan3/"
 
 # Host control URI variables.
-CONTROL_HOST_URI = OPENBMC_BASE_URI + 'control/host0/'
+CONTROL_HOST_URI = OPENBMC_BASE_URI + "control/host0/"
 
 # Power restore variables.
-POWER_RESTORE_URI = CONTROL_HOST_URI + 'power_restore_policy'
-CONTROL_DBUS_BASE = 'xyz.openbmc_project.Control.'
+POWER_RESTORE_URI = CONTROL_HOST_URI + "power_restore_policy"
+CONTROL_DBUS_BASE = "xyz.openbmc_project.Control."
 
-RESTORE_LAST_STATE = CONTROL_DBUS_BASE + 'Power.RestorePolicy.Policy.Restore'
-ALWAYS_POWER_ON = CONTROL_DBUS_BASE + 'Power.RestorePolicy.Policy.AlwaysOn'
-ALWAYS_POWER_OFF = CONTROL_DBUS_BASE + 'Power.RestorePolicy.Policy.AlwaysOff'
+RESTORE_LAST_STATE = CONTROL_DBUS_BASE + "Power.RestorePolicy.Policy.Restore"
+ALWAYS_POWER_ON = CONTROL_DBUS_BASE + "Power.RestorePolicy.Policy.AlwaysOn"
+ALWAYS_POWER_OFF = CONTROL_DBUS_BASE + "Power.RestorePolicy.Policy.AlwaysOff"
 
 # Dump URI variables.
-REST_DUMP_URI = OPENBMC_BASE_URI + 'dump/bmc/'
-DUMP_ENTRY_URI = REST_DUMP_URI + 'entry/'
+REST_DUMP_URI = OPENBMC_BASE_URI + "dump/bmc/"
+DUMP_ENTRY_URI = REST_DUMP_URI + "entry/"
 DUMP_DOWNLOAD_URI = "/download/dump/"
 # The path on the BMC where dumps are stored.
 DUMP_DIR_PATH = "/var/lib/phosphor-debug-collector/"
 
 # Boot progress variables.
-STATE_DBUS_BASE = 'xyz.openbmc_project.State.'
-OS_BOOT_START = STATE_DBUS_BASE + 'Boot.Progress.ProgressStages.OSStart'
-OS_BOOT_OFF = STATE_DBUS_BASE + 'Boot.Progress.ProgressStages.Unspecified'
-OS_BOOT_PCI = STATE_DBUS_BASE + 'Boot.Progress.ProgressStages.PCIInit'
-OS_BOOT_SECPCI = STATE_DBUS_BASE + \
-    'Boot.Progress.ProgressStages.SecondaryProcInit'
-OS_BOOT_MEM = STATE_DBUS_BASE + 'Boot.Progress.ProgressStages.MemoryInit'
-OS_BOOT_MOTHERBOARD = STATE_DBUS_BASE + \
-    'Boot.Progress.ProgressStages.MotherboardInit'
+STATE_DBUS_BASE = "xyz.openbmc_project.State."
+OS_BOOT_START = STATE_DBUS_BASE + "Boot.Progress.ProgressStages.OSStart"
+OS_BOOT_OFF = STATE_DBUS_BASE + "Boot.Progress.ProgressStages.Unspecified"
+OS_BOOT_PCI = STATE_DBUS_BASE + "Boot.Progress.ProgressStages.PCIInit"
+OS_BOOT_SECPCI = (
+    STATE_DBUS_BASE + "Boot.Progress.ProgressStages.SecondaryProcInit"
+)
+OS_BOOT_MEM = STATE_DBUS_BASE + "Boot.Progress.ProgressStages.MemoryInit"
+OS_BOOT_MOTHERBOARD = (
+    STATE_DBUS_BASE + "Boot.Progress.ProgressStages.MotherboardInit"
+)
 OPENBMC_DBUS_BMC_STATE = STATE_DBUS_BASE + "BMC"
 
 # OperatingSystem status variables.
-OS_BOOT_COMPLETE = STATE_DBUS_BASE + \
-    'OperatingSystem.Status.OSStatus.BootComplete'
-OS_BOOT_CDROM = STATE_DBUS_BASE + 'OperatingSystem.Status.OSStatus.CDROMBoot'
-OS_BOOT_ROM = STATE_DBUS_BASE + 'OperatingSystem.Status.OSStatus.ROMBoot'
-OS_BOOT_PXE = STATE_DBUS_BASE + 'OperatingSystem.Status.OSStatus.PXEBoot'
-OS_BOOT_CBoot = STATE_DBUS_BASE + 'OperatingSystem.Status.OSStatus.CBoot'
-OS_BOOT_DiagBoot = STATE_DBUS_BASE + 'OperatingSystem.Status.OSStatus.DiagBoot'
+OS_BOOT_COMPLETE = (
+    STATE_DBUS_BASE + "OperatingSystem.Status.OSStatus.BootComplete"
+)
+OS_BOOT_CDROM = STATE_DBUS_BASE + "OperatingSystem.Status.OSStatus.CDROMBoot"
+OS_BOOT_ROM = STATE_DBUS_BASE + "OperatingSystem.Status.OSStatus.ROMBoot"
+OS_BOOT_PXE = STATE_DBUS_BASE + "OperatingSystem.Status.OSStatus.PXEBoot"
+OS_BOOT_CBoot = STATE_DBUS_BASE + "OperatingSystem.Status.OSStatus.CBoot"
+OS_BOOT_DiagBoot = STATE_DBUS_BASE + "OperatingSystem.Status.OSStatus.DiagBoot"
 
 # Boot variables.
-BOOT_SOURCE_DEFAULT = 'xyz.openbmc_project.Control.Boot.Source.Sources.Default'
-BOOT_SOURCE_NETWORK = 'xyz.openbmc_project.Control.Boot.Source.Sources.Network'
-BOOT_SOURCE_DISK = 'xyz.openbmc_project.Control.Boot.Source.Sources.Disk'
-BOOT_SOURCE_CDROM = 'xyz.openbmc_project.Control.Boot.Source.Sources.ExternalMedia'
-BOOT_MODE_SAFE = 'xyz.openbmc_project.Control.Boot.Mode.Modes.Safe'
-BOOT_MODE_SETUP = 'xyz.openbmc_project.Control.Boot.Mode.Modes.Setup'
-BOOT_MODE_REGULAR = 'xyz.openbmc_project.Control.Boot.Mode.Modes.Regular'
-BOOT_TYPE_LEGACY = 'xyz.openbmc_project.Control.Boot.Type.Types.Legacy'
-BOOT_TYPE_EFI = 'xyz.openbmc_project.Control.Boot.Type.Types.EFI'
+BOOT_SOURCE_DEFAULT = "xyz.openbmc_project.Control.Boot.Source.Sources.Default"
+BOOT_SOURCE_NETWORK = "xyz.openbmc_project.Control.Boot.Source.Sources.Network"
+BOOT_SOURCE_DISK = "xyz.openbmc_project.Control.Boot.Source.Sources.Disk"
+BOOT_SOURCE_CDROM = (
+    "xyz.openbmc_project.Control.Boot.Source.Sources.ExternalMedia"
+)
+BOOT_MODE_SAFE = "xyz.openbmc_project.Control.Boot.Mode.Modes.Safe"
+BOOT_MODE_SETUP = "xyz.openbmc_project.Control.Boot.Mode.Modes.Setup"
+BOOT_MODE_REGULAR = "xyz.openbmc_project.Control.Boot.Mode.Modes.Regular"
+BOOT_TYPE_LEGACY = "xyz.openbmc_project.Control.Boot.Type.Types.Legacy"
+BOOT_TYPE_EFI = "xyz.openbmc_project.Control.Boot.Type.Types.EFI"
 
 # Time variables.
-TIME_DBUS_BASE = 'xyz.openbmc_project.Time.'
-BMC_OWNER = TIME_DBUS_BASE + 'Owner.Owners.BMC'
-HOST_OWNER = TIME_DBUS_BASE + 'Owner.Owners.Host'
-SPLIT_OWNER = TIME_DBUS_BASE + 'Owner.Owners.Split'
-BOTH_OWNER = TIME_DBUS_BASE + 'Owner.Owners.Both'
-NTP_MODE = TIME_DBUS_BASE + 'Synchronization.Method.NTP'
-MANUAL_MODE = TIME_DBUS_BASE + 'Synchronization.Method.Manual'
+TIME_DBUS_BASE = "xyz.openbmc_project.Time."
+BMC_OWNER = TIME_DBUS_BASE + "Owner.Owners.BMC"
+HOST_OWNER = TIME_DBUS_BASE + "Owner.Owners.Host"
+SPLIT_OWNER = TIME_DBUS_BASE + "Owner.Owners.Split"
+BOTH_OWNER = TIME_DBUS_BASE + "Owner.Owners.Both"
+NTP_MODE = TIME_DBUS_BASE + "Synchronization.Method.NTP"
+MANUAL_MODE = TIME_DBUS_BASE + "Synchronization.Method.Manual"
 
 # User manager variable.
-BMC_USER_URI = OPENBMC_BASE_URI + 'user/'
+BMC_USER_URI = OPENBMC_BASE_URI + "user/"
 
 # LDAP User manager variable.
-BMC_LDAP_URI = BMC_USER_URI + 'ldap'
+BMC_LDAP_URI = BMC_USER_URI + "ldap"
 
 # The path on the BMC where signed keys are stored.
 ACTIVATION_DIR_PATH = "/etc/activationdata/"
 
 # Redfish variables.
-REDFISH_BASE_URI = '/redfish/v1/'
-REDFISH_SESSION = REDFISH_BASE_URI + 'SessionService/Sessions'
-REDFISH_SESSION_URI = 'SessionService/Sessions/'
-REDFISH_NW_ETH0 = 'Managers/bmc/EthernetInterfaces/eth0/'
+REDFISH_BASE_URI = "/redfish/v1/"
+REDFISH_SESSION = REDFISH_BASE_URI + "SessionService/Sessions"
+REDFISH_SESSION_URI = "SessionService/Sessions/"
+REDFISH_NW_ETH0 = "Managers/bmc/EthernetInterfaces/eth0/"
 REDFISH_NW_ETH0_URI = REDFISH_BASE_URI + REDFISH_NW_ETH0
-REDFISH_NW_ETH_IFACE = REDFISH_BASE_URI + 'Managers/bmc/EthernetInterfaces/'
-REDFISH_NW_PROTOCOL = 'Managers/bmc/NetworkProtocol'
+REDFISH_NW_ETH_IFACE = REDFISH_BASE_URI + "Managers/bmc/EthernetInterfaces/"
+REDFISH_NW_PROTOCOL = "Managers/bmc/NetworkProtocol"
 REDFISH_NW_PROTOCOL_URI = REDFISH_BASE_URI + REDFISH_NW_PROTOCOL
-REDFISH_ACCOUNTS_SERVICE = 'AccountService/'
+REDFISH_ACCOUNTS_SERVICE = "AccountService/"
 REDFISH_ACCOUNTS_SERVICE_URI = REDFISH_BASE_URI + REDFISH_ACCOUNTS_SERVICE
-REDFISH_ACCOUNTS = 'AccountService/Accounts/'
+REDFISH_ACCOUNTS = "AccountService/Accounts/"
 REDFISH_ACCOUNTS_URI = REDFISH_BASE_URI + REDFISH_ACCOUNTS
-REDFISH_HTTPS_CERTIFICATE = 'Managers/bmc/NetworkProtocol/HTTPS/Certificates'
+REDFISH_HTTPS_CERTIFICATE = "Managers/bmc/NetworkProtocol/HTTPS/Certificates"
 REDFISH_HTTPS_CERTIFICATE_URI = REDFISH_BASE_URI + REDFISH_HTTPS_CERTIFICATE
-REDFISH_LDAP_CERTIFICATE = 'AccountService/LDAP/Certificates'
+REDFISH_LDAP_CERTIFICATE = "AccountService/LDAP/Certificates"
 REDFISH_LDAP_CERTIFICATE_URI = REDFISH_BASE_URI + REDFISH_LDAP_CERTIFICATE
-REDFISH_CA_CERTIFICATE = 'Managers/bmc/Truststore/Certificates'
+REDFISH_CA_CERTIFICATE = "Managers/bmc/Truststore/Certificates"
 REDFISH_CA_CERTIFICATE_URI = REDFISH_BASE_URI + REDFISH_CA_CERTIFICATE
-REDFISH_CHASSIS_URI = REDFISH_BASE_URI + 'Chassis/'
-REDFISH_CHASSIS_THERMAL = 'chassis/Thermal/'
+REDFISH_CHASSIS_URI = REDFISH_BASE_URI + "Chassis/"
+REDFISH_CHASSIS_THERMAL = "chassis/Thermal/"
 REDFISH_CHASSIS_THERMAL_URI = REDFISH_CHASSIS_URI + REDFISH_CHASSIS_THERMAL
-REDFISH_CHASSIS_POWER = 'chassis/Power/'
+REDFISH_CHASSIS_POWER = "chassis/Power/"
 REDFISH_CHASSIS_POWER_URI = REDFISH_CHASSIS_URI + REDFISH_CHASSIS_POWER
-REDFISH_CHASSIS_SENSORS = 'chassis/Sensors'
+REDFISH_CHASSIS_SENSORS = "chassis/Sensors"
 REDFISH_CHASSIS_SENSORS_URI = REDFISH_CHASSIS_URI + REDFISH_CHASSIS_SENSORS
-REDFISH_BMC_DUMP = 'Managers/bmc/LogServices/Dump/Entries'
+REDFISH_BMC_DUMP = "Managers/bmc/LogServices/Dump/Entries"
 REDFISH_DUMP_URI = REDFISH_BASE_URI + REDFISH_BMC_DUMP
 
 # Boot options and URI variables.
-POWER_ON = 'On'
+POWER_ON = "On"
 POWER_GRACEFUL_OFF = "GracefulShutdown"
 POWER_GRACEFUL_RESTART = "GracefulRestart"
-POWER_FORCE_OFF = 'ForceOff'
+POWER_FORCE_OFF = "ForceOff"
 
-REDFISH_POWER = 'Systems/system/Actions/ComputerSystem.Reset'
+REDFISH_POWER = "Systems/system/Actions/ComputerSystem.Reset"
 REDFISH_POWER_URI = REDFISH_BASE_URI + REDFISH_POWER
 
 # rsyslog variables.
-REMOTE_LOGGING_URI = OPENBMC_BASE_URI + 'logging/config/remote/'
+REMOTE_LOGGING_URI = OPENBMC_BASE_URI + "logging/config/remote/"
 
 # Certificate variables.
-SERVER_CERTIFICATE_URI = OPENBMC_BASE_URI + 'certs/server/https'
-CLIENT_CERTIFICATE_URI = OPENBMC_BASE_URI + 'certs/client/ldap'
-CA_CERTIFICATE_URI = OPENBMC_BASE_URI + 'certs/authority/ldap'
+SERVER_CERTIFICATE_URI = OPENBMC_BASE_URI + "certs/server/https"
+CLIENT_CERTIFICATE_URI = OPENBMC_BASE_URI + "certs/client/ldap"
+CA_CERTIFICATE_URI = OPENBMC_BASE_URI + "certs/authority/ldap"
 
 # EventLog variables.
-SYSTEM_BASE_URI = REDFISH_BASE_URI + 'Systems/system/'
-EVENT_LOG_URI = SYSTEM_BASE_URI + 'LogServices/EventLog/'
-DUMP_URI = SYSTEM_BASE_URI + 'LogServices/Dump/'
+SYSTEM_BASE_URI = REDFISH_BASE_URI + "Systems/system/"
+EVENT_LOG_URI = SYSTEM_BASE_URI + "LogServices/EventLog/"
+DUMP_URI = SYSTEM_BASE_URI + "LogServices/Dump/"
 
-BIOS_ATTR_URI = SYSTEM_BASE_URI + 'Bios'
-BIOS_ATTR_SETTINGS_URI = BIOS_ATTR_URI + '/Settings'
+BIOS_ATTR_URI = SYSTEM_BASE_URI + "Bios"
+BIOS_ATTR_SETTINGS_URI = BIOS_ATTR_URI + "/Settings"
 
-'''
+"""
   QEMU HTTPS variable:
 
   By default lib/resource.robot AUTH URI construct is as
   ${AUTH_URI}   https://${OPENBMC_HOST}${AUTH_SUFFIX}
   ${AUTH_SUFFIX} is populated here by default EMPTY else
   the port from the OS environment
-'''
+"""
 
-AUTH_SUFFIX = ":" + BuiltIn().get_variable_value("${HTTPS_PORT}", os.getenv('HTTPS_PORT', '443'))
+AUTH_SUFFIX = ":" + BuiltIn().get_variable_value(
+    "${HTTPS_PORT}", os.getenv("HTTPS_PORT", "443")
+)
 
 # Here contains a list of valid Properties bases on fru_type after a boot.
 INVENTORY_ITEMS = {
@@ -253,7 +263,6 @@
         "present",
         "version",
     ],
-
     "DIMM": [
         "Asset Tag",
         "Custom Field 1",
diff --git a/data/vpd_variables.py b/data/vpd_variables.py
index dc310c8..3392b6a 100644
--- a/data/vpd_variables.py
+++ b/data/vpd_variables.py
@@ -25,5 +25,5 @@
     },
     "/system/chassis/motherboard/vdd_vrm1": {
         "type": "xyz.openbmc_project.Inventory.Item.Vrm"
-    }
+    },
 }
diff --git a/extended/run_keyword.py b/extended/run_keyword.py
index 2d1ab51..dcab7ab 100644
--- a/extended/run_keyword.py
+++ b/extended/run_keyword.py
@@ -4,13 +4,13 @@
 This module is the python counterpart to run_keyword.robot.
 """
 
-import gen_print as gp
-import gen_robot_valid as grv
-import gen_robot_utils as gru
-
-from robot.libraries.BuiltIn import BuiltIn
 import re
 
+import gen_print as gp
+import gen_robot_utils as gru
+import gen_robot_valid as grv
+from robot.libraries.BuiltIn import BuiltIn
+
 
 def setup():
     r"""
@@ -42,10 +42,7 @@
     gp.qprint_pgm_footer()
 
 
-def my_run_keywords(lib_file_path,
-                    keyword_string,
-                    quiet=0,
-                    test_mode=0):
+def my_run_keywords(lib_file_path, keyword_string, quiet=0, test_mode=0):
     r"""
     Run the keywords in the keyword string.
 
@@ -92,10 +89,10 @@
         del lib_file_path_list[0]
     for lib_file_path in lib_file_path_list:
         if lib_file_path.endswith(".py"):
-            gp.dprint_issuing("import_library(\"" + lib_file_path + "\")")
+            gp.dprint_issuing('import_library("' + lib_file_path + '")')
             BuiltIn().import_library(lib_file_path)
         else:
-            gp.dprint_issuing("my_import_resource(\"" + lib_file_path + "\")")
+            gp.dprint_issuing('my_import_resource("' + lib_file_path + '")')
             gru.my_import_resource(lib_file_path)
 
     # The user can pass multiple keyword strings by separating them with " ; ".
diff --git a/ffdc/collect_ffdc.py b/ffdc/collect_ffdc.py
index ca232f1..09b4be8 100644
--- a/ffdc/collect_ffdc.py
+++ b/ffdc/collect_ffdc.py
@@ -4,16 +4,16 @@
 CLI FFDC Collector.
 """
 
-from ffdc_collector import ffdc_collector
-
 import os
 import sys
+
 import click
+from ffdc_collector import ffdc_collector
 
 # ---------Set sys.path for cli command execution---------------------------------------
 # Absolute path to openbmc-test-automation/ffdc
 abs_path = os.path.abspath(os.path.dirname(sys.argv[0]))
-full_path = abs_path.split('ffdc')[0]
+full_path = abs_path.split("ffdc")[0]
 
 sys.path.append(full_path)
 # Walk path and append to sys.path
@@ -22,63 +22,105 @@
         sys.path.append(os.path.join(root, found_dir))
 
 
-@click.command(context_settings=dict(help_option_names=['-h', '--help']))
-@click.option('-r', '--remote',
-              help="Hostname/IP of the remote host")
-@click.option('-u', '--username',
-              help="Username of the remote host.")
-@click.option('-p', '--password',
-              help="Password of the remote host.")
-@click.option('-c', '--config', default=abs_path + "/ffdc_config.yaml",
-              show_default=True, help="YAML Configuration file for log collection.")
-@click.option('-l', '--location', default="/tmp",
-              show_default=True, help="Location to save logs")
-@click.option('-t', '--type',
-              help="OS type of the remote (targeting) host. OPENBMC, RHEL, UBUNTU, SLES, AIX")
-@click.option('-rp', '--protocol', default="ALL",
-              show_default=True,
-              help="Select protocol to communicate with remote host.")
-@click.option('-e', '--env_vars', show_default=True,
-              help="Environment variables e.g: {'var':value}")
-@click.option('-ec', '--econfig', show_default=True,
-              help="Predefine environment variables, refer en_vars_template.yaml ")
-@click.option('--log_level', default="INFO",
-              show_default=True,
-              help="Log level (CRITICAL, ERROR, WARNING, INFO, DEBUG)")
-def cli_ffdc(remote,
-             username,
-             password,
-             config,
-             location,
-             type,
-             protocol,
-             env_vars,
-             econfig,
-             log_level):
+@click.command(context_settings=dict(help_option_names=["-h", "--help"]))
+@click.option("-r", "--remote", help="Hostname/IP of the remote host")
+@click.option("-u", "--username", help="Username of the remote host.")
+@click.option("-p", "--password", help="Password of the remote host.")
+@click.option(
+    "-c",
+    "--config",
+    default=abs_path + "/ffdc_config.yaml",
+    show_default=True,
+    help="YAML Configuration file for log collection.",
+)
+@click.option(
+    "-l",
+    "--location",
+    default="/tmp",
+    show_default=True,
+    help="Location to save logs",
+)
+@click.option(
+    "-t",
+    "--type",
+    help=(
+        "OS type of the remote (targeting) host. OPENBMC, RHEL, UBUNTU,"
+        " SLES, AIX"
+    ),
+)
+@click.option(
+    "-rp",
+    "--protocol",
+    default="ALL",
+    show_default=True,
+    help="Select protocol to communicate with remote host.",
+)
+@click.option(
+    "-e",
+    "--env_vars",
+    show_default=True,
+    help="Environment variables e.g: {'var':value}",
+)
+@click.option(
+    "-ec",
+    "--econfig",
+    show_default=True,
+    help="Predefine environment variables, refer en_vars_template.yaml ",
+)
+@click.option(
+    "--log_level",
+    default="INFO",
+    show_default=True,
+    help="Log level (CRITICAL, ERROR, WARNING, INFO, DEBUG)",
+)
+def cli_ffdc(
+    remote,
+    username,
+    password,
+    config,
+    location,
+    type,
+    protocol,
+    env_vars,
+    econfig,
+    log_level,
+):
     r"""
     Stand alone CLI to generate and collect FFDC from the selected target.
     """
 
-    click.echo("\n********** FFDC (First Failure Data Collection) Starts **********")
+    click.echo(
+        "\n********** FFDC (First Failure Data Collection) Starts **********"
+    )
 
     if input_options_ok(remote, username, password, config, type):
-        this_ffdc = ffdc_collector(remote,
-                                   username,
-                                   password,
-                                   config,
-                                   location,
-                                   type,
-                                   protocol,
-                                   env_vars,
-                                   econfig,
-                                   log_level)
+        this_ffdc = ffdc_collector(
+            remote,
+            username,
+            password,
+            config,
+            location,
+            type,
+            protocol,
+            env_vars,
+            econfig,
+            log_level,
+        )
         this_ffdc.collect_ffdc()
 
         if len(os.listdir(this_ffdc.ffdc_dir_path)) == 0:
-            click.echo("\n\tFFDC Collection from " + remote + " has failed.\n\n")
+            click.echo(
+                "\n\tFFDC Collection from " + remote + " has failed.\n\n"
+            )
         else:
-            click.echo(str("\n\t" + str(len(os.listdir(this_ffdc.ffdc_dir_path)))
-                           + " files were retrieved from " + remote))
+            click.echo(
+                str(
+                    "\n\t"
+                    + str(len(os.listdir(this_ffdc.ffdc_dir_path)))
+                    + " files were retrieved from "
+                    + remote
+                )
+            )
             click.echo("\tFiles are stored in " + this_ffdc.ffdc_dir_path)
 
         click.echo("\tTotal elapsed time " + this_ffdc.elapsed_time + "\n\n")
@@ -94,27 +136,37 @@
 
     if not remote:
         all_options_ok = False
-        print("\
-        \n\tERROR: Name/IP of the remote host is not specified in CLI options.")
+        print(
+            "        \n\tERROR: Name/IP of the remote host is not specified in"
+            " CLI options."
+        )
     if not username:
         all_options_ok = False
-        print("\
-        \n\tERROR: User of the remote host is not specified in CLI options.")
+        print(
+            "        \n\tERROR: User of the remote host is not specified in"
+            " CLI options."
+        )
     if not password:
         all_options_ok = False
-        print("\
-        \n\tERROR: Password of the user remote host is not specified in CLI options.")
+        print(
+            "        \n\tERROR: Password of the user remote host is not"
+            " specified in CLI options."
+        )
     if not type:
         all_options_ok = False
-        print("\
-        \n\tERROR: Remote host os type is not specified in CLI options.")
+        print(
+            "        \n\tERROR: Remote host os type is not specified in CLI"
+            " options."
+        )
     if not os.path.isfile(config):
         all_options_ok = False
-        print("\
-        \n\tERROR: Config file %s is not found.  Please verify path and filename." % config)
+        print(
+            "        \n\tERROR: Config file %s is not found.  Please verify"
+            " path and filename." % config
+        )
 
     return all_options_ok
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     cli_ffdc()
diff --git a/ffdc/ffdc_collector.py b/ffdc/ffdc_collector.py
index 9afd0ad..34f6d89 100644
--- a/ffdc/ffdc_collector.py
+++ b/ffdc/ffdc_collector.py
@@ -4,19 +4,19 @@
 See class prolog below for details.
 """
 
-from ssh_utility import SSHRemoteclient
-from telnet_utility import TelnetRemoteclient
+import json
+import logging
+import os
+import platform
+import re
+import subprocess
+import sys
+import time
 from errno import EACCES, EPERM
 
-import os
-import re
-import sys
 import yaml
-import json
-import time
-import logging
-import platform
-import subprocess
+from ssh_utility import SSHRemoteclient
+from telnet_utility import TelnetRemoteclient
 
 script_dir = os.path.dirname(os.path.abspath(__file__))
 sys.path.append(script_dir)
@@ -42,11 +42,11 @@
        - arg1
        - arg2
 """
-plugin_dir = __file__.split(__file__.split("/")[-1])[0] + '/plugins'
+plugin_dir = __file__.split(__file__.split("/")[-1])[0] + "/plugins"
 sys.path.append(plugin_dir)
 try:
     for module in os.listdir(plugin_dir):
-        if module == '__init__.py' or module[-3:] != '.py':
+        if module == "__init__.py" or module[-3:] != ".py":
             continue
         plugin_module = "plugins." + module[:-3]
         # To access the module plugin.<module name>.<function>
@@ -98,34 +98,35 @@
 global_plugin_type_list = []
 
 # Path where logs are to be stored or written.
-global_log_store_path = ''
+global_log_store_path = ""
 
 # Plugin error state defaults.
 plugin_error_dict = {
-    'exit_on_error': False,
-    'continue_on_error': False,
+    "exit_on_error": False,
+    "continue_on_error": False,
 }
 
 
 class ffdc_collector:
-
     r"""
     Execute commands from configuration file to collect log files.
     Fetch and store generated files at the specified location.
 
     """
 
-    def __init__(self,
-                 hostname,
-                 username,
-                 password,
-                 ffdc_config,
-                 location,
-                 remote_type,
-                 remote_protocol,
-                 env_vars,
-                 econfig,
-                 log_level):
+    def __init__(
+        self,
+        hostname,
+        username,
+        password,
+        ffdc_config,
+        location,
+        remote_type,
+        remote_protocol,
+        env_vars,
+        econfig,
+        log_level,
+    ):
         r"""
         Description of argument(s):
 
@@ -155,7 +156,7 @@
         self.env_vars = env_vars
         self.econfig = econfig
         self.start_time = 0
-        self.elapsed_time = ''
+        self.elapsed_time = ""
         self.logger = None
 
         # Set prefix values for scp files and directory.
@@ -173,7 +174,7 @@
 
         if self.verify_script_env():
             # Load default or user define YAML configuration file.
-            with open(self.ffdc_config, 'r') as file:
+            with open(self.ffdc_config, "r") as file:
                 try:
                     self.ffdc_actions = yaml.load(file, Loader=yaml.SafeLoader)
                 except yaml.YAMLError as e:
@@ -182,7 +183,9 @@
 
             if self.target_type not in self.ffdc_actions.keys():
                 self.logger.error(
-                    "\n\tERROR: %s is not listed in %s.\n\n" % (self.target_type, self.ffdc_config))
+                    "\n\tERROR: %s is not listed in %s.\n\n"
+                    % (self.target_type, self.ffdc_config)
+                )
                 sys.exit(-1)
         else:
             sys.exit(-1)
@@ -193,43 +196,62 @@
         self.load_env()
 
     def verify_script_env(self):
-
         # Import to log version
         import click
         import paramiko
 
         run_env_ok = True
 
-        redfishtool_version = self.run_tool_cmd('redfishtool -V').split(' ')[2].strip('\n')
-        ipmitool_version = self.run_tool_cmd('ipmitool -V').split(' ')[2]
+        redfishtool_version = (
+            self.run_tool_cmd("redfishtool -V").split(" ")[2].strip("\n")
+        )
+        ipmitool_version = self.run_tool_cmd("ipmitool -V").split(" ")[2]
 
         self.logger.info("\n\t---- Script host environment ----")
-        self.logger.info("\t{:<10}  {:<10}".format('Script hostname', os.uname()[1]))
-        self.logger.info("\t{:<10}  {:<10}".format('Script host os', platform.platform()))
-        self.logger.info("\t{:<10}  {:>10}".format('Python', platform.python_version()))
-        self.logger.info("\t{:<10}  {:>10}".format('PyYAML', yaml.__version__))
-        self.logger.info("\t{:<10}  {:>10}".format('click', click.__version__))
-        self.logger.info("\t{:<10}  {:>10}".format('paramiko', paramiko.__version__))
-        self.logger.info("\t{:<10}  {:>9}".format('redfishtool', redfishtool_version))
-        self.logger.info("\t{:<10}  {:>12}".format('ipmitool', ipmitool_version))
+        self.logger.info(
+            "\t{:<10}  {:<10}".format("Script hostname", os.uname()[1])
+        )
+        self.logger.info(
+            "\t{:<10}  {:<10}".format("Script host os", platform.platform())
+        )
+        self.logger.info(
+            "\t{:<10}  {:>10}".format("Python", platform.python_version())
+        )
+        self.logger.info("\t{:<10}  {:>10}".format("PyYAML", yaml.__version__))
+        self.logger.info("\t{:<10}  {:>10}".format("click", click.__version__))
+        self.logger.info(
+            "\t{:<10}  {:>10}".format("paramiko", paramiko.__version__)
+        )
+        self.logger.info(
+            "\t{:<10}  {:>9}".format("redfishtool", redfishtool_version)
+        )
+        self.logger.info(
+            "\t{:<10}  {:>12}".format("ipmitool", ipmitool_version)
+        )
 
-        if eval(yaml.__version__.replace('.', ',')) < (5, 3, 0):
-            self.logger.error("\n\tERROR: Python or python packages do not meet minimum version requirement.")
-            self.logger.error("\tERROR: PyYAML version 5.3.0 or higher is needed.\n")
+        if eval(yaml.__version__.replace(".", ",")) < (5, 3, 0):
+            self.logger.error(
+                "\n\tERROR: Python or python packages do not meet minimum"
+                " version requirement."
+            )
+            self.logger.error(
+                "\tERROR: PyYAML version 5.3.0 or higher is needed.\n"
+            )
             run_env_ok = False
 
         self.logger.info("\t---- End script host environment ----")
         return run_env_ok
 
-    def script_logging(self,
-                       log_level_attr):
+    def script_logging(self, log_level_attr):
         r"""
         Create logger
 
         """
         self.logger = logging.getLogger()
         self.logger.setLevel(log_level_attr)
-        log_file_handler = logging.FileHandler(self.ffdc_dir_path + "collector.log")
+        log_file_handler = logging.FileHandler(
+            self.ffdc_dir_path + "collector.log"
+        )
 
         stdout_handler = logging.StreamHandler(sys.stdout)
         self.logger.addHandler(log_file_handler)
@@ -245,11 +267,15 @@
         """
         response = os.system("ping -c 1 %s  2>&1 >/dev/null" % self.hostname)
         if response == 0:
-            self.logger.info("\n\t[Check] %s is ping-able.\t\t [OK]" % self.hostname)
+            self.logger.info(
+                "\n\t[Check] %s is ping-able.\t\t [OK]" % self.hostname
+            )
             return True
         else:
             self.logger.error(
-                "\n\tERROR: %s is not ping-able. FFDC collection aborted.\n" % self.hostname)
+                "\n\tERROR: %s is not ping-able. FFDC collection aborted.\n"
+                % self.hostname
+            )
             sys.exit(-1)
 
     def collect_ffdc(self):
@@ -258,7 +284,9 @@
 
         """
 
-        self.logger.info("\n\t---- Start communicating with %s ----" % self.hostname)
+        self.logger.info(
+            "\n\t---- Start communicating with %s ----" % self.hostname
+        )
         self.start_time = time.time()
 
         # Find the list of target and protocol supported.
@@ -270,24 +298,40 @@
                 continue
 
             for k, v in config_dict[target_type].items():
-                if config_dict[target_type][k]['PROTOCOL'][0] not in check_protocol_list:
-                    check_protocol_list.append(config_dict[target_type][k]['PROTOCOL'][0])
+                if (
+                    config_dict[target_type][k]["PROTOCOL"][0]
+                    not in check_protocol_list
+                ):
+                    check_protocol_list.append(
+                        config_dict[target_type][k]["PROTOCOL"][0]
+                    )
 
-        self.logger.info("\n\t %s protocol type: %s" % (self.target_type, check_protocol_list))
+        self.logger.info(
+            "\n\t %s protocol type: %s"
+            % (self.target_type, check_protocol_list)
+        )
 
         verified_working_protocol = self.verify_protocol(check_protocol_list)
 
         if verified_working_protocol:
-            self.logger.info("\n\t---- Completed protocol pre-requisite check ----\n")
+            self.logger.info(
+                "\n\t---- Completed protocol pre-requisite check ----\n"
+            )
 
         # Verify top level directory exists for storage
         self.validate_local_store(self.location)
 
-        if ((self.remote_protocol not in verified_working_protocol) and (self.remote_protocol != 'ALL')):
-            self.logger.info("\n\tWorking protocol list: %s" % verified_working_protocol)
+        if (self.remote_protocol not in verified_working_protocol) and (
+            self.remote_protocol != "ALL"
+        ):
+            self.logger.info(
+                "\n\tWorking protocol list: %s" % verified_working_protocol
+            )
             self.logger.error(
-                '\tERROR: Requested protocol %s is not in working protocol list.\n'
-                % self.remote_protocol)
+                "\tERROR: Requested protocol %s is not in working protocol"
+                " list.\n"
+                % self.remote_protocol
+            )
             sys.exit(-1)
         else:
             self.generate_ffdc(verified_working_protocol)
@@ -298,12 +342,15 @@
 
         """
 
-        self.ssh_remoteclient = SSHRemoteclient(self.hostname,
-                                                self.username,
-                                                self.password)
+        self.ssh_remoteclient = SSHRemoteclient(
+            self.hostname, self.username, self.password
+        )
 
         if self.ssh_remoteclient.ssh_remoteclient_login():
-            self.logger.info("\n\t[Check] %s SSH connection established.\t [OK]" % self.hostname)
+            self.logger.info(
+                "\n\t[Check] %s SSH connection established.\t [OK]"
+                % self.hostname
+            )
 
             # Check scp connection.
             # If scp connection fails,
@@ -311,21 +358,30 @@
             self.ssh_remoteclient.scp_connection()
             return True
         else:
-            self.logger.info("\n\t[Check] %s SSH connection.\t [NOT AVAILABLE]" % self.hostname)
+            self.logger.info(
+                "\n\t[Check] %s SSH connection.\t [NOT AVAILABLE]"
+                % self.hostname
+            )
             return False
 
     def telnet_to_target_system(self):
         r"""
         Open a telnet connection to targeted system.
         """
-        self.telnet_remoteclient = TelnetRemoteclient(self.hostname,
-                                                      self.username,
-                                                      self.password)
+        self.telnet_remoteclient = TelnetRemoteclient(
+            self.hostname, self.username, self.password
+        )
         if self.telnet_remoteclient.tn_remoteclient_login():
-            self.logger.info("\n\t[Check] %s Telnet connection established.\t [OK]" % self.hostname)
+            self.logger.info(
+                "\n\t[Check] %s Telnet connection established.\t [OK]"
+                % self.hostname
+            )
             return True
         else:
-            self.logger.info("\n\t[Check] %s Telnet connection.\t [NOT AVAILABLE]" % self.hostname)
+            self.logger.info(
+                "\n\t[Check] %s Telnet connection.\t [NOT AVAILABLE]"
+                % self.hostname
+            )
             return False
 
     def generate_ffdc(self, working_protocol_list):
@@ -336,8 +392,12 @@
         working_protocol_list    list of confirmed working protocols to connect to remote host.
         """
 
-        self.logger.info("\n\t---- Executing commands on " + self.hostname + " ----")
-        self.logger.info("\n\tWorking protocol list: %s" % working_protocol_list)
+        self.logger.info(
+            "\n\t---- Executing commands on " + self.hostname + " ----"
+        )
+        self.logger.info(
+            "\n\tWorking protocol list: %s" % working_protocol_list
+        )
 
         config_dict = self.ffdc_actions
         for target_type in config_dict.keys():
@@ -345,40 +405,47 @@
                 continue
 
             self.logger.info("\n\tFFDC Path: %s " % self.ffdc_dir_path)
-            global_plugin_dict['global_log_store_path'] = self.ffdc_dir_path
+            global_plugin_dict["global_log_store_path"] = self.ffdc_dir_path
             self.logger.info("\tSystem Type: %s" % target_type)
             for k, v in config_dict[target_type].items():
-
-                if self.remote_protocol not in working_protocol_list \
-                        and self.remote_protocol != 'ALL':
+                if (
+                    self.remote_protocol not in working_protocol_list
+                    and self.remote_protocol != "ALL"
+                ):
                     continue
 
-                protocol = config_dict[target_type][k]['PROTOCOL'][0]
+                protocol = config_dict[target_type][k]["PROTOCOL"][0]
 
                 if protocol not in working_protocol_list:
                     continue
 
                 if protocol in working_protocol_list:
-                    if protocol == 'SSH' or protocol == 'SCP':
+                    if protocol == "SSH" or protocol == "SCP":
                         self.protocol_ssh(protocol, target_type, k)
-                    elif protocol == 'TELNET':
+                    elif protocol == "TELNET":
                         self.protocol_telnet(target_type, k)
-                    elif protocol == 'REDFISH' or protocol == 'IPMI' or protocol == 'SHELL':
+                    elif (
+                        protocol == "REDFISH"
+                        or protocol == "IPMI"
+                        or protocol == "SHELL"
+                    ):
                         self.protocol_execute(protocol, target_type, k)
                 else:
-                    self.logger.error("\n\tERROR: %s is not available for %s." % (protocol, self.hostname))
+                    self.logger.error(
+                        "\n\tERROR: %s is not available for %s."
+                        % (protocol, self.hostname)
+                    )
 
         # Close network connection after collecting all files
-        self.elapsed_time = time.strftime("%H:%M:%S", time.gmtime(time.time() - self.start_time))
+        self.elapsed_time = time.strftime(
+            "%H:%M:%S", time.gmtime(time.time() - self.start_time)
+        )
         if self.ssh_remoteclient:
             self.ssh_remoteclient.ssh_remoteclient_disconnect()
         if self.telnet_remoteclient:
             self.telnet_remoteclient.tn_remoteclient_disconnect()
 
-    def protocol_ssh(self,
-                     protocol,
-                     target_type,
-                     sub_type):
+    def protocol_ssh(self, protocol, target_type, sub_type):
         r"""
         Perform actions using SSH and SCP protocols.
 
@@ -388,39 +455,50 @@
         sub_type            Group type of commands.
         """
 
-        if protocol == 'SCP':
+        if protocol == "SCP":
             self.group_copy(self.ffdc_actions[target_type][sub_type])
         else:
-            self.collect_and_copy_ffdc(self.ffdc_actions[target_type][sub_type])
+            self.collect_and_copy_ffdc(
+                self.ffdc_actions[target_type][sub_type]
+            )
 
-    def protocol_telnet(self,
-                        target_type,
-                        sub_type):
+    def protocol_telnet(self, target_type, sub_type):
         r"""
         Perform actions using telnet protocol.
         Description of argument(s):
         target_type          OS Type of remote host.
         """
-        self.logger.info("\n\t[Run] Executing commands on %s using %s" % (self.hostname, 'TELNET'))
+        self.logger.info(
+            "\n\t[Run] Executing commands on %s using %s"
+            % (self.hostname, "TELNET")
+        )
         telnet_files_saved = []
         progress_counter = 0
-        list_of_commands = self.ffdc_actions[target_type][sub_type]['COMMANDS']
+        list_of_commands = self.ffdc_actions[target_type][sub_type]["COMMANDS"]
         for index, each_cmd in enumerate(list_of_commands, start=0):
             command_txt, command_timeout = self.unpack_command(each_cmd)
-            result = self.telnet_remoteclient.execute_command(command_txt, command_timeout)
+            result = self.telnet_remoteclient.execute_command(
+                command_txt, command_timeout
+            )
             if result:
                 try:
-                    targ_file = self.ffdc_actions[target_type][sub_type]['FILES'][index]
+                    targ_file = self.ffdc_actions[target_type][sub_type][
+                        "FILES"
+                    ][index]
                 except IndexError:
                     targ_file = command_txt
                     self.logger.warning(
-                        "\n\t[WARN] Missing filename to store data from telnet %s." % each_cmd)
-                    self.logger.warning("\t[WARN] Data will be stored in %s." % targ_file)
-                targ_file_with_path = (self.ffdc_dir_path
-                                       + self.ffdc_prefix
-                                       + targ_file)
+                        "\n\t[WARN] Missing filename to store data from"
+                        " telnet %s." % each_cmd
+                    )
+                    self.logger.warning(
+                        "\t[WARN] Data will be stored in %s." % targ_file
+                    )
+                targ_file_with_path = (
+                    self.ffdc_dir_path + self.ffdc_prefix + targ_file
+                )
                 # Creates a new file
-                with open(targ_file_with_path, 'w') as fp:
+                with open(targ_file_with_path, "w") as fp:
                     fp.write(result)
                     fp.close
                     telnet_files_saved.append(targ_file)
@@ -430,10 +508,7 @@
         for file in telnet_files_saved:
             self.logger.info("\n\t\tSuccessfully save file " + file + ".")
 
-    def protocol_execute(self,
-                         protocol,
-                         target_type,
-                         sub_type):
+    def protocol_execute(self, protocol, target_type, sub_type):
         r"""
         Perform actions for a given protocol.
 
@@ -443,27 +518,36 @@
         sub_type            Group type of commands.
         """
 
-        self.logger.info("\n\t[Run] Executing commands to %s using %s" % (self.hostname, protocol))
+        self.logger.info(
+            "\n\t[Run] Executing commands to %s using %s"
+            % (self.hostname, protocol)
+        )
         executed_files_saved = []
         progress_counter = 0
-        list_of_cmd = self.get_command_list(self.ffdc_actions[target_type][sub_type])
+        list_of_cmd = self.get_command_list(
+            self.ffdc_actions[target_type][sub_type]
+        )
         for index, each_cmd in enumerate(list_of_cmd, start=0):
             plugin_call = False
             if isinstance(each_cmd, dict):
-                if 'plugin' in each_cmd:
+                if "plugin" in each_cmd:
                     # If the error is set and plugin explicitly
                     # requested to skip execution on error..
-                    if plugin_error_dict['exit_on_error'] and \
-                            self.plugin_error_check(each_cmd['plugin']):
-                        self.logger.info("\n\t[PLUGIN-ERROR] exit_on_error: %s" %
-                                         plugin_error_dict['exit_on_error'])
-                        self.logger.info("\t[PLUGIN-SKIP] %s" %
-                                         each_cmd['plugin'][0])
+                    if plugin_error_dict[
+                        "exit_on_error"
+                    ] and self.plugin_error_check(each_cmd["plugin"]):
+                        self.logger.info(
+                            "\n\t[PLUGIN-ERROR] exit_on_error: %s"
+                            % plugin_error_dict["exit_on_error"]
+                        )
+                        self.logger.info(
+                            "\t[PLUGIN-SKIP] %s" % each_cmd["plugin"][0]
+                        )
                         continue
                     plugin_call = True
                     # call the plugin
                     self.logger.info("\n\t[PLUGIN-START]")
-                    result = self.execute_plugin_block(each_cmd['plugin'])
+                    result = self.execute_plugin_block(each_cmd["plugin"])
                     self.logger.info("\t[PLUGIN-END]\n")
             else:
                 each_cmd = self.yaml_env_and_plugin_vars_populate(each_cmd)
@@ -472,23 +556,31 @@
                 result = self.run_tool_cmd(each_cmd)
             if result:
                 try:
-                    file_name = self.get_file_list(self.ffdc_actions[target_type][sub_type])[index]
+                    file_name = self.get_file_list(
+                        self.ffdc_actions[target_type][sub_type]
+                    )[index]
                     # If file is specified as None.
                     if file_name == "None":
                         continue
-                    targ_file = self.yaml_env_and_plugin_vars_populate(file_name)
+                    targ_file = self.yaml_env_and_plugin_vars_populate(
+                        file_name
+                    )
                 except IndexError:
-                    targ_file = each_cmd.split('/')[-1]
+                    targ_file = each_cmd.split("/")[-1]
                     self.logger.warning(
-                        "\n\t[WARN] Missing filename to store data from %s." % each_cmd)
-                    self.logger.warning("\t[WARN] Data will be stored in %s." % targ_file)
+                        "\n\t[WARN] Missing filename to store data from %s."
+                        % each_cmd
+                    )
+                    self.logger.warning(
+                        "\t[WARN] Data will be stored in %s." % targ_file
+                    )
 
-                targ_file_with_path = (self.ffdc_dir_path
-                                       + self.ffdc_prefix
-                                       + targ_file)
+                targ_file_with_path = (
+                    self.ffdc_dir_path + self.ffdc_prefix + targ_file
+                )
 
                 # Creates a new file
-                with open(targ_file_with_path, 'w') as fp:
+                with open(targ_file_with_path, "w") as fp:
                     if isinstance(result, dict):
                         fp.write(json.dumps(result))
                     else:
@@ -504,9 +596,9 @@
         for file in executed_files_saved:
             self.logger.info("\n\t\tSuccessfully save file " + file + ".")
 
-    def collect_and_copy_ffdc(self,
-                              ffdc_actions_for_target_type,
-                              form_filename=False):
+    def collect_and_copy_ffdc(
+        self, ffdc_actions_for_target_type, form_filename=False
+    ):
         r"""
         Send commands in ffdc_config file to targeted system.
 
@@ -516,21 +608,32 @@
         """
 
         # Executing commands, if any
-        self.ssh_execute_ffdc_commands(ffdc_actions_for_target_type,
-                                       form_filename)
+        self.ssh_execute_ffdc_commands(
+            ffdc_actions_for_target_type, form_filename
+        )
 
         # Copying files
         if self.ssh_remoteclient.scpclient:
-            self.logger.info("\n\n\tCopying FFDC files from remote system %s.\n" % self.hostname)
+            self.logger.info(
+                "\n\n\tCopying FFDC files from remote system %s.\n"
+                % self.hostname
+            )
 
             # Retrieving files from target system
             list_of_files = self.get_file_list(ffdc_actions_for_target_type)
-            self.scp_ffdc(self.ffdc_dir_path, self.ffdc_prefix, form_filename, list_of_files)
+            self.scp_ffdc(
+                self.ffdc_dir_path,
+                self.ffdc_prefix,
+                form_filename,
+                list_of_files,
+            )
         else:
-            self.logger.info("\n\n\tSkip copying FFDC files from remote system %s.\n" % self.hostname)
+            self.logger.info(
+                "\n\n\tSkip copying FFDC files from remote system %s.\n"
+                % self.hostname
+            )
 
-    def get_command_list(self,
-                         ffdc_actions_for_target_type):
+    def get_command_list(self, ffdc_actions_for_target_type):
         r"""
         Fetch list of commands from configuration file
 
@@ -538,13 +641,12 @@
         ffdc_actions_for_target_type    commands and files for the selected remote host type.
         """
         try:
-            list_of_commands = ffdc_actions_for_target_type['COMMANDS']
+            list_of_commands = ffdc_actions_for_target_type["COMMANDS"]
         except KeyError:
             list_of_commands = []
         return list_of_commands
 
-    def get_file_list(self,
-                      ffdc_actions_for_target_type):
+    def get_file_list(self, ffdc_actions_for_target_type):
         r"""
         Fetch list of commands from configuration file
 
@@ -552,13 +654,12 @@
         ffdc_actions_for_target_type    commands and files for the selected remote host type.
         """
         try:
-            list_of_files = ffdc_actions_for_target_type['FILES']
+            list_of_files = ffdc_actions_for_target_type["FILES"]
         except KeyError:
             list_of_files = []
         return list_of_files
 
-    def unpack_command(self,
-                       command):
+    def unpack_command(self, command):
         r"""
         Unpack command from config file
 
@@ -575,9 +676,9 @@
 
         return command_txt, command_timeout
 
-    def ssh_execute_ffdc_commands(self,
-                                  ffdc_actions_for_target_type,
-                                  form_filename=False):
+    def ssh_execute_ffdc_commands(
+        self, ffdc_actions_for_target_type, form_filename=False
+    ):
         r"""
         Send commands in ffdc_config file to targeted system.
 
@@ -585,8 +686,10 @@
         ffdc_actions_for_target_type    commands and files for the selected remote host type.
         form_filename                    if true, pre-pend self.target_type to filename
         """
-        self.logger.info("\n\t[Run] Executing commands on %s using %s"
-                         % (self.hostname, ffdc_actions_for_target_type['PROTOCOL'][0]))
+        self.logger.info(
+            "\n\t[Run] Executing commands on %s using %s"
+            % (self.hostname, ffdc_actions_for_target_type["PROTOCOL"][0])
+        )
 
         list_of_commands = self.get_command_list(ffdc_actions_for_target_type)
         # If command list is empty, returns
@@ -600,12 +703,19 @@
             if form_filename:
                 command_txt = str(command_txt % self.target_type)
 
-            cmd_exit_code, err, response = \
-                self.ssh_remoteclient.execute_command(command_txt, command_timeout)
+            (
+                cmd_exit_code,
+                err,
+                response,
+            ) = self.ssh_remoteclient.execute_command(
+                command_txt, command_timeout
+            )
 
             if cmd_exit_code:
                 self.logger.warning(
-                    "\n\t\t[WARN] %s exits with code %s." % (command_txt, str(cmd_exit_code)))
+                    "\n\t\t[WARN] %s exits with code %s."
+                    % (command_txt, str(cmd_exit_code))
+                )
                 self.logger.warning("\t\t[WARN] %s " % err)
 
             progress_counter += 1
@@ -613,8 +723,7 @@
 
         self.logger.info("\n\t[Run] Commands execution completed.\t\t [OK]")
 
-    def group_copy(self,
-                   ffdc_actions_for_target_type):
+    def group_copy(self, ffdc_actions_for_target_type):
         r"""
         scp group of files (wild card) from remote host.
 
@@ -623,9 +732,14 @@
         """
 
         if self.ssh_remoteclient.scpclient:
-            self.logger.info("\n\tCopying files from remote system %s via SCP.\n" % self.hostname)
+            self.logger.info(
+                "\n\tCopying files from remote system %s via SCP.\n"
+                % self.hostname
+            )
 
-            list_of_commands = self.get_command_list(ffdc_actions_for_target_type)
+            list_of_commands = self.get_command_list(
+                ffdc_actions_for_target_type
+            )
             # If command list is empty, returns
             if not list_of_commands:
                 return
@@ -637,29 +751,42 @@
                     self.logger.error("\t\tInvalid command %s" % command)
                     continue
 
-                cmd_exit_code, err, response = \
-                    self.ssh_remoteclient.execute_command(command)
+                (
+                    cmd_exit_code,
+                    err,
+                    response,
+                ) = self.ssh_remoteclient.execute_command(command)
 
                 # If file does not exist, code take no action.
                 # cmd_exit_code is ignored for this scenario.
                 if response:
-                    scp_result = \
-                        self.ssh_remoteclient.scp_file_from_remote(response.split('\n'),
-                                                                   self.ffdc_dir_path)
+                    scp_result = self.ssh_remoteclient.scp_file_from_remote(
+                        response.split("\n"), self.ffdc_dir_path
+                    )
                     if scp_result:
-                        self.logger.info("\t\tSuccessfully copied from " + self.hostname + ':' + command)
+                        self.logger.info(
+                            "\t\tSuccessfully copied from "
+                            + self.hostname
+                            + ":"
+                            + command
+                        )
                 else:
                     self.logger.info("\t\t%s has no result" % command)
 
         else:
-            self.logger.info("\n\n\tSkip copying files from remote system %s.\n" % self.hostname)
+            self.logger.info(
+                "\n\n\tSkip copying files from remote system %s.\n"
+                % self.hostname
+            )
 
-    def scp_ffdc(self,
-                 targ_dir_path,
-                 targ_file_prefix,
-                 form_filename,
-                 file_list=None,
-                 quiet=None):
+    def scp_ffdc(
+        self,
+        targ_dir_path,
+        targ_file_prefix,
+        form_filename,
+        file_list=None,
+        quiet=None,
+    ):
         r"""
         SCP all files in file_dict to the indicated directory on the local system.
 
@@ -676,21 +803,37 @@
             if form_filename:
                 filename = str(filename % self.target_type)
             source_file_path = filename
-            targ_file_path = targ_dir_path + targ_file_prefix + filename.split('/')[-1]
+            targ_file_path = (
+                targ_dir_path + targ_file_prefix + filename.split("/")[-1]
+            )
 
             # If source file name contains wild card, copy filename as is.
-            if '*' in source_file_path:
-                scp_result = self.ssh_remoteclient.scp_file_from_remote(source_file_path, self.ffdc_dir_path)
+            if "*" in source_file_path:
+                scp_result = self.ssh_remoteclient.scp_file_from_remote(
+                    source_file_path, self.ffdc_dir_path
+                )
             else:
-                scp_result = self.ssh_remoteclient.scp_file_from_remote(source_file_path, targ_file_path)
+                scp_result = self.ssh_remoteclient.scp_file_from_remote(
+                    source_file_path, targ_file_path
+                )
 
             if not quiet:
                 if scp_result:
                     self.logger.info(
-                        "\t\tSuccessfully copied from " + self.hostname + ':' + source_file_path + ".\n")
+                        "\t\tSuccessfully copied from "
+                        + self.hostname
+                        + ":"
+                        + source_file_path
+                        + ".\n"
+                    )
                 else:
                     self.logger.info(
-                        "\t\tFail to copy from " + self.hostname + ':' + source_file_path + ".\n")
+                        "\t\tFail to copy from "
+                        + self.hostname
+                        + ":"
+                        + source_file_path
+                        + ".\n"
+                    )
             else:
                 progress_counter += 1
                 self.print_progress(progress_counter)
@@ -709,7 +852,9 @@
         """
 
         timestr = time.strftime("%Y%m%d-%H%M%S")
-        self.ffdc_dir_path = self.location + "/" + self.hostname + "_" + timestr + "/"
+        self.ffdc_dir_path = (
+            self.location + "/" + self.hostname + "_" + timestr + "/"
+        )
         self.ffdc_prefix = timestr + "_"
         self.validate_local_store(self.ffdc_dir_path)
 
@@ -733,10 +878,14 @@
                 # PermissionError
                 if e.errno == EPERM or e.errno == EACCES:
                     self.logger.error(
-                        '\tERROR: os.makedirs %s failed with PermissionError.\n' % dir_path)
+                        "\tERROR: os.makedirs %s failed with"
+                        " PermissionError.\n" % dir_path
+                    )
                 else:
                     self.logger.error(
-                        '\tERROR: os.makedirs %s failed with %s.\n' % (dir_path, e.strerror))
+                        "\tERROR: os.makedirs %s failed with %s.\n"
+                        % (dir_path, e.strerror)
+                    )
                 sys.exit(-1)
 
     def print_progress(self, progress):
@@ -750,34 +899,47 @@
 
         sys.stdout.write("\r\t" + "+" * progress)
         sys.stdout.flush()
-        time.sleep(.1)
+        time.sleep(0.1)
 
     def verify_redfish(self):
         r"""
         Verify remote host has redfish service active
 
         """
-        redfish_parm = 'redfishtool -r ' \
-                       + self.hostname + ' -S Always raw GET /redfish/v1/'
-        return (self.run_tool_cmd(redfish_parm, True))
+        redfish_parm = (
+            "redfishtool -r "
+            + self.hostname
+            + " -S Always raw GET /redfish/v1/"
+        )
+        return self.run_tool_cmd(redfish_parm, True)
 
     def verify_ipmi(self):
         r"""
         Verify remote host has IPMI LAN service active
 
         """
-        if self.target_type == 'OPENBMC':
-            ipmi_parm = 'ipmitool -I lanplus -C 17  -U ' + self.username + ' -P ' \
-                + self.password + ' -H ' + self.hostname + ' power status'
+        if self.target_type == "OPENBMC":
+            ipmi_parm = (
+                "ipmitool -I lanplus -C 17  -U "
+                + self.username
+                + " -P "
+                + self.password
+                + " -H "
+                + self.hostname
+                + " power status"
+            )
         else:
-            ipmi_parm = 'ipmitool -I lanplus  -P ' \
-                + self.password + ' -H ' + self.hostname + ' power status'
+            ipmi_parm = (
+                "ipmitool -I lanplus  -P "
+                + self.password
+                + " -H "
+                + self.hostname
+                + " power status"
+            )
 
-        return (self.run_tool_cmd(ipmi_parm, True))
+        return self.run_tool_cmd(ipmi_parm, True)
 
-    def run_tool_cmd(self,
-                     parms_string,
-                     quiet=False):
+    def run_tool_cmd(self, parms_string, quiet=False):
         r"""
         Run CLI standard tool or scripts.
 
@@ -786,15 +948,17 @@
         quiet                do not print tool error message if True
         """
 
-        result = subprocess.run([parms_string],
-                                stdout=subprocess.PIPE,
-                                stderr=subprocess.PIPE,
-                                shell=True,
-                                universal_newlines=True)
+        result = subprocess.run(
+            [parms_string],
+            stdout=subprocess.PIPE,
+            stderr=subprocess.PIPE,
+            shell=True,
+            universal_newlines=True,
+        )
 
         if result.stderr and not quiet:
-            self.logger.error('\n\t\tERROR with %s ' % parms_string)
-            self.logger.error('\t\t' + result.stderr)
+            self.logger.error("\n\t\tERROR with %s " % parms_string)
+            self.logger.error("\t\t" + result.stderr)
 
         return result.stdout
 
@@ -811,37 +975,53 @@
             tmp_list.append("SHELL")
 
         for protocol in protocol_list:
-            if self.remote_protocol != 'ALL':
+            if self.remote_protocol != "ALL":
                 if self.remote_protocol != protocol:
                     continue
 
             # Only check SSH/SCP once for both protocols
-            if protocol == 'SSH' or protocol == 'SCP' and protocol not in tmp_list:
+            if (
+                protocol == "SSH"
+                or protocol == "SCP"
+                and protocol not in tmp_list
+            ):
                 if self.ssh_to_target_system():
                     # Add only what user asked.
-                    if self.remote_protocol != 'ALL':
+                    if self.remote_protocol != "ALL":
                         tmp_list.append(self.remote_protocol)
                     else:
-                        tmp_list.append('SSH')
-                        tmp_list.append('SCP')
+                        tmp_list.append("SSH")
+                        tmp_list.append("SCP")
 
-            if protocol == 'TELNET':
+            if protocol == "TELNET":
                 if self.telnet_to_target_system():
                     tmp_list.append(protocol)
 
-            if protocol == 'REDFISH':
+            if protocol == "REDFISH":
                 if self.verify_redfish():
                     tmp_list.append(protocol)
-                    self.logger.info("\n\t[Check] %s Redfish Service.\t\t [OK]" % self.hostname)
+                    self.logger.info(
+                        "\n\t[Check] %s Redfish Service.\t\t [OK]"
+                        % self.hostname
+                    )
                 else:
-                    self.logger.info("\n\t[Check] %s Redfish Service.\t\t [NOT AVAILABLE]" % self.hostname)
+                    self.logger.info(
+                        "\n\t[Check] %s Redfish Service.\t\t [NOT AVAILABLE]"
+                        % self.hostname
+                    )
 
-            if protocol == 'IPMI':
+            if protocol == "IPMI":
                 if self.verify_ipmi():
                     tmp_list.append(protocol)
-                    self.logger.info("\n\t[Check] %s IPMI LAN Service.\t\t [OK]" % self.hostname)
+                    self.logger.info(
+                        "\n\t[Check] %s IPMI LAN Service.\t\t [OK]"
+                        % self.hostname
+                    )
                 else:
-                    self.logger.info("\n\t[Check] %s IPMI LAN Service.\t\t [NOT AVAILABLE]" % self.hostname)
+                    self.logger.info(
+                        "\n\t[Check] %s IPMI LAN Service.\t\t [NOT AVAILABLE]"
+                        % self.hostname
+                    )
 
         return tmp_list
 
@@ -854,14 +1034,14 @@
         # Example YAML:
         # -COMMANDS:
         #    - my_command ${hostname}  ${username}   ${password}
-        os.environ['hostname'] = self.hostname
-        os.environ['username'] = self.username
-        os.environ['password'] = self.password
+        os.environ["hostname"] = self.hostname
+        os.environ["username"] = self.username
+        os.environ["password"] = self.password
 
         # Append default Env.
-        self.env_dict['hostname'] = self.hostname
-        self.env_dict['username'] = self.username
-        self.env_dict['password'] = self.password
+        self.env_dict["hostname"] = self.hostname
+        self.env_dict["username"] = self.username
+        self.env_dict["password"] = self.password
 
         try:
             tmp_env_dict = {}
@@ -873,14 +1053,14 @@
                     self.env_dict[key] = str(value)
 
             if self.econfig:
-                with open(self.econfig, 'r') as file:
+                with open(self.econfig, "r") as file:
                     try:
                         tmp_env_dict = yaml.load(file, Loader=yaml.SafeLoader)
                     except yaml.YAMLError as e:
                         self.logger.error(e)
                         sys.exit(-1)
                 # Export ENV vars.
-                for key, value in tmp_env_dict['env_params'].items():
+                for key, value in tmp_env_dict["env_params"].items():
                     os.environ[key] = str(value)
                     self.env_dict[key] = str(value)
         except json.decoder.JSONDecodeError as e:
@@ -893,8 +1073,9 @@
             if k.lower().find("password") != -1:
                 hidden_text = []
                 hidden_text.append(v)
-                password_regex = '(' +\
-                    '|'.join([re.escape(x) for x in hidden_text]) + ')'
+                password_regex = (
+                    "(" + "|".join([re.escape(x) for x in hidden_text]) + ")"
+                )
                 mask_dict[k] = re.sub(password_regex, "********", v)
 
         self.logger.info(json.dumps(mask_dict, indent=8, sort_keys=False))
@@ -914,16 +1095,18 @@
             self.logger.debug("\tCall func: %s" % eval_string)
             result = eval(eval_string)
             self.logger.info("\treturn: %s" % str(result))
-        except (ValueError,
-                SyntaxError,
-                NameError,
-                AttributeError,
-                TypeError) as e:
+        except (
+            ValueError,
+            SyntaxError,
+            NameError,
+            AttributeError,
+            TypeError,
+        ) as e:
             self.logger.error("\tERROR: execute_python_eval: %s" % e)
             # Set the plugin error state.
-            plugin_error_dict['exit_on_error'] = True
+            plugin_error_dict["exit_on_error"] = True
             self.logger.info("\treturn: PLUGIN_EVAL_ERROR")
-            return 'PLUGIN_EVAL_ERROR'
+            return "PLUGIN_EVAL_ERROR"
 
         return result
 
@@ -956,18 +1139,18 @@
                 - arg2
         """
         try:
-            idx = self.key_index_list_dict('plugin_name', plugin_cmd_list)
-            plugin_name = plugin_cmd_list[idx]['plugin_name']
+            idx = self.key_index_list_dict("plugin_name", plugin_cmd_list)
+            plugin_name = plugin_cmd_list[idx]["plugin_name"]
             # Equal separator means plugin function returns result.
-            if ' = ' in plugin_name:
+            if " = " in plugin_name:
                 # Ex. ['result', 'plugin.foo_func.my_func']
-                plugin_name_args = plugin_name.split(' = ')
+                plugin_name_args = plugin_name.split(" = ")
                 # plugin func return data.
                 for arg in plugin_name_args:
                     if arg == plugin_name_args[-1]:
                         plugin_name = arg
                     else:
-                        plugin_resp = arg.split(',')
+                        plugin_resp = arg.split(",")
                         # ['result1','result2']
                         for x in plugin_resp:
                             global_plugin_list.append(x)
@@ -975,9 +1158,9 @@
 
             # Walk the plugin args ['arg1,'arg2']
             # If the YAML plugin statement 'plugin_args' is not declared.
-            if any('plugin_args' in d for d in plugin_cmd_list):
-                idx = self.key_index_list_dict('plugin_args', plugin_cmd_list)
-                plugin_args = plugin_cmd_list[idx]['plugin_args']
+            if any("plugin_args" in d for d in plugin_cmd_list):
+                idx = self.key_index_list_dict("plugin_args", plugin_cmd_list)
+                plugin_args = plugin_cmd_list[idx]["plugin_args"]
                 if plugin_args:
                     plugin_args = self.yaml_args_populate(plugin_args)
                 else:
@@ -989,43 +1172,52 @@
             # "arg1","arg2","argn"  string as params for function.
             parm_args_str = self.yaml_args_string(plugin_args)
             if parm_args_str:
-                plugin_func = plugin_name + '(' + parm_args_str + ')'
+                plugin_func = plugin_name + "(" + parm_args_str + ")"
             else:
-                plugin_func = plugin_name + '()'
+                plugin_func = plugin_name + "()"
 
             # Execute plugin function.
             if global_plugin_dict:
                 resp = self.execute_python_eval(plugin_func)
                 # Update plugin vars dict if there is any.
-                if resp != 'PLUGIN_EVAL_ERROR':
+                if resp != "PLUGIN_EVAL_ERROR":
                     self.response_args_data(resp)
             else:
                 resp = self.execute_python_eval(plugin_func)
         except Exception as e:
             # Set the plugin error state.
-            plugin_error_dict['exit_on_error'] = True
+            plugin_error_dict["exit_on_error"] = True
             self.logger.error("\tERROR: execute_plugin_block: %s" % e)
             pass
 
         # There is a real error executing the plugin function.
-        if resp == 'PLUGIN_EVAL_ERROR':
+        if resp == "PLUGIN_EVAL_ERROR":
             return resp
 
         # Check if plugin_expects_return (int, string, list,dict etc)
-        if any('plugin_expects_return' in d for d in plugin_cmd_list):
-            idx = self.key_index_list_dict('plugin_expects_return', plugin_cmd_list)
-            plugin_expects = plugin_cmd_list[idx]['plugin_expects_return']
+        if any("plugin_expects_return" in d for d in plugin_cmd_list):
+            idx = self.key_index_list_dict(
+                "plugin_expects_return", plugin_cmd_list
+            )
+            plugin_expects = plugin_cmd_list[idx]["plugin_expects_return"]
             if plugin_expects:
                 if resp:
-                    if self.plugin_expect_type(plugin_expects, resp) == 'INVALID':
+                    if (
+                        self.plugin_expect_type(plugin_expects, resp)
+                        == "INVALID"
+                    ):
                         self.logger.error("\tWARN: Plugin error check skipped")
                     elif not self.plugin_expect_type(plugin_expects, resp):
-                        self.logger.error("\tERROR: Plugin expects return data: %s"
-                                          % plugin_expects)
-                        plugin_error_dict['exit_on_error'] = True
+                        self.logger.error(
+                            "\tERROR: Plugin expects return data: %s"
+                            % plugin_expects
+                        )
+                        plugin_error_dict["exit_on_error"] = True
                 elif not resp:
-                    self.logger.error("\tERROR: Plugin func failed to return data")
-                    plugin_error_dict['exit_on_error'] = True
+                    self.logger.error(
+                        "\tERROR: Plugin func failed to return data"
+                    )
+                    plugin_error_dict["exit_on_error"] = True
 
         return resp
 
@@ -1039,26 +1231,26 @@
         resp_data = ""
 
         # There is nothing to update the plugin response.
-        if len(global_plugin_list) == 0 or plugin_resp == 'None':
+        if len(global_plugin_list) == 0 or plugin_resp == "None":
             return
 
         if isinstance(plugin_resp, str):
-            resp_data = plugin_resp.strip('\r\n\t')
+            resp_data = plugin_resp.strip("\r\n\t")
             resp_list.append(resp_data)
         elif isinstance(plugin_resp, bytes):
-            resp_data = str(plugin_resp, 'UTF-8').strip('\r\n\t')
+            resp_data = str(plugin_resp, "UTF-8").strip("\r\n\t")
             resp_list.append(resp_data)
         elif isinstance(plugin_resp, tuple):
             if len(global_plugin_list) == 1:
                 resp_list.append(plugin_resp)
             else:
                 resp_list = list(plugin_resp)
-                resp_list = [x.strip('\r\n\t') for x in resp_list]
+                resp_list = [x.strip("\r\n\t") for x in resp_list]
         elif isinstance(plugin_resp, list):
             if len(global_plugin_list) == 1:
-                resp_list.append([x.strip('\r\n\t') for x in plugin_resp])
+                resp_list.append([x.strip("\r\n\t") for x in plugin_resp])
             else:
-                resp_list = [x.strip('\r\n\t') for x in plugin_resp]
+                resp_list = [x.strip("\r\n\t") for x in plugin_resp]
         elif isinstance(plugin_resp, int) or isinstance(plugin_resp, float):
             resp_list.append(plugin_resp)
 
@@ -1086,7 +1278,7 @@
 
         plugin_args            arg list ['arg1','arg2,'argn']
         """
-        args_str = ''
+        args_str = ""
         for args in plugin_args:
             if args:
                 if isinstance(args, (int, float)):
@@ -1094,7 +1286,7 @@
                 elif args in global_plugin_type_list:
                     args_str += str(global_plugin_dict[args])
                 else:
-                    args_str += '"' + str(args.strip('\r\n\t')) + '"'
+                    args_str += '"' + str(args.strip("\r\n\t")) + '"'
             # Skip last list element.
             if args != plugin_args[-1]:
                 args_str += ","
@@ -1147,11 +1339,11 @@
         try:
             # Example, list of matching env vars ['username', 'password', 'hostname']
             # Extra escape \ for special symbols. '\$\{([^\}]+)\}' works good.
-            var_name_regex = '\\$\\{([^\\}]+)\\}'
+            var_name_regex = "\\$\\{([^\\}]+)\\}"
             env_var_names_list = re.findall(var_name_regex, yaml_arg_str)
             for var in env_var_names_list:
                 env_var = os.environ[var]
-                env_replace = '${' + var + '}'
+                env_replace = "${" + var + "}"
                 yaml_arg_str = yaml_arg_str.replace(env_replace, env_var)
         except Exception as e:
             self.logger.error("\tERROR:yaml_env_vars_populate: %s" % e)
@@ -1174,10 +1366,14 @@
                         # in eval function call.
                         global_plugin_type_list.append(var)
                     else:
-                        yaml_arg_str = yaml_arg_str.replace(str(var), str(global_plugin_dict[var]))
+                        yaml_arg_str = yaml_arg_str.replace(
+                            str(var), str(global_plugin_dict[var])
+                        )
                 # Just a string like filename or command.
                 else:
-                    yaml_arg_str = yaml_arg_str.replace(str(var), str(global_plugin_dict[var]))
+                    yaml_arg_str = yaml_arg_str.replace(
+                        str(var), str(global_plugin_dict[var])
+                    )
         except (IndexError, ValueError) as e:
             self.logger.error("\tERROR: yaml_plugin_vars_populate: %s" % e)
             pass
@@ -1191,10 +1387,10 @@
         Description of argument(s):
         plugin_dict        Dictionary of plugin error.
         """
-        if any('plugin_error' in d for d in plugin_dict):
+        if any("plugin_error" in d for d in plugin_dict):
             for d in plugin_dict:
-                if 'plugin_error' in d:
-                    value = d['plugin_error']
+                if "plugin_error" in d:
+                    value = d["plugin_error"]
                     # Reference if the error is set or not by plugin.
                     return plugin_error_dict[value]
 
@@ -1214,18 +1410,18 @@
         r"""
         Plugin expect directive type check.
         """
-        if type == 'int':
+        if type == "int":
             return isinstance(data, int)
-        elif type == 'float':
+        elif type == "float":
             return isinstance(data, float)
-        elif type == 'str':
+        elif type == "str":
             return isinstance(data, str)
-        elif type == 'list':
+        elif type == "list":
             return isinstance(data, list)
-        elif type == 'dict':
+        elif type == "dict":
             return isinstance(data, dict)
-        elif type == 'tuple':
+        elif type == "tuple":
             return isinstance(data, tuple)
         else:
             self.logger.info("\tInvalid data type requested: %s" % type)
-            return 'INVALID'
+            return "INVALID"
diff --git a/ffdc/lib/ssh_utility.py b/ffdc/lib/ssh_utility.py
index 01b39dd..fb44121 100644
--- a/ffdc/lib/ssh_utility.py
+++ b/ffdc/lib/ssh_utility.py
@@ -1,17 +1,20 @@
 #!/usr/bin/env python3
 
-import paramiko
-from paramiko.ssh_exception import AuthenticationException
-from paramiko.ssh_exception import NoValidConnectionsError
-from paramiko.ssh_exception import SSHException
-from paramiko.ssh_exception import BadHostKeyException
-from paramiko.buffered_pipe import PipeTimeout as PipeTimeout
-from scp import SCPClient, SCPException
-import time
-import socket
 import logging
+import socket
+import time
 from socket import timeout as SocketTimeout
 
+import paramiko
+from paramiko.buffered_pipe import PipeTimeout as PipeTimeout
+from paramiko.ssh_exception import (
+    AuthenticationException,
+    BadHostKeyException,
+    NoValidConnectionsError,
+    SSHException,
+)
+from scp import SCPClient, SCPException
+
 
 class SSHRemoteclient:
     r"""
@@ -20,7 +23,6 @@
     """
 
     def __init__(self, hostname, username, password):
-
         r"""
         Description of argument(s):
 
@@ -38,7 +40,6 @@
         self.password = password
 
     def ssh_remoteclient_login(self):
-
         r"""
         Method to create a ssh connection to remote host.
         """
@@ -48,23 +49,31 @@
             # SSHClient to make connections to the remote server
             self.sshclient = paramiko.SSHClient()
             # setting set_missing_host_key_policy() to allow any host
-            self.sshclient.set_missing_host_key_policy(paramiko.AutoAddPolicy())
+            self.sshclient.set_missing_host_key_policy(
+                paramiko.AutoAddPolicy()
+            )
             # Connect to the server
-            self.sshclient.connect(hostname=self.hostname,
-                                   username=self.username,
-                                   password=self.password,
-                                   banner_timeout=120,
-                                   timeout=60,
-                                   look_for_keys=False)
+            self.sshclient.connect(
+                hostname=self.hostname,
+                username=self.username,
+                password=self.password,
+                banner_timeout=120,
+                timeout=60,
+                look_for_keys=False,
+            )
 
-        except (BadHostKeyException, AuthenticationException,
-                SSHException, NoValidConnectionsError, socket.error) as e:
+        except (
+            BadHostKeyException,
+            AuthenticationException,
+            SSHException,
+            NoValidConnectionsError,
+            socket.error,
+        ) as e:
             is_ssh_login = False
 
         return is_ssh_login
 
     def ssh_remoteclient_disconnect(self):
-
         r"""
         Clean up.
         """
@@ -75,8 +84,7 @@
         if self.scpclient:
             self.scpclient.close()
 
-    def execute_command(self, command,
-                        default_timeout=60):
+    def execute_command(self, command, default_timeout=60):
         """
         Execute command on the remote host.
 
@@ -85,25 +93,26 @@
 
         """
 
-        empty = ''
+        empty = ""
         cmd_start = time.time()
         try:
-            stdin, stdout, stderr = \
-                self.sshclient.exec_command(command, timeout=default_timeout)
+            stdin, stdout, stderr = self.sshclient.exec_command(
+                command, timeout=default_timeout
+            )
             start = time.time()
             while time.time() < start + default_timeout:
                 # Need to do read/write operation to trigger
                 # paramiko exec_command timeout mechanism.
                 xresults = stderr.readlines()
-                results = ''.join(xresults)
+                results = "".join(xresults)
                 time.sleep(1)
                 if stdout.channel.exit_status_ready():
                     break
             cmd_exit_code = stdout.channel.recv_exit_status()
 
             # Convert list of string to one string
-            err = ''
-            out = ''
+            err = ""
+            out = ""
             for item in results:
                 err += item
             for item in stdout.readlines():
@@ -111,30 +120,53 @@
 
             return cmd_exit_code, err, out
 
-        except (paramiko.AuthenticationException, paramiko.SSHException,
-                paramiko.ChannelException, SocketTimeout) as e:
+        except (
+            paramiko.AuthenticationException,
+            paramiko.SSHException,
+            paramiko.ChannelException,
+            SocketTimeout,
+        ) as e:
             # Log command with error. Return to caller for next command, if any.
-            logging.error("\n\tERROR: Fail remote command %s %s" % (e.__class__, e))
-            logging.error("\tCommand '%s' Elapsed Time %s" %
-                          (command, time.strftime("%H:%M:%S", time.gmtime(time.time() - cmd_start))))
+            logging.error(
+                "\n\tERROR: Fail remote command %s %s" % (e.__class__, e)
+            )
+            logging.error(
+                "\tCommand '%s' Elapsed Time %s"
+                % (
+                    command,
+                    time.strftime(
+                        "%H:%M:%S", time.gmtime(time.time() - cmd_start)
+                    ),
+                )
+            )
             return 0, empty, empty
 
     def scp_connection(self):
-
         r"""
         Create a scp connection for file transfer.
         """
         try:
-            self.scpclient = SCPClient(self.sshclient.get_transport(), sanitize=lambda x: x)
-            logging.info("\n\t[Check] %s SCP transport established.\t [OK]" % self.hostname)
+            self.scpclient = SCPClient(
+                self.sshclient.get_transport(), sanitize=lambda x: x
+            )
+            logging.info(
+                "\n\t[Check] %s SCP transport established.\t [OK]"
+                % self.hostname
+            )
         except (SCPException, SocketTimeout, PipeTimeout) as e:
             self.scpclient = None
-            logging.error("\n\tERROR: SCP get_transport has failed. %s %s" % (e.__class__, e))
-            logging.info("\tScript continues generating FFDC on %s." % self.hostname)
-            logging.info("\tCollected data will need to be manually offloaded.")
+            logging.error(
+                "\n\tERROR: SCP get_transport has failed. %s %s"
+                % (e.__class__, e)
+            )
+            logging.info(
+                "\tScript continues generating FFDC on %s." % self.hostname
+            )
+            logging.info(
+                "\tCollected data will need to be manually offloaded."
+            )
 
     def scp_file_from_remote(self, remote_file, local_file):
-
         r"""
         scp file in remote system to local with date-prefixed filename.
 
@@ -151,7 +183,9 @@
         except (SCPException, SocketTimeout, PipeTimeout, SSHException) as e:
             # Log command with error. Return to caller for next file, if any.
             logging.error(
-                "\n\tERROR: Fail scp %s from remotehost %s %s\n\n" % (remote_file, e.__class__, e))
+                "\n\tERROR: Fail scp %s from remotehost %s %s\n\n"
+                % (remote_file, e.__class__, e)
+            )
             # Pause for 2 seconds allowing Paramiko to finish error processing before next fetch.
             # Without the delay after SCPException,
             #    next fetch will get 'paramiko.ssh_exception.SSHException'> Channel closed Error.
diff --git a/ffdc/lib/telnet_utility.py b/ffdc/lib/telnet_utility.py
index 08e4071..03f7983 100644
--- a/ffdc/lib/telnet_utility.py
+++ b/ffdc/lib/telnet_utility.py
@@ -1,21 +1,21 @@
 #!/usr/bin/env python3
 
 
-import time
-import socket
 import logging
+import socket
 import telnetlib
+import time
 from collections import deque
 
 
 class TelnetRemoteclient:
-
     r"""
     Class to create telnet connection to remote host for command execution.
     """
 
-    def __init__(self, hostname, username, password, port=23, read_timeout=None):
-
+    def __init__(
+        self, hostname, username, password, port=23, read_timeout=None
+    ):
         r"""
         Description of argument(s):
 
@@ -33,23 +33,35 @@
         self.read_timeout = read_timeout
 
     def tn_remoteclient_login(self):
-
         is_telnet = True
         try:
-            self.tnclient = telnetlib.Telnet(self.hostname, self.port, timeout=15)
-            if b'login:' in self.tnclient.read_until(b'login:', timeout=self.read_timeout):
-                self.tnclient.write(self.username.encode('utf-8') + b"\n")
+            self.tnclient = telnetlib.Telnet(
+                self.hostname, self.port, timeout=15
+            )
+            if b"login:" in self.tnclient.read_until(
+                b"login:", timeout=self.read_timeout
+            ):
+                self.tnclient.write(self.username.encode("utf-8") + b"\n")
 
-                if b'Password:' in self.tnclient.read_until(b'Password:', timeout=self.read_timeout):
-                    self.tnclient.write(self.password.encode('utf-8') + b"\n")
+                if b"Password:" in self.tnclient.read_until(
+                    b"Password:", timeout=self.read_timeout
+                ):
+                    self.tnclient.write(self.password.encode("utf-8") + b"\n")
 
-                    n, match, pre_match = \
-                        self.tnclient.expect(
-                            [b'Login incorrect', b'invalid login name or password.', br'\#', br'\$'],
-                            timeout=self.read_timeout)
+                    n, match, pre_match = self.tnclient.expect(
+                        [
+                            b"Login incorrect",
+                            b"invalid login name or password.",
+                            rb"\#",
+                            rb"\$",
+                        ],
+                        timeout=self.read_timeout,
+                    )
                     if n == 0 or n == 1:
                         logging.error(
-                            "\n\tERROR: Telnet Authentication Failed.  Check userid and password.\n\n")
+                            "\n\tERROR: Telnet Authentication Failed.  Check"
+                            " userid and password.\n\n"
+                        )
                         is_telnet = False
                     else:
                         # login successful
@@ -76,17 +88,15 @@
             # the telnet object might not exist yet, so ignore this one
             pass
 
-    def execute_command(self, cmd,
-                        i_timeout=120):
+    def execute_command(self, cmd, i_timeout=120):
+        r"""
+        Executes commands on the remote host
 
-        r'''
-            Executes commands on the remote host
-
-            Description of argument(s):
-            cmd             Command to run on remote host
-            i_timeout       Timeout for command output
-                            default is 120 seconds
-        '''
+        Description of argument(s):
+        cmd             Command to run on remote host
+        i_timeout       Timeout for command output
+                        default is 120 seconds
+        """
 
         # Wait time for command execution before reading the output.
         # Use user input wait time for command execution if one exists.
@@ -97,23 +107,22 @@
             execution_time = 120
 
         # Execute the command and read the command output.
-        return_buffer = b''
+        return_buffer = b""
         try:
-
             # Do at least one non-blocking read.
             #  to flush whatever data is in the read buffer.
             while self.tnclient.read_very_eager():
                 continue
 
             # Execute the command
-            self.tnclient.write(cmd.encode('utf-8') + b'\n')
+            self.tnclient.write(cmd.encode("utf-8") + b"\n")
             time.sleep(execution_time)
 
-            local_buffer = b''
+            local_buffer = b""
             # Read the command output one block at a time.
             return_buffer = self.tnclient.read_very_eager()
             while return_buffer:
-                local_buffer = b''.join([local_buffer, return_buffer])
+                local_buffer = b"".join([local_buffer, return_buffer])
                 time.sleep(3)  # let the buffer fill up a bit
                 return_buffer = self.tnclient.read_very_eager()
         except (socket.error, EOFError) as e:
@@ -129,4 +138,4 @@
             logging.error("\t\t ERROR %s " % msg)
 
         # Return ASCII string data with ending PROMPT stripped
-        return local_buffer.decode('ascii', 'ignore').replace('$ ', '\n')
+        return local_buffer.decode("ascii", "ignore").replace("$ ", "\n")
diff --git a/ffdc/plugins/date_time_utils.py b/ffdc/plugins/date_time_utils.py
index 65bcb88..f3787bd 100644
--- a/ffdc/plugins/date_time_utils.py
+++ b/ffdc/plugins/date_time_utils.py
@@ -22,7 +22,11 @@
     if isinstance(date_str, list):
         tmp_date = []
         for date in date_str:
-            tmp_date.append(datetime.strptime(date, date_format).strftime(desired_format))
+            tmp_date.append(
+                datetime.strptime(date, date_format).strftime(desired_format)
+            )
         return tmp_date
     else:
-        return datetime.strptime(date_str, date_format).strftime(desired_format)
+        return datetime.strptime(date_str, date_format).strftime(
+            desired_format
+        )
diff --git a/ffdc/plugins/redfish.py b/ffdc/plugins/redfish.py
index 0ea7a00..74f1370 100644
--- a/ffdc/plugins/redfish.py
+++ b/ffdc/plugins/redfish.py
@@ -4,13 +4,13 @@
 This module contains functions having to do with redfish path walking.
 """
 
+import json
 import os
 import subprocess
-import json
 
 ERROR_RESPONSE = {
-    "404": 'Response Error: status_code: 404 -- Not Found',
-    "500": 'Response Error: status_code: 500 -- Internal Server Error',
+    "404": "Response Error: status_code: 404 -- Not Found",
+    "500": "Response Error: status_code: 500 -- Internal Server Error",
 }
 
 # Variable to hold enumerated data.
@@ -29,15 +29,17 @@
     parms_string         Command to execute from the current SHELL.
     quiet                do not print tool error message if True
     """
-    resp = subprocess.run([parms],
-                          stdout=subprocess.PIPE,
-                          stderr=subprocess.PIPE,
-                          shell=True,
-                          universal_newlines=True)
+    resp = subprocess.run(
+        [parms],
+        stdout=subprocess.PIPE,
+        stderr=subprocess.PIPE,
+        shell=True,
+        universal_newlines=True,
+    )
 
     if resp.stderr:
-        print('\n\t\tERROR with %s ' % parms)
-        print('\t\t' + resp.stderr)
+        print("\n\t\tERROR with %s " % parms)
+        print("\t\t" + resp.stderr)
         return resp.stderr
     elif json_type == "json":
         json_data = json.loads(resp.stdout)
@@ -57,8 +59,15 @@
                       returned as a json string or as a
                       dictionary.
     """
-    parms = 'redfishtool -u ' + username + ' -p ' + password + ' -r ' + \
-        hostname + ' -S Always raw GET '
+    parms = (
+        "redfishtool -u "
+        + username
+        + " -p "
+        + password
+        + " -r "
+        + hostname
+        + " -S Always raw GET "
+    )
 
     pending_enumeration.add(url)
 
@@ -74,31 +83,37 @@
             # Example: '/redfish/v1/JsonSchemas/' and sub resources.
             #          '/redfish/v1/SessionService'
             #          '/redfish/v1/Managers/bmc#/Oem'
-            if ('JsonSchemas' in resource) or ('SessionService' in resource)\
-                    or ('PostCodes' in resource) or ('Registries' in resource)\
-                    or ('#' in resource):
+            if (
+                ("JsonSchemas" in resource)
+                or ("SessionService" in resource)
+                or ("PostCodes" in resource)
+                or ("Registries" in resource)
+                or ("#" in resource)
+            ):
                 continue
 
             response = execute_redfish_cmd(parms + resource)
             # Enumeration is done for available resources ignoring the
             # ones for which response is not obtained.
-            if 'Error getting response' in response:
+            if "Error getting response" in response:
                 continue
 
             walk_nested_dict(response, url=resource)
 
         enumerated_resources.update(set(resources_to_be_enumerated))
-        resources_to_be_enumerated = \
-            tuple(pending_enumeration - enumerated_resources)
+        resources_to_be_enumerated = tuple(
+            pending_enumeration - enumerated_resources
+        )
 
     if return_json == "json":
-        return json.dumps(result, sort_keys=True,
-                          indent=4, separators=(',', ': '))
+        return json.dumps(
+            result, sort_keys=True, indent=4, separators=(",", ": ")
+        )
     else:
         return result
 
 
-def walk_nested_dict(data, url=''):
+def walk_nested_dict(data, url=""):
     r"""
     Parse through the nested dictionary and get the resource id paths.
 
@@ -106,25 +121,24 @@
     data    Nested dictionary data from response message.
     url     Resource for which the response is obtained in data.
     """
-    url = url.rstrip('/')
+    url = url.rstrip("/")
 
     for key, value in data.items():
-
         # Recursion if nested dictionary found.
         if isinstance(value, dict):
             walk_nested_dict(value)
         else:
             # Value contains a list of dictionaries having member data.
-            if 'Members' == key:
+            if "Members" == key:
                 if isinstance(value, list):
                     for memberDict in value:
                         if isinstance(memberDict, str):
                             pending_enumeration.add(memberDict)
                         else:
-                            pending_enumeration.add(memberDict['@odata.id'])
+                            pending_enumeration.add(memberDict["@odata.id"])
 
-            if '@odata.id' == key:
-                value = value.rstrip('/')
+            if "@odata.id" == key:
+                value = value.rstrip("/")
                 # Data for the given url.
                 if value == url:
                     result[url] = data
diff --git a/ffdc/plugins/scp_execution.py b/ffdc/plugins/scp_execution.py
index 9754c02..f44c10d 100644
--- a/ffdc/plugins/scp_execution.py
+++ b/ffdc/plugins/scp_execution.py
@@ -1,18 +1,18 @@
 #!/usr/bin/env python3
 
 
-# ssh_utility is in ../lib
-from ssh_utility import SSHRemoteclient
-
 import os
 import sys
 
+# ssh_utility is in ../lib
+from ssh_utility import SSHRemoteclient
+
 # ---------Set sys.path for pluqin execution---------------------------------------
 # Absolute path to this plugin
 abs_path = os.path.abspath(os.path.dirname(sys.argv[0]))
 
 # full_path to plugins parent directory
-full_path = abs_path.split('plugins')[0]
+full_path = abs_path.split("plugins")[0]
 sys.path.append(full_path)
 
 # Walk path and append to sys.path
@@ -21,33 +21,28 @@
         sys.path.append(os.path.join(root, found_dir))
 
 
-def scp_remote_file(hostname,
-                    username,
-                    password,
-                    filename,
-                    local_dir_path):
+def scp_remote_file(hostname, username, password, filename, local_dir_path):
     r"""
-        Description of argument(s):
+    Description of argument(s):
 
-        hostname        Name/IP of the remote (targeting) host
-        username        User on the remote host with access to files
-        password        Password for user on remote host
-        filename        Filename with full path on remote host
-                        Filename can contain wild cards for multiple files
-        local_dir_path  Location to store file on local host
+    hostname        Name/IP of the remote (targeting) host
+    username        User on the remote host with access to files
+    password        Password for user on remote host
+    filename        Filename with full path on remote host
+                    Filename can contain wild cards for multiple files
+    local_dir_path  Location to store file on local host
     """
-    ssh_remoteclient = SSHRemoteclient(hostname,
-                                       username,
-                                       password)
+    ssh_remoteclient = SSHRemoteclient(hostname, username, password)
 
     if ssh_remoteclient.ssh_remoteclient_login():
-
         # Obtain scp connection.
         ssh_remoteclient.scp_connection()
         if ssh_remoteclient.scpclient:
             if isinstance(filename, list):
                 for each_file in filename:
-                    ssh_remoteclient.scp_file_from_remote(each_file, local_dir_path)
+                    ssh_remoteclient.scp_file_from_remote(
+                        each_file, local_dir_path
+                    )
             else:
                 ssh_remoteclient.scp_file_from_remote(filename, local_dir_path)
 
diff --git a/ffdc/plugins/shell_execution.py b/ffdc/plugins/shell_execution.py
index 817dc1e..91a42b2 100644
--- a/ffdc/plugins/shell_execution.py
+++ b/ffdc/plugins/shell_execution.py
@@ -10,14 +10,16 @@
     quiet                do not print tool error message if True
     """
 
-    result = subprocess.run([parms_string],
-                            stdout=subprocess.PIPE,
-                            stderr=subprocess.PIPE,
-                            shell=True,
-                            universal_newlines=True)
+    result = subprocess.run(
+        [parms_string],
+        stdout=subprocess.PIPE,
+        stderr=subprocess.PIPE,
+        shell=True,
+        universal_newlines=True,
+    )
 
     if result.stderr and not quiet:
-        print('\n\t\tERROR with %s ' % parms_string)
-        print('\t\t' + result.stderr)
+        print("\n\t\tERROR with %s " % parms_string)
+        print("\t\t" + result.stderr)
 
     return result.stdout
diff --git a/ffdc/plugins/ssh_execution.py b/ffdc/plugins/ssh_execution.py
index db06596..ab0b4b8 100644
--- a/ffdc/plugins/ssh_execution.py
+++ b/ffdc/plugins/ssh_execution.py
@@ -1,16 +1,16 @@
 #!/usr/bin/env python3
 
 
-from ssh_utility import SSHRemoteclient
-
 import os
 import sys
 
+from ssh_utility import SSHRemoteclient
+
 # ---------Set sys.path for pluqin execution---------------------------------------
 # Absolute path to this plugin
 abs_path = os.path.abspath(os.path.dirname(sys.argv[0]))
 # full_path to plugins parent directory
-full_path = abs_path.split('plugins')[0]
+full_path = abs_path.split("plugins")[0]
 sys.path.append(full_path)
 # Walk path and append to sys.path
 for root, dirs, files in os.walk(full_path):
@@ -20,44 +20,39 @@
 # ssh_utility is in ../lib
 
 
-def ssh_execute_cmd(hostname,
-                    username,
-                    password,
-                    command,
-                    timeout=60,
-                    type=None):
+def ssh_execute_cmd(
+    hostname, username, password, command, timeout=60, type=None
+):
     r"""
-        Description of argument(s):
+    Description of argument(s):
 
-        hostname        Name/IP of the remote (targeting) host
-        username        User on the remote host with access to FFCD files
-        password        Password for user on remote host
-        command         Command to run on remote host
-        timeout         Time, in second, to wait for command completion
-        type            Data type return as list or others.
+    hostname        Name/IP of the remote (targeting) host
+    username        User on the remote host with access to FFCD files
+    password        Password for user on remote host
+    command         Command to run on remote host
+    timeout         Time, in second, to wait for command completion
+    type            Data type return as list or others.
     """
-    ssh_remoteclient = SSHRemoteclient(hostname,
-                                       username,
-                                       password)
+    ssh_remoteclient = SSHRemoteclient(hostname, username, password)
 
     cmd_exit_code = 0
-    err = ''
-    response = ''
+    err = ""
+    response = ""
     if ssh_remoteclient.ssh_remoteclient_login():
-
         """
         cmd_exit_code: command exit status from remote host
         err: stderr from remote host
         response: stdout from remote host
         """
-        cmd_exit_code, err, response = \
-            ssh_remoteclient.execute_command(command, int(timeout))
+        cmd_exit_code, err, response = ssh_remoteclient.execute_command(
+            command, int(timeout)
+        )
 
     # Close ssh session
     if ssh_remoteclient:
         ssh_remoteclient.ssh_remoteclient_disconnect()
 
     if type == "list":
-        return response.split('\n')
+        return response.split("\n")
     else:
         return response
diff --git a/ffdc/plugins/telnet_execution.py b/ffdc/plugins/telnet_execution.py
index 726d3a6..5c6aa5d 100644
--- a/ffdc/plugins/telnet_execution.py
+++ b/ffdc/plugins/telnet_execution.py
@@ -1,16 +1,16 @@
 #!/usr/bin/env python3
 
 
-from telnet_utility import TelnetRemoteclient
-
 import os
 import sys
 
+from telnet_utility import TelnetRemoteclient
+
 # ---------Set sys.path for pluqin execution---------------------------------------
 # Absolute path to this plugin
 abs_path = os.path.abspath(os.path.dirname(sys.argv[0]))
 # full_path to plugins parent directory
-full_path = abs_path.split('plugins')[0]
+full_path = abs_path.split("plugins")[0]
 sys.path.append(full_path)
 # Walk path and append to sys.path
 for root, dirs, files in os.walk(full_path):
@@ -18,28 +18,21 @@
         sys.path.append(os.path.join(root, found_dir))
 
 
-def telnet_execute_cmd(hostname,
-                       username,
-                       password,
-                       command,
-                       timeout=60):
+def telnet_execute_cmd(hostname, username, password, command, timeout=60):
     r"""
-        Description of argument(s):
+    Description of argument(s):
 
-        hostname        Name/IP of the remote (targeting) host
-        username        User on the remote host with access to FFCD files
-        password        Password for user on remote host
-        command         Command to run on remote host
-        timeout         Time, in second, to wait for command completion
+    hostname        Name/IP of the remote (targeting) host
+    username        User on the remote host with access to FFCD files
+    password        Password for user on remote host
+    command         Command to run on remote host
+    timeout         Time, in second, to wait for command completion
     """
-    telnet_remoteclient = TelnetRemoteclient(hostname,
-                                             username,
-                                             password)
-    result = ''
+    telnet_remoteclient = TelnetRemoteclient(hostname, username, password)
+    result = ""
     if telnet_remoteclient.tn_remoteclient_login():
         # result: stdout from remote host
-        result = \
-            telnet_remoteclient.execute_command(command, timeout)
+        result = telnet_remoteclient.execute_command(command, timeout)
 
     # Close telnet session
     if telnet_remoteclient:
diff --git a/ffdc/setup.py b/ffdc/setup.py
index f8c6b18..ef360af 100644
--- a/ffdc/setup.py
+++ b/ffdc/setup.py
@@ -1,16 +1,12 @@
 from setuptools import setup
+
 setup(
-    name='ffdc',
-    version='0.1',
-    description=("A standalone script to collect logs from a given system."),
-    py_modules=['install'],
-    install_requires=[
-        'click',
-        'PyYAML',
-        'paramiko',
-        'redfishtool'
-    ],
+    name="ffdc",
+    version="0.1",
+    description="A standalone script to collect logs from a given system.",
+    py_modules=["install"],
+    install_requires=["click", "PyYAML", "paramiko", "redfishtool"],
     entry_points={
-        'console_scripts': ['collectFFDC=commands.install_cmd:main']
-    }
+        "console_scripts": ["collectFFDC=commands.install_cmd:main"]
+    },
 )
diff --git a/gui/data/gui_variables.py b/gui/data/gui_variables.py
index 0fe686a..663f9b0 100644
--- a/gui/data/gui_variables.py
+++ b/gui/data/gui_variables.py
@@ -5,8 +5,7 @@
 """
 
 
-class gui_variables():
-
+class gui_variables:
     # Login page
     xpath_textbox_hostname = "//input[@id='host']"
     xpath_textbox_username = "//*[@data-test-id='login-input-username']"
@@ -20,8 +19,12 @@
     # GUI header
     xpath_root_button_menu = "//*[@data-test-id='appHeader-container-user']"
     xpath_profile_settings = "//*[@data-test-id='appHeader-link-profile']"
-    xpath_server_health_header = "//*[@data-test-id='appHeader-container-health']"
-    xpath_server_power_header = "//*[@data-test-id='appHeader-container-power']"
+    xpath_server_health_header = (
+        "//*[@data-test-id='appHeader-container-health']"
+    )
+    xpath_server_power_header = (
+        "//*[@data-test-id='appHeader-container-power']"
+    )
     xpath_refresh_button = "//*[@data-test-id='appHeader-button-refresh']"
 
     # Logs menu
@@ -30,21 +33,33 @@
     xpath_dumps_header = "//h1[text()='Dumps']"
     xpath_event_logs_sub_menu = "//*[@data-test-id='nav-item-event-logs']"
     xpath_event_logs_heading = "//h1[contains(text(), 'Event logs')]"
-    xpath_progress_logs_sub_menu = "//*[@data-test-id='nav-item-post-code-logs']"
+    xpath_progress_logs_sub_menu = (
+        "//*[@data-test-id='nav-item-post-code-logs']"
+    )
 
     # Hardware status menu
-    xpath_hardware_status_menu = "//*[@data-test-id='nav-button-hardware-status']"
-    xpath_inventory_and_leds_sub_menu = "//*[@data-test-id='nav-item-inventory']"
+    xpath_hardware_status_menu = (
+        "//*[@data-test-id='nav-button-hardware-status']"
+    )
+    xpath_inventory_and_leds_sub_menu = (
+        "//*[@data-test-id='nav-item-inventory']"
+    )
     xpath_sensor_sub_menu = "//*[@data-test-id='nav-item-sensors']"
-    xpath_inventory_and_leds_heading = "//h1[contains(text(), 'Inventory and LEDs')]"
+    xpath_inventory_and_leds_heading = (
+        "//h1[contains(text(), 'Inventory and LEDs')]"
+    )
 
     # Operations menu
     xpath_operations_menu = "//*[@data-test-id='nav-button-operations']"
-    xpath_factory_reset_sub_menu = "//*[@data-test-id='nav-item-factory-reset']"
+    xpath_factory_reset_sub_menu = (
+        "//*[@data-test-id='nav-item-factory-reset']"
+    )
     xpath_firmware_update_sub_menu = "//*[@data-test-id='nav-item-firmware']"
     xpath_reboot_bmc_sub_menu = "//*[@data-test-id='nav-item-reboot-bmc']"
     xpath_host_console_sub_menu = "//*[@data-test-id='nav-item-host-console']"
-    xpath_server_power_operations_sub_menu = "//*[@data-test-id='nav-item-server-power-operations']"
+    xpath_server_power_operations_sub_menu = (
+        "//*[@data-test-id='nav-item-server-power-operations']"
+    )
     xpath_host_console_heading = "//h1[text()='Host console']"
     xpath_firmware_heading = "//h1[contains(text(), 'Firmware')]"
 
@@ -53,33 +68,49 @@
     xpath_network_heading = "//h1[text()='Network']"
     xpath_date_time_sub_menu = "//*[@data-test-id='nav-item-date-time']"
     xpath_network_sub_menu = "//*[@data-test-id='nav-item-network']"
-    xpath_power_restore_policy_sub_menu = "//*[@data-test-id='nav-item-power-restore-policy']"
+    xpath_power_restore_policy_sub_menu = (
+        "//*[@data-test-id='nav-item-power-restore-policy']"
+    )
 
     # Security and access menu
-    xpath_secuity_and_accesss_menu = "//*[@data-test-id='nav-button-security-and-access']"
+    xpath_secuity_and_accesss_menu = (
+        "//*[@data-test-id='nav-button-security-and-access']"
+    )
     xpath_sessions_sub_menu = "//*[@data-test-id='nav-item-sessions']"
     xpath_ldap_sub_menu = "//*[@data-test-id='nav-item-ldap']"
-    xpath_user_management_sub_menu = "//*[@data-test-id='nav-item-user-management']"
+    xpath_user_management_sub_menu = (
+        "//*[@data-test-id='nav-item-user-management']"
+    )
     xpath_policies_sub_menu = "//*[@data-test-id='nav-item-policies']"
     xpath_certificates_sub_menu = "//*[@data-test-id='nav-item-certificates']"
 
     # Resource management menu
-    xpath_resource_management_menu = "//*[@data-test-id='nav-button-resource-management']"
+    xpath_resource_management_menu = (
+        "//*[@data-test-id='nav-button-resource-management']"
+    )
     xpath_power_sub_menu = "//*[@data-test-id='nav-item-power']"
     xpath_power_heading = "//h1[contains(text(), 'Power')]"
 
     # Profile settings
     xpath_default_UTC = "//*[@data-test-id='profileSettings-radio-defaultUTC']"
-    xpath_profile_save_button = "//*[@data-test-id='profileSettings-button-saveSettings']"
-    xpath_input_password = "//*[@data-test-id='profileSettings-input-newPassword']"
-    xpath_input_confirm_password = "//*[@data-test-id='profileSettings-input-confirmPassword']"
+    xpath_profile_save_button = (
+        "//*[@data-test-id='profileSettings-button-saveSettings']"
+    )
+    xpath_input_password = (
+        "//*[@data-test-id='profileSettings-input-newPassword']"
+    )
+    xpath_input_confirm_password = (
+        "//*[@data-test-id='profileSettings-input-confirmPassword']"
+    )
 
     # Common variables
     xpath_save_settings_button = "//button[contains(text(),'Save')]"
     xpath_confirm_button = "//button[contains(text(),'Confirm')]"
     xpath_cancel_button = "//button[contains(text(),'Cancel')]"
     xpath_add_button = "//button[normalize-space(text())='Add']"
-    xpath_page_loading_progress_bar = "//*[@aria-label='Page loading progress bar']"
+    xpath_page_loading_progress_bar = (
+        "//*[@aria-label='Page loading progress bar']"
+    )
 
     # Reboot sub menu
     xpath_reboot_bmc_heading = "//h1[text()='Reboot BMC']"
diff --git a/gui/data/resource_variables.py b/gui/data/resource_variables.py
index 07413d7..e70a324 100644
--- a/gui/data/resource_variables.py
+++ b/gui/data/resource_variables.py
@@ -6,8 +6,7 @@
 """
 
 
-class resource_variables():
-
+class resource_variables:
     xpath_textbox_hostname = "//input[@id='host']"
     xpath_textbox_username = "//input[@id='username']"
     xpath_textbox_password = "//input[@id='password']"
@@ -27,38 +26,38 @@
     xpath_remove_button = "//button[contains(text(),'Remove')]"
     xpath_add_button = "//button[@type='submit']"
 
-    xpath_select_button_warm_reboot = \
-        "//*[@id='power__warm-boot']"
-    xpath_operation_warning_message = \
-        "//*[@class='inline__confirm active']"
+    xpath_select_button_warm_reboot = "//*[@id='power__warm-boot']"
+    xpath_operation_warning_message = "//*[@class='inline__confirm active']"
     text_warm_reboot_warning_message = "warm reboot?"
-    xpath_select_button_warm_reboot_yes = \
-        "//*[@id='power-operations']" \
+    xpath_select_button_warm_reboot_yes = (
+        "//*[@id='power-operations']"
         "/div[3]/div[3]/confirm/div/div[2]/button[1]"
+    )
 
-    xpath_select_button_cold_reboot = \
-        "//*[@id='power__cold-boot']"
+    xpath_select_button_cold_reboot = "//*[@id='power__cold-boot']"
     text_cold_reboot_warning_message = "cold reboot?"
-    xpath_select_button_cold_reboot_yes = \
-        "//*[@id='power-operations']" \
+    xpath_select_button_cold_reboot_yes = (
+        "//*[@id='power-operations']"
         "/div[3]/div[4]/confirm/div/div[2]/button[2]"
+    )
 
-    xpath_select_button_orderly_shutdown = \
-        "//*[@id='power__soft-shutdown']"
-    xpath_select_button_orderly_shutdown_button_no = \
-        "//*[@id='power-operations']/div[3]/div[5]"\
+    xpath_select_button_orderly_shutdown = "//*[@id='power__soft-shutdown']"
+    xpath_select_button_orderly_shutdown_button_no = (
+        "//*[@id='power-operations']/div[3]/div[5]"
         "/confirm/div/div[2]/button[2]"
+    )
     text_orderly_shutdown_warning_message = "orderly shutdown?"
-    xpath_select_button_orderly_shutdown_yes = \
-        "//*[@id='power-operations']/div[3]/div[5]" \
+    xpath_select_button_orderly_shutdown_yes = (
+        "//*[@id='power-operations']/div[3]/div[5]"
         "/confirm/div/div[2]/button[1]"
+    )
 
-    xpath_select_button_immediate_shutdown = \
-        "//*[@id='power__hard-shutdown']"
+    xpath_select_button_immediate_shutdown = "//*[@id='power__hard-shutdown']"
     text_immediate_shutdown_warning_message = "immediate shutdown?"
-    xpath_select_button_immediate_shutdown_yes = \
-        "//*[@id='power-operations']/div[3]/div[6]" \
+    xpath_select_button_immediate_shutdown_yes = (
+        "//*[@id='power-operations']/div[3]/div[6]"
         "/confirm/div/div[2]/button[1]"
+    )
 
     obmc_off_state = "Off"
     obmc_standby_state = "Standby"
@@ -66,13 +65,21 @@
 
     # xpath for main menu.
     xpath_select_server_control = "//button[contains(@class,'btn-control')]"
-    xpath_select_server_configuration = "//button[contains(@class,'btn-config')]"
-    xpath_select_access_control = "//button[contains(@class,'btn-access-control')]"
+    xpath_select_server_configuration = (
+        "//button[contains(@class,'btn-config')]"
+    )
+    xpath_select_access_control = (
+        "//button[contains(@class,'btn-access-control')]"
+    )
 
     # xpath for sub main menu.
-    xpath_select_server_power_operations = "//a[@href='#/server-control/power-operations']"
+    xpath_select_server_power_operations = (
+        "//a[@href='#/server-control/power-operations']"
+    )
     xpath_select_snmp_settings = "//a[@href='#/configuration/snmp']"
-    xpath_select_manage_power_usage = "//a[@href='#/server-control/power-usage']"
+    xpath_select_manage_power_usage = (
+        "//a[@href='#/server-control/power-usage']"
+    )
     xpath_select_virtual_media = "//a[@href='#/server-control/virtual-media']"
     xpath_select_sol_console = "//a[@href='#/server-control/remote-console']"
     xpath_select_reboot_bmc = "//a[@href='#/server-control/bmc-reboot']"
@@ -83,40 +90,53 @@
     xpath_select_local_users = "//a[@href='#/access-control/local-users']"
 
     # GUI header elements locators.
-    xpath_select_server_power = "//a[@href='#/server-control/power-operations']"
+    xpath_select_server_power = (
+        "//a[@href='#/server-control/power-operations']"
+    )
 
     # Server health elements locators.
-    xpath_select_refresh_button = \
-        "//*[contains(text(),'Refresh')]"
-    xpath_event_severity_all = "//*[text()='Filter by severity']/following-sibling::button[1]"
-    xpath_event_severity_high = "//*[text()='Filter by severity']/following-sibling::button[2]"
-    xpath_event_severity_medium = "//*[text()='Filter by severity']/following-sibling::button[3]"
-    xpath_event_severity_low = "//*[text()='Filter by severity']/following-sibling::button[4]"
-    xpath_drop_down_timezone_edt = \
+    xpath_select_refresh_button = "//*[contains(text(),'Refresh')]"
+    xpath_event_severity_all = (
+        "//*[text()='Filter by severity']/following-sibling::button[1]"
+    )
+    xpath_event_severity_high = (
+        "//*[text()='Filter by severity']/following-sibling::button[2]"
+    )
+    xpath_event_severity_medium = (
+        "//*[text()='Filter by severity']/following-sibling::button[3]"
+    )
+    xpath_event_severity_low = (
+        "//*[text()='Filter by severity']/following-sibling::button[4]"
+    )
+    xpath_drop_down_timezone_edt = (
         "//*[@id='event-log']/section[1]/div/div/button"
+    )
     xpath_refresh_circle = "/html/body/main/loader/div[1]/svg/circle"
-    xpath_drop_down_timezone_utc =  \
+    xpath_drop_down_timezone_utc = (
         "//*[@id='event-log']/section[1]/div/div/ul/li[2]/button"
+    )
     xpath_event_filter_all = "//*[text()='All events']"
     xpath_event_filter_resolved = "//*[text()='Resolved events']"
     xpath_event_filter_unresolved = "//*[text()='Unresolved events']"
-    xpath_event_action_bars = \
-        "//*[@id='event__actions-bar']/div[1]/label/span"
-    xpath_event_action_delete = \
+    xpath_event_action_bars = "//*[@id='event__actions-bar']/div[1]/label/span"
+    xpath_event_action_delete = (
         "//*[@id='event__actions-bar']/div[2]/div[2]/button[1]"
-    xpath_event_action_export = \
-        "//*[@id='event__actions-bar']/div[2]/div[2]/a"
-    xpath_number_of_events = \
-        "//*[@id='event__actions-bar']/div[2]/p[2]/span"
-    xpath_mark_as_resolved = \
+    )
+    xpath_event_action_export = "//*[@id='event__actions-bar']/div[2]/div[2]/a"
+    xpath_number_of_events = "//*[@id='event__actions-bar']/div[2]/p[2]/span"
+    xpath_mark_as_resolved = (
         "//*[@id='event__actions-bar']/div[2]/div[2]/button[2]"
+    )
     xpath_events_export = "//*[@id='event__actions-bar']/div[2]/div[2]/a"
     xpath_individual_event_select = "(//*[@class='control__indicator'])[2]"
-    xpath_individual_event_delete = \
+    xpath_individual_event_delete = (
         "//*[@id='event__actions-bar']/div[2]/div[2]/button[1]"
+    )
     xpath_second_event_select = "(//*[@class='control__indicator'])[3]"
-    xpath_individual_event_resolved = \
+    xpath_individual_event_resolved = (
         "//*[@id='event__actions-bar']/div[2]/div[2]/button[2]"
-    xpath_individual_event_export = \
+    )
+    xpath_individual_event_export = (
         "//*[@id='event__actions-bar']/div[2]/div[2]/a"
+    )
     xpath_select_all_events = "(//*[@class='control__indicator'])[1]"
diff --git a/gui/lib/supporting_libs.py b/gui/lib/supporting_libs.py
index 4cc3044..ae7d005 100644
--- a/gui/lib/supporting_libs.py
+++ b/gui/lib/supporting_libs.py
@@ -9,7 +9,6 @@
 import socket
 
 
-class supporting_libs():
-
+class supporting_libs:
     def get_hostname_from_ip_address(self, ip):
         return socket.gethostbyaddr(ip)[0]
diff --git a/gui/lib/utils_get_version.py b/gui/lib/utils_get_version.py
index 0c7f279..3f1d331 100755
--- a/gui/lib/utils_get_version.py
+++ b/gui/lib/utils_get_version.py
@@ -1,11 +1,19 @@
 #!/usr/bin/env python3
 
-import gen_print as gp
-import gen_cmd as gc
 import collections
 
-module_names = ['Selenium2Library', 'SeleniumLibrary', 'SSHLibrary', 'requests',
-                'XvfbRobot', 'robotremoteserver', 'redfish']
+import gen_cmd as gc
+import gen_print as gp
+
+module_names = [
+    "Selenium2Library",
+    "SeleniumLibrary",
+    "SSHLibrary",
+    "requests",
+    "XvfbRobot",
+    "robotremoteserver",
+    "redfish",
+]
 
 import_versions = collections.OrderedDict()
 
@@ -13,8 +21,13 @@
     try:
         cmd_buf = "import " + module_name
         exec(cmd_buf)
-        cmd_buf = "import_versions['" + module_name + "'] = " + module_name \
-                  + ".__version__"
+        cmd_buf = (
+            "import_versions['"
+            + module_name
+            + "'] = "
+            + module_name
+            + ".__version__"
+        )
         exec(cmd_buf)
     except ImportError:
         import_versions[module_name] = "Not installed"
@@ -50,21 +63,30 @@
 
     quiet = 1
     versions = collections.OrderedDict()
-    for package in ['python', 'python3', 'robot', 'firefox', 'google-chrome']:
+    for package in ["python", "python3", "robot", "firefox", "google-chrome"]:
         # Note: "robot --version" returns 0x00000000000000fb.
         # Note: If package does not exist, 0x7f is returned.
-        rc, version = gc.shell_cmd(package + " --version",
-                                   valid_rcs=[0, 0x7f, 0xfb])
-        versions[package] = "Not installed" if rc == 0x7f else version.rstrip('\n')
+        rc, version = gc.shell_cmd(
+            package + " --version", valid_rcs=[0, 0x7F, 0xFB]
+        )
+        versions[package] = (
+            "Not installed" if rc == 0x7F else version.rstrip("\n")
+        )
 
     versions.update(import_versions)
 
-    for package in ['robotframework-angularjs', 'robotframework-scplibrary',
-                    'robotframework-extendedselenium2library']:
-        rc, version = gc.shell_cmd("pip3 show " + package
-                                   + " | grep Version | sed -re 's/.*: //g'")
-        versions[package] = "Not installed" if not version else version.rstrip('\n')
+    for package in [
+        "robotframework-angularjs",
+        "robotframework-scplibrary",
+        "robotframework-extendedselenium2library",
+    ]:
+        rc, version = gc.shell_cmd(
+            "pip3 show " + package + " | grep Version | sed -re 's/.*: //g'"
+        )
+        versions[package] = (
+            "Not installed" if not version else version.rstrip("\n")
+        )
 
     rc, version = gc.shell_cmd("lsb_release -d -s")
-    versions["host OS"] = "Failed" if not version else version.rstrip('\n')
+    versions["host OS"] = "Failed" if not version else version.rstrip("\n")
     return versions
diff --git a/lib/bmc_network_utils.py b/lib/bmc_network_utils.py
index 9a4a1dc..82b10fd 100644
--- a/lib/bmc_network_utils.py
+++ b/lib/bmc_network_utils.py
@@ -5,18 +5,19 @@
 
 """
 
-import gen_print as gp
+import collections
+import ipaddress
+import json
+import re
+import socket
+import subprocess
+
+import bmc_ssh_utils as bsu
 import gen_cmd as gc
 import gen_misc as gm
+import gen_print as gp
 import var_funcs as vf
-import collections
-import re
-import ipaddress
-import subprocess
-import socket
 from robot.libraries.BuiltIn import BuiltIn
-import json
-import bmc_ssh_utils as bsu
 
 ip_regex = r"\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}"
 
@@ -28,7 +29,7 @@
     """
 
     ip_list = list()
-    stdout = subprocess.check_output(['hostname', '--all-fqdns'], shell=True)
+    stdout = subprocess.check_output(["hostname", "--all-fqdns"], shell=True)
     host_fqdns = stdout.decode("utf-8").strip()
     ip_address = socket.gethostbyname(str(host_fqdns))
     ip_list.append(ip_address)
@@ -46,7 +47,7 @@
     """
 
     # IP address netmask format: '0.0.0.0/255.255.252.0'
-    return ipaddress.ip_network('0.0.0.0/' + netmask).prefixlen
+    return ipaddress.ip_network("0.0.0.0/" + netmask).prefixlen
 
 
 def get_netmask_address(prefix_len):
@@ -58,7 +59,7 @@
     """
 
     # IP address netmask format: '0.0.0.0/24'
-    return ipaddress.ip_network('0.0.0.0/' + prefix_len).netmask
+    return ipaddress.ip_network("0.0.0.0/" + prefix_len).netmask
 
 
 def parse_nping_output(output):
@@ -101,20 +102,26 @@
 
     lines = output.split("\n")
     # Obtain only the lines of interest.
-    lines = list(filter(lambda x: re.match(r"(Max rtt|Raw packets|TCP connection)", x),
-                        lines))
+    lines = list(
+        filter(
+            lambda x: re.match(r"(Max rtt|Raw packets|TCP connection)", x),
+            lines,
+        )
+    )
 
     key_value_list = []
     for line in lines:
         key_value_list += line.split("|")
     nping_result = vf.key_value_list_to_dict(key_value_list)
     # Extract percent_lost/percent_failed value from lost/failed field.
-    if 'lost' in nping_result:
-        nping_result['percent_lost'] = \
-            float(nping_result['lost'].split(" ")[-1].strip("()%"))
+    if "lost" in nping_result:
+        nping_result["percent_lost"] = float(
+            nping_result["lost"].split(" ")[-1].strip("()%")
+        )
     else:
-        nping_result['percent_failed'] = \
-            float(nping_result['failed'].split(" ")[-1].strip("()%"))
+        nping_result["percent_failed"] = float(
+            nping_result["failed"].split(" ")[-1].strip("()%")
+        )
     return nping_result
 
 
@@ -158,7 +165,7 @@
                                     command.  Do a 'man nping' for details.
     """
 
-    command_string = gc.create_command_string('nping', host, options)
+    command_string = gc.create_command_string("nping", host, options)
     rc, output = gc.shell_cmd(command_string, print_output=0, ignore_err=0)
     if parse_results:
         return parse_nping_output(output)
@@ -205,7 +212,9 @@
     (etc.)
     """
 
-    stdout, stderr, rc = bsu.bmc_execute_command("cat /usr/share/ipmi-providers/channel_config.json")
+    stdout, stderr, rc = bsu.bmc_execute_command(
+        "cat /usr/share/ipmi-providers/channel_config.json"
+    )
     return json.loads(stdout)
 
 
@@ -215,7 +224,11 @@
      this function.
     """
 
-    return vf.filter_struct(get_channel_config(), "[('medium_type', 'other-lan|lan-802.3')]", regex=1)
+    return vf.filter_struct(
+        get_channel_config(),
+        "[('medium_type', 'other-lan|lan-802.3')]",
+        regex=1,
+    )
 
 
 def get_channel_access_config(file_name):
diff --git a/lib/bmc_redfish.py b/lib/bmc_redfish.py
index 2ae405a..0e97af7 100644
--- a/lib/bmc_redfish.py
+++ b/lib/bmc_redfish.py
@@ -4,17 +4,16 @@
 See class prolog below for details.
 """
 
-import sys
-import re
 import json
-from redfish_plus import redfish_plus
-from robot.libraries.BuiltIn import BuiltIn
+import re
+import sys
 from json.decoder import JSONDecodeError
-from redfish.rest.v1 import InvalidCredentialsError
 
 import func_args as fa
 import gen_print as gp
-
+from redfish.rest.v1 import InvalidCredentialsError
+from redfish_plus import redfish_plus
+from robot.libraries.BuiltIn import BuiltIn
 
 MTLS_ENABLED = BuiltIn().get_variable_value("${MTLS_ENABLED}")
 
@@ -44,7 +43,7 @@
         """
         self.__inited__ = False
         try:
-            if MTLS_ENABLED == 'True':
+            if MTLS_ENABLED == "True":
                 self.__inited__ = True
             else:
                 super(bmc_redfish, self).__init__(*args, **kwargs)
@@ -70,7 +69,7 @@
         kwargs                      See parent class method prolog for details.
         """
 
-        if MTLS_ENABLED == 'True':
+        if MTLS_ENABLED == "True":
             return None
         if not self.__inited__:
             message = "bmc_redfish.__init__() was never successfully run.  It "
@@ -82,11 +81,12 @@
         openbmc_password = BuiltIn().get_variable_value("${OPENBMC_PASSWORD}")
         username, args, kwargs = fa.pop_arg(openbmc_username, *args, **kwargs)
         password, args, kwargs = fa.pop_arg(openbmc_password, *args, **kwargs)
-        auth, args, kwargs = fa.pop_arg('session', *args, **kwargs)
+        auth, args, kwargs = fa.pop_arg("session", *args, **kwargs)
 
         try:
-            super(bmc_redfish, self).login(username, password, auth,
-                                           *args, **kwargs)
+            super(bmc_redfish, self).login(
+                username, password, auth, *args, **kwargs
+            )
         # Handle InvalidCredentialsError.
         # (raise redfish.rest.v1.InvalidCredentialsError if not [200, 201, 202, 204])
         except InvalidCredentialsError:
@@ -96,8 +96,9 @@
             e_message = "Re-try login due to exception and "
             e_message += "it is likely error response from server side."
             BuiltIn().log_to_console(e_message)
-            super(bmc_redfish, self).login(username, password, auth,
-                                           *args, **kwargs)
+            super(bmc_redfish, self).login(
+                username, password, auth, *args, **kwargs
+            )
         # Handle JSONDecodeError and others.
         except JSONDecodeError:
             except_type, except_value, except_traceback = sys.exc_info()
@@ -106,8 +107,9 @@
             e_message = "Re-try login due to JSONDecodeError exception and "
             e_message += "it is likely error response from server side."
             BuiltIn().log_to_console(e_message)
-            super(bmc_redfish, self).login(username, password, auth,
-                                           *args, **kwargs)
+            super(bmc_redfish, self).login(
+                username, password, auth, *args, **kwargs
+            )
         except ValueError:
             except_type, except_value, except_traceback = sys.exc_info()
             BuiltIn().log_to_console(str(except_type))
@@ -116,8 +118,7 @@
             BuiltIn().log_to_console(e_message)
 
     def logout(self):
-
-        if MTLS_ENABLED == 'True':
+        if MTLS_ENABLED == "True":
             return None
         else:
             super(bmc_redfish, self).logout()
@@ -150,7 +151,7 @@
         """
 
         resp = self.get(*args, **kwargs)
-        return resp.dict if hasattr(resp, 'dict') else {}
+        return resp.dict if hasattr(resp, "dict") else {}
 
     def get_attribute(self, path, attribute, default=None, *args, **kwargs):
         r"""
@@ -183,8 +184,9 @@
         kwargs                      See parent class get() prolog for details.
         """
 
-        return self.get_properties(path, *args, **kwargs).get(attribute,
-                                                              default)
+        return self.get_properties(path, *args, **kwargs).get(
+            attribute, default
+        )
 
     def get_session_info(self):
         r"""
@@ -194,7 +196,9 @@
 
         return self.get_session_key(), self.get_session_location()
 
-    def enumerate(self, resource_path, return_json=1, include_dead_resources=False):
+    def enumerate(
+        self, resource_path, return_json=1, include_dead_resources=False
+    ):
         r"""
         Perform a GET enumerate request and return available resource paths.
 
@@ -224,38 +228,61 @@
                 # Example: '/redfish/v1/JsonSchemas/' and sub resources.
                 #          '/redfish/v1/SessionService'
                 #          '/redfish/v1/Managers/bmc#/Oem'
-                if ('JsonSchemas' in resource) or ('SessionService' in resource) or ('#' in resource):
+                if (
+                    ("JsonSchemas" in resource)
+                    or ("SessionService" in resource)
+                    or ("#" in resource)
+                ):
                     continue
 
-                self._rest_response_ = self.get(resource, valid_status_codes=[200, 404, 500])
+                self._rest_response_ = self.get(
+                    resource, valid_status_codes=[200, 404, 500]
+                )
                 # Enumeration is done for available resources ignoring the ones for which response is not
                 # obtained.
                 if self._rest_response_.status != 200:
                     if include_dead_resources:
                         try:
-                            dead_resources[self._rest_response_.status].append(resource)
+                            dead_resources[self._rest_response_.status].append(
+                                resource
+                            )
                         except KeyError:
-                            dead_resources[self._rest_response_.status] = [resource]
+                            dead_resources[self._rest_response_.status] = [
+                                resource
+                            ]
                     continue
                 self.walk_nested_dict(self._rest_response_.dict, url=resource)
 
             enumerated_resources.update(set(resources_to_be_enumerated))
-            resources_to_be_enumerated = tuple(self.__pending_enumeration - enumerated_resources)
+            resources_to_be_enumerated = tuple(
+                self.__pending_enumeration - enumerated_resources
+            )
 
         if return_json:
             if include_dead_resources:
-                return json.dumps(self.__result, sort_keys=True,
-                                  indent=4, separators=(',', ': ')), dead_resources
+                return (
+                    json.dumps(
+                        self.__result,
+                        sort_keys=True,
+                        indent=4,
+                        separators=(",", ": "),
+                    ),
+                    dead_resources,
+                )
             else:
-                return json.dumps(self.__result, sort_keys=True,
-                                  indent=4, separators=(',', ': '))
+                return json.dumps(
+                    self.__result,
+                    sort_keys=True,
+                    indent=4,
+                    separators=(",", ": "),
+                )
         else:
             if include_dead_resources:
                 return self.__result, dead_resources
             else:
                 return self.__result
 
-    def walk_nested_dict(self, data, url=''):
+    def walk_nested_dict(self, data, url=""):
         r"""
         Parse through the nested dictionary and get the resource id paths.
 
@@ -263,21 +290,22 @@
         data                        Nested dictionary data from response message.
         url                         Resource for which the response is obtained in data.
         """
-        url = url.rstrip('/')
+        url = url.rstrip("/")
 
         for key, value in data.items():
-
             # Recursion if nested dictionary found.
             if isinstance(value, dict):
                 self.walk_nested_dict(value)
             else:
                 # Value contains a list of dictionaries having member data.
-                if 'Members' == key:
+                if "Members" == key:
                     if isinstance(value, list):
                         for memberDict in value:
-                            self.__pending_enumeration.add(memberDict['@odata.id'])
-                if '@odata.id' == key:
-                    value = value.rstrip('/')
+                            self.__pending_enumeration.add(
+                                memberDict["@odata.id"]
+                            )
+                if "@odata.id" == key:
+                    value = value.rstrip("/")
                     # Data for the given url.
                     if value == url:
                         self.__result[url] = data
@@ -323,7 +351,9 @@
         """
 
         member_list = []
-        self._rest_response_ = self.get(resource_path, valid_status_codes=[200])
+        self._rest_response_ = self.get(
+            resource_path, valid_status_codes=[200]
+        )
 
         try:
             for member in self._rest_response_.dict["Members"]:
@@ -334,7 +364,7 @@
 
         # Filter elements in the list and return matched elements.
         if filter is not None:
-            regex = '.*/' + filter + '[^/]*$'
+            regex = ".*/" + filter + "[^/]*$"
             return [x for x in member_list if re.match(regex, x)]
 
         return member_list
diff --git a/lib/bmc_redfish_utils.py b/lib/bmc_redfish_utils.py
index 8eade5f..e93eee3 100644
--- a/lib/bmc_redfish_utils.py
+++ b/lib/bmc_redfish_utils.py
@@ -6,15 +6,15 @@
 
 import json
 import re
-from robot.libraries.BuiltIn import BuiltIn
+
 import gen_print as gp
+from robot.libraries.BuiltIn import BuiltIn
 
 MTLS_ENABLED = BuiltIn().get_variable_value("${MTLS_ENABLED}")
 
 
 class bmc_redfish_utils(object):
-
-    ROBOT_LIBRARY_SCOPE = 'TEST SUITE'
+    ROBOT_LIBRARY_SCOPE = "TEST SUITE"
 
     def __init__(self):
         r"""
@@ -22,22 +22,25 @@
         """
         # Obtain a reference to the global redfish object.
         self.__inited__ = False
-        self._redfish_ = BuiltIn().get_library_instance('redfish')
+        self._redfish_ = BuiltIn().get_library_instance("redfish")
 
-        if MTLS_ENABLED == 'True':
+        if MTLS_ENABLED == "True":
             self.__inited__ = True
         else:
             # There is a possibility that a given driver support both redfish and
             # legacy REST.
             self._redfish_.login()
-            self._rest_response_ = \
-                self._redfish_.get("/xyz/openbmc_project/", valid_status_codes=[200, 404])
+            self._rest_response_ = self._redfish_.get(
+                "/xyz/openbmc_project/", valid_status_codes=[200, 404]
+            )
 
             # If REST URL /xyz/openbmc_project/ is supported.
             if self._rest_response_.status == 200:
                 self.__inited__ = True
 
-        BuiltIn().set_global_variable("${REDFISH_REST_SUPPORTED}", self.__inited__)
+        BuiltIn().set_global_variable(
+            "${REDFISH_REST_SUPPORTED}", self.__inited__
+        )
 
     def get_redfish_session_info(self):
         r"""
@@ -50,7 +53,7 @@
         """
         session_dict = {
             "key": self._redfish_.get_session_key(),
-            "location": self._redfish_.get_session_location()
+            "location": self._redfish_.get_session_location(),
         }
         return session_dict
 
@@ -115,9 +118,11 @@
 
             # Iterate and check if path object has the attribute.
             for child_path_idx in child_path_list:
-                if ('JsonSchemas' in child_path_idx)\
-                        or ('SessionService' in child_path_idx)\
-                        or ('#' in child_path_idx):
+                if (
+                    ("JsonSchemas" in child_path_idx)
+                    or ("SessionService" in child_path_idx)
+                    or ("#" in child_path_idx)
+                ):
                     continue
                 if self.get_attribute(child_path_idx, attribute):
                     valid_path_list.append(child_path_idx)
@@ -180,7 +185,7 @@
         # Return the matching target URL entry.
         for target in target_list:
             # target "/redfish/v1/Systems/system/Actions/ComputerSystem.Reset"
-            attribute_in_uri = target.rsplit('/', 1)[-1]
+            attribute_in_uri = target.rsplit("/", 1)[-1]
             # attribute_in_uri "ComputerSystem.Reset"
             if target_attribute == attribute_in_uri:
                 return target
@@ -226,9 +231,9 @@
         # Set quiet variable to keep subordinate get() calls quiet.
         quiet = 1
         self.__pending_enumeration = set()
-        self._rest_response_ = \
-            self._redfish_.get(resource_path,
-                               valid_status_codes=[200, 404, 500])
+        self._rest_response_ = self._redfish_.get(
+            resource_path, valid_status_codes=[200, 404, 500]
+        )
 
         # Return empty list.
         if self._rest_response_.status != 200:
@@ -237,17 +242,18 @@
         if not self.__pending_enumeration:
             return resource_path
         for resource in self.__pending_enumeration.copy():
-            self._rest_response_ = \
-                self._redfish_.get(resource,
-                                   valid_status_codes=[200, 404, 500])
+            self._rest_response_ = self._redfish_.get(
+                resource, valid_status_codes=[200, 404, 500]
+            )
 
             if self._rest_response_.status != 200:
                 continue
             self.walk_nested_dict(self._rest_response_.dict)
         return list(sorted(self.__pending_enumeration))
 
-    def enumerate_request(self, resource_path, return_json=1,
-                          include_dead_resources=False):
+    def enumerate_request(
+        self, resource_path, return_json=1, include_dead_resources=False
+    ):
         r"""
         Perform a GET enumerate request and return available resource paths.
 
@@ -292,71 +298,91 @@
                 # Example: '/redfish/v1/JsonSchemas/' and sub resources.
                 #          '/redfish/v1/SessionService'
                 #          '/redfish/v1/Managers/bmc#/Oem'
-                if ('JsonSchemas' in resource) or ('SessionService' in resource)\
-                        or ('PostCodes' in resource) or ('Registries' in resource)\
-                        or ('Journal' in resource)\
-                        or ('#' in resource):
+                if (
+                    ("JsonSchemas" in resource)
+                    or ("SessionService" in resource)
+                    or ("PostCodes" in resource)
+                    or ("Registries" in resource)
+                    or ("Journal" in resource)
+                    or ("#" in resource)
+                ):
                     continue
 
-                self._rest_response_ = \
-                    self._redfish_.get(resource, valid_status_codes=[200, 404, 405, 500])
+                self._rest_response_ = self._redfish_.get(
+                    resource, valid_status_codes=[200, 404, 405, 500]
+                )
                 # Enumeration is done for available resources ignoring the
                 # ones for which response is not obtained.
                 if self._rest_response_.status != 200:
                     if include_dead_resources:
                         try:
                             dead_resources[self._rest_response_.status].append(
-                                resource)
+                                resource
+                            )
                         except KeyError:
-                            dead_resources[self._rest_response_.status] = \
-                                [resource]
+                            dead_resources[self._rest_response_.status] = [
+                                resource
+                            ]
                     continue
 
                 self.walk_nested_dict(self._rest_response_.dict, url=resource)
 
             enumerated_resources.update(set(resources_to_be_enumerated))
-            resources_to_be_enumerated = \
-                tuple(self.__pending_enumeration - enumerated_resources)
+            resources_to_be_enumerated = tuple(
+                self.__pending_enumeration - enumerated_resources
+            )
 
         if return_json:
             if include_dead_resources:
-                return json.dumps(self.__result, sort_keys=True,
-                                  indent=4, separators=(',', ': ')), dead_resources
+                return (
+                    json.dumps(
+                        self.__result,
+                        sort_keys=True,
+                        indent=4,
+                        separators=(",", ": "),
+                    ),
+                    dead_resources,
+                )
             else:
-                return json.dumps(self.__result, sort_keys=True,
-                                  indent=4, separators=(',', ': '))
+                return json.dumps(
+                    self.__result,
+                    sort_keys=True,
+                    indent=4,
+                    separators=(",", ": "),
+                )
         else:
             if include_dead_resources:
                 return self.__result, dead_resources
             else:
                 return self.__result
 
-    def walk_nested_dict(self, data, url=''):
+    def walk_nested_dict(self, data, url=""):
         r"""
         Parse through the nested dictionary and get the resource id paths.
         Description of argument(s):
         data    Nested dictionary data from response message.
         url     Resource for which the response is obtained in data.
         """
-        url = url.rstrip('/')
+        url = url.rstrip("/")
 
         for key, value in data.items():
-
             # Recursion if nested dictionary found.
             if isinstance(value, dict):
                 self.walk_nested_dict(value)
             else:
                 # Value contains a list of dictionaries having member data.
-                if 'Members' == key:
+                if "Members" == key:
                     if isinstance(value, list):
                         for memberDict in value:
                             if isinstance(memberDict, str):
                                 self.__pending_enumeration.add(memberDict)
                             else:
-                                self.__pending_enumeration.add(memberDict['@odata.id'])
+                                self.__pending_enumeration.add(
+                                    memberDict["@odata.id"]
+                                )
 
-                if '@odata.id' == key:
-                    value = value.rstrip('/')
+                if "@odata.id" == key:
+                    value = value.rstrip("/")
                     # Data for the given url.
                     if value == url:
                         self.__result[url] = data
diff --git a/lib/bmc_ssh_utils.py b/lib/bmc_ssh_utils.py
index fdd376f..b9ead59 100755
--- a/lib/bmc_ssh_utils.py
+++ b/lib/bmc_ssh_utils.py
@@ -5,19 +5,22 @@
 """
 
 import os
-import gen_valid as gv
+
 import gen_robot_ssh as grs
+import gen_valid as gv
 from robot.libraries.BuiltIn import BuiltIn
 
 
-def bmc_execute_command(cmd_buf,
-                        print_out=0,
-                        print_err=0,
-                        ignore_err=0,
-                        fork=0,
-                        quiet=None,
-                        test_mode=None,
-                        time_out=None):
+def bmc_execute_command(
+    cmd_buf,
+    print_out=0,
+    print_err=0,
+    ignore_err=0,
+    fork=0,
+    quiet=None,
+    test_mode=None,
+    time_out=None,
+):
     r"""
     Run the given command in an BMC SSH session and return the stdout, stderr and the return code.
 
@@ -45,10 +48,12 @@
     # Get global BMC variable values.
     openbmc_host = BuiltIn().get_variable_value("${OPENBMC_HOST}", default="")
     ssh_port = BuiltIn().get_variable_value("${SSH_PORT}", default="22")
-    openbmc_username = BuiltIn().get_variable_value("${OPENBMC_USERNAME}",
-                                                    default="")
-    openbmc_password = BuiltIn().get_variable_value("${OPENBMC_PASSWORD}",
-                                                    default="")
+    openbmc_username = BuiltIn().get_variable_value(
+        "${OPENBMC_USERNAME}", default=""
+    )
+    openbmc_password = BuiltIn().get_variable_value(
+        "${OPENBMC_PASSWORD}", default=""
+    )
 
     if not gv.valid_value(openbmc_host):
         return "", "", 1
@@ -59,30 +64,47 @@
     if not gv.valid_value(ssh_port):
         return "", "", 1
 
-    open_connection_args = {'host': openbmc_host, 'alias': 'bmc_connection',
-                            'timeout': '25.0', 'prompt': '# ', 'port': ssh_port}
-    login_args = {'username': openbmc_username, 'password': openbmc_password}
+    open_connection_args = {
+        "host": openbmc_host,
+        "alias": "bmc_connection",
+        "timeout": "25.0",
+        "prompt": "# ",
+        "port": ssh_port,
+    }
+    login_args = {"username": openbmc_username, "password": openbmc_password}
 
-    openbmc_user_type = os.environ.get('USER_TYPE', "") or \
-        BuiltIn().get_variable_value("${USER_TYPE}", default="")
-    if openbmc_user_type == 'sudo':
-        cmd_buf = 'sudo -i ' + cmd_buf
-    return grs.execute_ssh_command(cmd_buf, open_connection_args, login_args,
-                                   print_out, print_err, ignore_err, fork,
-                                   quiet, test_mode, time_out)
+    openbmc_user_type = os.environ.get(
+        "USER_TYPE", ""
+    ) or BuiltIn().get_variable_value("${USER_TYPE}", default="")
+    if openbmc_user_type == "sudo":
+        cmd_buf = "sudo -i " + cmd_buf
+    return grs.execute_ssh_command(
+        cmd_buf,
+        open_connection_args,
+        login_args,
+        print_out,
+        print_err,
+        ignore_err,
+        fork,
+        quiet,
+        test_mode,
+        time_out,
+    )
 
 
-def os_execute_command(cmd_buf,
-                       print_out=0,
-                       print_err=0,
-                       ignore_err=0,
-                       fork=0,
-                       quiet=None,
-                       test_mode=None,
-                       time_out=None,
-                       os_host="",
-                       os_username="",
-                       os_password=""):
+def os_execute_command(
+    cmd_buf,
+    print_out=0,
+    print_err=0,
+    ignore_err=0,
+    fork=0,
+    quiet=None,
+    test_mode=None,
+    time_out=None,
+    os_host="",
+    os_username="",
+    os_password="",
+):
     r"""
     Run the given command in an OS SSH session and return the stdout, stderr and the return code.
 
@@ -111,9 +133,13 @@
     if os_host == "":
         os_host = BuiltIn().get_variable_value("${OS_HOST}", default="")
     if os_username == "":
-        os_username = BuiltIn().get_variable_value("${OS_USERNAME}", default="")
+        os_username = BuiltIn().get_variable_value(
+            "${OS_USERNAME}", default=""
+        )
     if os_password == "":
-        os_password = BuiltIn().get_variable_value("${OS_PASSWORD}", default="")
+        os_password = BuiltIn().get_variable_value(
+            "${OS_PASSWORD}", default=""
+        )
 
     if not gv.valid_value(os_host):
         return "", "", 1
@@ -122,21 +148,32 @@
     if not gv.valid_value(os_password):
         return "", "", 1
 
-    open_connection_args = {'host': os_host, 'alias': 'os_connection'}
-    login_args = {'username': os_username, 'password': os_password}
+    open_connection_args = {"host": os_host, "alias": "os_connection"}
+    login_args = {"username": os_username, "password": os_password}
 
-    return grs.execute_ssh_command(cmd_buf, open_connection_args, login_args,
-                                   print_out, print_err, ignore_err, fork,
-                                   quiet, test_mode, time_out)
+    return grs.execute_ssh_command(
+        cmd_buf,
+        open_connection_args,
+        login_args,
+        print_out,
+        print_err,
+        ignore_err,
+        fork,
+        quiet,
+        test_mode,
+        time_out,
+    )
 
 
-def xcat_execute_command(cmd_buf,
-                         print_out=0,
-                         print_err=0,
-                         ignore_err=0,
-                         fork=0,
-                         quiet=None,
-                         test_mode=None):
+def xcat_execute_command(
+    cmd_buf,
+    print_out=0,
+    print_err=0,
+    ignore_err=0,
+    fork=0,
+    quiet=None,
+    test_mode=None,
+):
     r"""
     Run the given command in an XCAT SSH session and return the stdout, stderr and the return code.
 
@@ -161,12 +198,13 @@
 
     # Get global XCAT variable values.
     xcat_host = BuiltIn().get_variable_value("${XCAT_HOST}", default="")
-    xcat_username = BuiltIn().get_variable_value("${XCAT_USERNAME}",
-                                                 default="")
-    xcat_password = BuiltIn().get_variable_value("${XCAT_PASSWORD}",
-                                                 default="")
-    xcat_port = BuiltIn().get_variable_value("${XCAT_PORT}",
-                                             default="22")
+    xcat_username = BuiltIn().get_variable_value(
+        "${XCAT_USERNAME}", default=""
+    )
+    xcat_password = BuiltIn().get_variable_value(
+        "${XCAT_PASSWORD}", default=""
+    )
+    xcat_port = BuiltIn().get_variable_value("${XCAT_PORT}", default="22")
 
     if not gv.valid_value(xcat_host):
         return "", "", 1
@@ -177,19 +215,27 @@
     if not gv.valid_value(xcat_port):
         return "", "", 1
 
-    open_connection_args = {'host': xcat_host, 'alias': 'xcat_connection',
-                            'port': xcat_port}
-    login_args = {'username': xcat_username, 'password': xcat_password}
+    open_connection_args = {
+        "host": xcat_host,
+        "alias": "xcat_connection",
+        "port": xcat_port,
+    }
+    login_args = {"username": xcat_username, "password": xcat_password}
 
-    return grs.execute_ssh_command(cmd_buf, open_connection_args, login_args,
-                                   print_out, print_err, ignore_err, fork,
-                                   quiet, test_mode)
+    return grs.execute_ssh_command(
+        cmd_buf,
+        open_connection_args,
+        login_args,
+        print_out,
+        print_err,
+        ignore_err,
+        fork,
+        quiet,
+        test_mode,
+    )
 
 
-def device_write(cmd_buf,
-                 print_out=0,
-                 quiet=None,
-                 test_mode=None):
+def device_write(cmd_buf, print_out=0, quiet=None, test_mode=None):
     r"""
     Write the given command in a device SSH session and return the stdout, stderr and the return code.
 
@@ -216,12 +262,13 @@
 
     # Get global DEVICE variable values.
     device_host = BuiltIn().get_variable_value("${DEVICE_HOST}", default="")
-    device_username = BuiltIn().get_variable_value("${DEVICE_USERNAME}",
-                                                   default="")
-    device_password = BuiltIn().get_variable_value("${DEVICE_PASSWORD}",
-                                                   default="")
-    device_port = BuiltIn().get_variable_value("${DEVICE_PORT}",
-                                               default="22")
+    device_username = BuiltIn().get_variable_value(
+        "${DEVICE_USERNAME}", default=""
+    )
+    device_password = BuiltIn().get_variable_value(
+        "${DEVICE_PASSWORD}", default=""
+    )
+    device_port = BuiltIn().get_variable_value("${DEVICE_PORT}", default="22")
 
     if not gv.valid_value(device_host):
         return "", "", 1
@@ -232,10 +279,21 @@
     if not gv.valid_value(device_port):
         return "", "", 1
 
-    open_connection_args = {'host': device_host, 'alias': 'device_connection',
-                            'port': device_port}
-    login_args = {'username': device_username, 'password': device_password}
+    open_connection_args = {
+        "host": device_host,
+        "alias": "device_connection",
+        "port": device_port,
+    }
+    login_args = {"username": device_username, "password": device_password}
 
-    return grs.execute_ssh_command(cmd_buf, open_connection_args, login_args,
-                                   print_out, print_err=0, ignore_err=1,
-                                   fork=0, quiet=quiet, test_mode=test_mode)
+    return grs.execute_ssh_command(
+        cmd_buf,
+        open_connection_args,
+        login_args,
+        print_out,
+        print_err=0,
+        ignore_err=1,
+        fork=0,
+        quiet=quiet,
+        test_mode=test_mode,
+    )
diff --git a/lib/boot_data.py b/lib/boot_data.py
index eaa7a52..b767e21 100755
--- a/lib/boot_data.py
+++ b/lib/boot_data.py
@@ -5,36 +5,40 @@
 boot_results_table.
 """
 
+import glob
+import json
 import os
 import tempfile
-import json
-import glob
-from tally_sheet import *
 
 from robot.libraries.BuiltIn import BuiltIn
+from tally_sheet import *
+
 try:
     from robot.utils import DotDict
 except ImportError:
     import collections
 
+import gen_cmd as gc
+import gen_misc as gm
 import gen_print as gp
 import gen_valid as gv
-import gen_misc as gm
-import gen_cmd as gc
 import var_funcs as vf
 
 # The code base directory will be one level up from the directory containing this module.
 code_base_dir_path = os.path.dirname(os.path.dirname(__file__)) + os.sep
 
-redfish_support_trans_state = int(os.environ.get('REDFISH_SUPPORT_TRANS_STATE', 0)) or \
-    int(BuiltIn().get_variable_value("${REDFISH_SUPPORT_TRANS_STATE}", default=0))
+redfish_support_trans_state = int(
+    os.environ.get("REDFISH_SUPPORT_TRANS_STATE", 0)
+) or int(
+    BuiltIn().get_variable_value("${REDFISH_SUPPORT_TRANS_STATE}", default=0)
+)
 
-platform_arch_type = os.environ.get('PLATFORM_ARCH_TYPE', '') or \
-    BuiltIn().get_variable_value("${PLATFORM_ARCH_TYPE}", default="power")
+platform_arch_type = os.environ.get(
+    "PLATFORM_ARCH_TYPE", ""
+) or BuiltIn().get_variable_value("${PLATFORM_ARCH_TYPE}", default="power")
 
 
-def create_boot_table(file_path=None,
-                      os_host=""):
+def create_boot_table(file_path=None, os_host=""):
     r"""
     Read the boot table JSON file, convert it to an object and return it.
 
@@ -54,11 +58,17 @@
     """
     if file_path is None:
         if redfish_support_trans_state and platform_arch_type != "x86":
-            file_path = os.environ.get('BOOT_TABLE_PATH', 'data/boot_table_redfish.json')
+            file_path = os.environ.get(
+                "BOOT_TABLE_PATH", "data/boot_table_redfish.json"
+            )
         elif platform_arch_type == "x86":
-            file_path = os.environ.get('BOOT_TABLE_PATH', 'data/boot_table_x86.json')
+            file_path = os.environ.get(
+                "BOOT_TABLE_PATH", "data/boot_table_x86.json"
+            )
         else:
-            file_path = os.environ.get('BOOT_TABLE_PATH', 'data/boot_table.json')
+            file_path = os.environ.get(
+                "BOOT_TABLE_PATH", "data/boot_table.json"
+            )
 
     if not file_path.startswith("/"):
         file_path = code_base_dir_path + file_path
@@ -77,7 +87,7 @@
     # the boot entries.
     if os_host == "":
         for boot in boot_table:
-            state_keys = ['start', 'end']
+            state_keys = ["start", "end"]
             for state_key in state_keys:
                 for sub_state in list(boot_table[boot][state_key]):
                     if sub_state.startswith("os_"):
@@ -149,8 +159,7 @@
     return boot_lists
 
 
-def valid_boot_list(boot_list,
-                    valid_boot_types):
+def valid_boot_list(boot_list, valid_boot_types):
     r"""
     Verify that each entry in boot_list is a supported boot test.
 
@@ -162,24 +171,21 @@
 
     for boot_name in boot_list:
         boot_name = boot_name.strip(" ")
-        error_message = gv.valid_value(boot_name,
-                                       valid_values=valid_boot_types,
-                                       var_name="boot_name")
+        error_message = gv.valid_value(
+            boot_name, valid_values=valid_boot_types, var_name="boot_name"
+        )
         if error_message != "":
             BuiltIn().fail(gp.sprint_error(error_message))
 
 
 class boot_results:
-
     r"""
     This class defines a boot_results table.
     """
 
-    def __init__(self,
-                 boot_table,
-                 boot_pass=0,
-                 boot_fail=0,
-                 obj_name='boot_results'):
+    def __init__(
+        self, boot_table, boot_pass=0, boot_fail=0, obj_name="boot_results"
+    ):
         r"""
         Initialize the boot results object.
 
@@ -202,13 +208,13 @@
         self.__initial_boot_fail = boot_fail
 
         # Create boot_results_fields for use in creating boot_results table.
-        boot_results_fields = DotDict([('total', 0), ('pass', 0), ('fail', 0)])
+        boot_results_fields = DotDict([("total", 0), ("pass", 0), ("fail", 0)])
         # Create boot_results table.
-        self.__boot_results = tally_sheet('boot type',
-                                          boot_results_fields,
-                                          'boot_test_results')
-        self.__boot_results.set_sum_fields(['total', 'pass', 'fail'])
-        self.__boot_results.set_calc_fields(['total=pass+fail'])
+        self.__boot_results = tally_sheet(
+            "boot type", boot_results_fields, "boot_test_results"
+        )
+        self.__boot_results.set_sum_fields(["total", "pass", "fail"])
+        self.__boot_results.set_calc_fields(["total=pass+fail"])
         # Create one row in the result table for each kind of boot test in the boot_table (i.e. for all
         # supported boot tests).
         for boot_name in list(boot_table.keys()):
@@ -230,12 +236,12 @@
         """
 
         totals_line = self.__boot_results.calc()
-        return totals_line['pass'] + self.__initial_boot_pass,\
-            totals_line['fail'] + self.__initial_boot_fail
+        return (
+            totals_line["pass"] + self.__initial_boot_pass,
+            totals_line["fail"] + self.__initial_boot_fail,
+        )
 
-    def update(self,
-               boot_type,
-               boot_status):
+    def update(self, boot_type, boot_status):
         r"""
         Update our boot_results_table.  This includes:
         - Updating the record for the given boot_type by incrementing the pass or fail field.
@@ -250,8 +256,7 @@
         self.__boot_results.inc_row_field(boot_type, boot_status.lower())
         self.__boot_results.calc()
 
-    def sprint_report(self,
-                      header_footer="\n"):
+    def sprint_report(self, header_footer="\n"):
         r"""
         String-print the formatted boot_resuls_table and return them.
 
@@ -268,9 +273,7 @@
 
         return buffer
 
-    def print_report(self,
-                     header_footer="\n",
-                     quiet=None):
+    def print_report(self, header_footer="\n", quiet=None):
         r"""
         Print the formatted boot_resuls_table to the console.
 
@@ -280,7 +283,7 @@
                                     stack to get the default value.
         """
 
-        quiet = int(gm.dft(quiet, gp.get_stack_var('quiet', 0)))
+        quiet = int(gm.dft(quiet, gp.get_stack_var("quiet", 0)))
 
         gp.qprint(self.sprint_report(header_footer))
 
@@ -307,9 +310,7 @@
         gp.gp_print(self.sprint_obj())
 
 
-def create_boot_results_file_path(pgm_name,
-                                  openbmc_nickname,
-                                  master_pid):
+def create_boot_results_file_path(pgm_name, openbmc_nickname, master_pid):
     r"""
     Create a file path to be used to store a boot_results object.
 
@@ -318,7 +319,7 @@
     openbmc_nickname                The name of the system.  This could be a nickname, a hostname, an IP,
                                     etc.  This will form part of the resulting file name.
     master_pid                      The master process id which will form part of the file name.
-   """
+    """
 
     USER = os.environ.get("USER", "")
     dir_path = "/tmp/" + USER + "/"
@@ -326,8 +327,9 @@
         os.makedirs(dir_path)
 
     file_name_dict = vf.create_var_dict(pgm_name, openbmc_nickname, master_pid)
-    return vf.create_file_path(file_name_dict, dir_path=dir_path,
-                               file_suffix=":boot_results")
+    return vf.create_file_path(
+        file_name_dict, dir_path=dir_path, file_suffix=":boot_results"
+    )
 
 
 def cleanup_boot_results_file():
@@ -341,7 +343,7 @@
     for file_path in file_list:
         # Use parse_file_path to extract info from the file path.
         file_dict = vf.parse_file_path(file_path)
-        if gm.pid_active(file_dict['master_pid']):
+        if gm.pid_active(file_dict["master_pid"]):
             gp.qprint_timen("Preserving " + file_path + ".")
         else:
             gc.cmd_fnc("rm -f " + file_path)
@@ -363,7 +365,7 @@
     boot_history.append(boot_start_message)
 
     # Trim list to max number of entries.
-    del boot_history[:max(0, len(boot_history) - max_boot_history)]
+    del boot_history[: max(0, len(boot_history) - max_boot_history)]
 
 
 def print_boot_history(boot_history, quiet=None):
@@ -375,7 +377,7 @@
                                     stack to get the default value.
     """
 
-    quiet = int(gm.dft(quiet, gp.get_stack_var('quiet', 0)))
+    quiet = int(gm.dft(quiet, gp.get_stack_var("quiet", 0)))
 
     # indent 0, 90 chars wide, linefeed, char is "="
     gp.qprint_dashes(0, 90)
diff --git a/lib/code_update_utils.py b/lib/code_update_utils.py
index 5d69db6..6b44af9 100644
--- a/lib/code_update_utils.py
+++ b/lib/code_update_utils.py
@@ -4,22 +4,21 @@
 This module provides utilities for code updates.
 """
 
-from robot.libraries.BuiltIn import BuiltIn
-
-import bmc_ssh_utils as bsu
-import gen_robot_keyword as keyword
-import gen_print as gp
-import variables as var
-
+import collections
 import os
 import re
 import sys
 import tarfile
 import time
-import collections
+
+import bmc_ssh_utils as bsu
+import gen_print as gp
+import gen_robot_keyword as keyword
+import variables as var
+from robot.libraries.BuiltIn import BuiltIn
 
 robot_pgm_dir_path = os.path.dirname(__file__) + os.sep
-repo_data_path = re.sub('/lib', '/data', robot_pgm_dir_path)
+repo_data_path = re.sub("/lib", "/data", robot_pgm_dir_path)
 sys.path.append(repo_data_path)
 
 
@@ -34,7 +33,7 @@
 
     temp_dict = collections.OrderedDict()
     for key, value in sw_dict.items():
-        if value['image_type'] == image_type:
+        if value["image_type"] == image_type:
             temp_dict[key] = value
         else:
             pass
@@ -51,8 +50,9 @@
     """
 
     taken_priorities = {}
-    _, image_names = keyword.run_key("Get Software Objects  "
-                                     + "version_type=" + image_purpose)
+    _, image_names = keyword.run_key(
+        "Get Software Objects  " + "version_type=" + image_purpose
+    )
 
     for image_name in image_names:
         _, image = keyword.run_key("Get Host Software Property  " + image_name)
@@ -60,9 +60,10 @@
             continue
         image_priority = image["Priority"]
         if image_priority in taken_priorities:
-            BuiltIn().fail("Found active images with the same priority.\n"
-                           + gp.sprint_vars(image,
-                                            taken_priorities[image_priority]))
+            BuiltIn().fail(
+                "Found active images with the same priority.\n"
+                + gp.sprint_vars(image, taken_priorities[image_priority])
+            )
         taken_priorities[image_priority] = image
 
 
@@ -74,17 +75,22 @@
     # Get the version of the image currently running on the BMC.
     _, cur_img_version = keyword.run_key("Get BMC Version")
     # Remove the surrounding double quotes from the version.
-    cur_img_version = cur_img_version.replace('"', '')
+    cur_img_version = cur_img_version.replace('"', "")
 
-    _, images = keyword.run_key("Read Properties  "
-                                + var.SOFTWARE_VERSION_URI + "enumerate")
+    _, images = keyword.run_key(
+        "Read Properties  " + var.SOFTWARE_VERSION_URI + "enumerate"
+    )
 
     for image_name in images:
         _, image_properties = keyword.run_key(
-            "Get Host Software Property  " + image_name)
-        if 'Purpose' in image_properties and 'Version' in image_properties \
-                and image_properties['Purpose'] != var.VERSION_PURPOSE_HOST \
-                and image_properties['Version'] != cur_img_version:
+            "Get Host Software Property  " + image_name
+        )
+        if (
+            "Purpose" in image_properties
+            and "Version" in image_properties
+            and image_properties["Purpose"] != var.VERSION_PURPOSE_HOST
+            and image_properties["Version"] != cur_img_version
+        ):
             return image_name
     BuiltIn().fail("Did not find any non-running BMC images.")
 
@@ -96,11 +102,16 @@
 
     keyword.run_key("Initiate Host PowerOff")
 
-    status, images = keyword.run_key("Get Software Objects  "
-                                     + var.VERSION_PURPOSE_HOST)
+    status, images = keyword.run_key(
+        "Get Software Objects  " + var.VERSION_PURPOSE_HOST
+    )
     for image_name in images:
-        keyword.run_key("Delete Image And Verify  " + image_name + "  "
-                        + var.VERSION_PURPOSE_HOST)
+        keyword.run_key(
+            "Delete Image And Verify  "
+            + image_name
+            + "  "
+            + var.VERSION_PURPOSE_HOST
+        )
 
 
 def wait_for_activation_state_change(version_id, initial_state):
@@ -118,22 +129,23 @@
     retry = 0
     num_read_errors = 0
     read_fail_threshold = 1
-    while (retry < 60):
-        status, software_state = keyword.run_key("Read Properties  "
-                                                 + var.SOFTWARE_VERSION_URI
-                                                 + str(version_id),
-                                                 ignore=1)
-        if status == 'FAIL':
+    while retry < 60:
+        status, software_state = keyword.run_key(
+            "Read Properties  " + var.SOFTWARE_VERSION_URI + str(version_id),
+            ignore=1,
+        )
+        if status == "FAIL":
             num_read_errors += 1
             if num_read_errors > read_fail_threshold:
-                message = "Read errors exceeds threshold:\n " \
-                    + gp.sprint_vars(num_read_errors, read_fail_threshold)
+                message = "Read errors exceeds threshold:\n " + gp.sprint_vars(
+                    num_read_errors, read_fail_threshold
+                )
                 BuiltIn().fail(message)
             time.sleep(10)
             continue
 
         current_state = (software_state)["Activation"]
-        if (initial_state == current_state):
+        if initial_state == current_state:
             time.sleep(10)
             retry += 1
             num_read_errors = 0
@@ -152,10 +164,12 @@
                                     returned to the calling function.
     """
 
-    stdout, stderr, rc = \
-        bsu.bmc_execute_command("cd " + dir_path
-                                + "; stat -c '%Y %n' * |"
-                                + " sort -k1,1nr | head -n 1")
+    stdout, stderr, rc = bsu.bmc_execute_command(
+        "cd "
+        + dir_path
+        + "; stat -c '%Y %n' * |"
+        + " sort -k1,1nr | head -n 1"
+    )
     return stdout.split(" ")[-1]
 
 
@@ -196,9 +210,9 @@
                                     version.
     """
 
-    stdout, stderr, rc = \
-        bsu.bmc_execute_command("cat " + file_path
-                                + " | grep \"version=\"", ignore_err=1)
+    stdout, stderr, rc = bsu.bmc_execute_command(
+        "cat " + file_path + ' | grep "version="', ignore_err=1
+    )
     return (stdout.split("\n")[0]).split("=")[-1]
 
 
@@ -211,9 +225,9 @@
                                     purpose.
     """
 
-    stdout, stderr, rc = \
-        bsu.bmc_execute_command("cat " + file_path
-                                + " | grep \"purpose=\"", ignore_err=1)
+    stdout, stderr, rc = bsu.bmc_execute_command(
+        "cat " + file_path + ' | grep "purpose="', ignore_err=1
+    )
     return stdout.split("=")[-1]
 
 
@@ -229,22 +243,22 @@
                                     one of the images in the upload dir.
     """
 
-    stdout, stderr, rc = \
-        bsu.bmc_execute_command("ls -d " + var.IMAGE_UPLOAD_DIR_PATH + "*/")
+    stdout, stderr, rc = bsu.bmc_execute_command(
+        "ls -d " + var.IMAGE_UPLOAD_DIR_PATH + "*/"
+    )
 
     image_list = stdout.split("\n")
     retry = 0
-    while (retry < 10):
+    while retry < 10:
         for i in range(0, len(image_list)):
             version = get_image_version(image_list[i] + "MANIFEST")
-            if (version == image_version):
+            if version == image_version:
                 return image_list[i]
         time.sleep(10)
         retry += 1
 
 
-def verify_image_upload(image_version,
-                        timeout=3):
+def verify_image_upload(image_version, timeout=3):
     r"""
     Verify the image was uploaded correctly and that it created
     a valid d-bus object. If the first check for the image
@@ -262,16 +276,22 @@
 
     keyword.run_key_u("Open Connection And Log In")
     image_purpose = get_image_purpose(image_path + "MANIFEST")
-    if (image_purpose == var.VERSION_PURPOSE_BMC
-            or image_purpose == var.VERSION_PURPOSE_HOST):
+    if (
+        image_purpose == var.VERSION_PURPOSE_BMC
+        or image_purpose == var.VERSION_PURPOSE_HOST
+    ):
         uri = var.SOFTWARE_VERSION_URI + image_version_id
         ret_values = ""
         for itr in range(timeout * 2):
-            status, ret_values = \
-                keyword.run_key("Read Attribute  " + uri + "  Activation")
+            status, ret_values = keyword.run_key(
+                "Read Attribute  " + uri + "  Activation"
+            )
 
-            if ((ret_values == var.READY) or (ret_values == var.INVALID)
-                    or (ret_values == var.ACTIVE)):
+            if (
+                (ret_values == var.READY)
+                or (ret_values == var.INVALID)
+                or (ret_values == var.ACTIVE)
+            ):
                 return True, image_version_id
             else:
                 time.sleep(30)
@@ -299,13 +319,16 @@
     """
 
     for i in range(timeout * 2):
-        stdout, stderr, rc = \
-            bsu.bmc_execute_command('ls ' + var.IMAGE_UPLOAD_DIR_PATH
-                                    + '*/MANIFEST 2>/dev/null '
-                                    + '| xargs grep -rl "version='
-                                    + image_version + '"')
-        image_dir = os.path.dirname(stdout.split('\n')[0])
-        if '' != image_dir:
-            bsu.bmc_execute_command('rm -rf ' + image_dir)
-            BuiltIn().fail('Found invalid BMC Image: ' + image_dir)
+        stdout, stderr, rc = bsu.bmc_execute_command(
+            "ls "
+            + var.IMAGE_UPLOAD_DIR_PATH
+            + "*/MANIFEST 2>/dev/null "
+            + '| xargs grep -rl "version='
+            + image_version
+            + '"'
+        )
+        image_dir = os.path.dirname(stdout.split("\n")[0])
+        if "" != image_dir:
+            bsu.bmc_execute_command("rm -rf " + image_dir)
+            BuiltIn().fail("Found invalid BMC Image: " + image_dir)
         time.sleep(30)
diff --git a/lib/disable_warning_urllib.py b/lib/disable_warning_urllib.py
index 4c08a24..8527b6d 100644
--- a/lib/disable_warning_urllib.py
+++ b/lib/disable_warning_urllib.py
@@ -1,6 +1,7 @@
 #!/usr/bin/env python3
 import logging
 import warnings
+
 try:
     import httplib
 except ImportError:
@@ -14,6 +15,6 @@
 requests_log.propagate = False
 
 
-class disable_warning_urllib():
+class disable_warning_urllib:
     def do_nothing():
         return
diff --git a/lib/dump_utils.py b/lib/dump_utils.py
index 7c65df9..819d436 100755
--- a/lib/dump_utils.py
+++ b/lib/dump_utils.py
@@ -4,21 +4,22 @@
 This file contains functions which are useful for processing BMC dumps.
 """
 
-import gen_print as gp
-import gen_misc as gm
-import gen_robot_keyword as grk
-import bmc_ssh_utils as bsu
-import var_funcs as vf
+import imp
 import os
 import sys
-import os
-import imp
-import variables as var
 
+import bmc_ssh_utils as bsu
+import gen_misc as gm
+import gen_print as gp
+import gen_robot_keyword as grk
+import var_funcs as vf
+import variables as var
 from robot.libraries.BuiltIn import BuiltIn
 
-base_path = os.path.dirname(os.path.dirname(
-                            imp.find_module("gen_robot_print")[1])) + os.sep
+base_path = (
+    os.path.dirname(os.path.dirname(imp.find_module("gen_robot_print")[1]))
+    + os.sep
+)
 sys.path.append(base_path + "data/")
 
 
@@ -57,9 +58,7 @@
     return output.split("\n")
 
 
-def valid_dump(dump_id,
-               dump_dict=None,
-               quiet=None):
+def valid_dump(dump_id, dump_dict=None, quiet=None):
     r"""
     Verify that dump_id is a valid.  If it is not valid, issue robot failure
     message.
@@ -81,25 +80,26 @@
         dump_dict = get_dump_dict(quiet=quiet)
 
     if dump_id not in dump_dict:
-        message = "The specified dump ID was not found among the existing" \
+        message = (
+            "The specified dump ID was not found among the existing"
             + " dumps:\n"
+        )
         message += gp.sprint_var(dump_id)
         message += gp.sprint_var(dump_dict)
         BuiltIn().fail(gp.sprint_error(message))
 
     if not dump_dict[dump_id].endswith("tar.xz"):
-        message = "There is no \"tar.xz\" file associated with the given" \
+        message = (
+            'There is no "tar.xz" file associated with the given'
             + " dump_id:\n"
+        )
         message += gp.sprint_var(dump_id)
         dump_file_path = dump_dict[dump_id]
         message += gp.sprint_var(dump_file_path)
         BuiltIn().fail(gp.sprint_error(message))
 
 
-def scp_dumps(targ_dir_path,
-              targ_file_prefix="",
-              dump_dict=None,
-              quiet=None):
+def scp_dumps(targ_dir_path, targ_file_prefix="", dump_dict=None, quiet=None):
     r"""
     SCP all dumps from the BMC to the indicated directory on the local system
     and return a list of the new files.
@@ -126,10 +126,12 @@
 
     dump_file_list = []
     for file_path in dump_list:
-        targ_file_path = targ_dir_path + targ_file_prefix \
-            + os.path.basename(file_path)
-        status, ret_values = grk.run_key("scp.Get File  " + file_path
-                                         + "  " + targ_file_path, quiet=quiet)
+        targ_file_path = (
+            targ_dir_path + targ_file_prefix + os.path.basename(file_path)
+        )
+        status, ret_values = grk.run_key(
+            "scp.Get File  " + file_path + "  " + targ_file_path, quiet=quiet
+        )
         dump_file_list.append(targ_file_path)
 
     return dump_file_list
diff --git a/lib/event_notification.py b/lib/event_notification.py
index 363caf4..53c010e 100755
--- a/lib/event_notification.py
+++ b/lib/event_notification.py
@@ -1,14 +1,15 @@
 #!/usr/bin/env python3
 
-import requests
-import websocket
 import json
 import ssl
-import gen_valid as gv
+
 import gen_print as gp
+import gen_valid as gv
+import requests
+import websocket
 
 
-class event_notification():
+class event_notification:
     r"""
     Main class to subscribe and receive event notifications.
     """
@@ -36,20 +37,22 @@
         r"""
         Login and return session object.
         """
-        http_header = {'Content-Type': 'application/json'}
+        http_header = {"Content-Type": "application/json"}
         session = requests.session()
-        response = session.post('https://' + self.__host + '/login',
-                                headers=http_header,
-                                json={"data": [self.__user, self.__password]},
-                                verify=False, timeout=30)
+        response = session.post(
+            "https://" + self.__host + "/login",
+            headers=http_header,
+            json={"data": [self.__user, self.__password]},
+            verify=False,
+            timeout=30,
+        )
         gv.valid_value(response.status_code, valid_values=[200])
         login_response = json.loads(response.text)
         gp.qprint_var(login_response)
-        gv.valid_value(login_response['status'], valid_values=['ok'])
+        gv.valid_value(login_response["status"], valid_values=["ok"])
         return session
 
     def subscribe(self, dbus_path, enable_trace=False):
-
         r"""
         Subscribe to the given path and return a list of event notifications.
 
@@ -79,15 +82,21 @@
         cookies = session.cookies.get_dict()
         # Convert from dictionary to a string of the following format:
         # key=value;key=value...
-        cookies = gp.sprint_var(cookies, fmt=gp.no_header() | gp.strip_brackets(),
-                                col1_width=0, trailing_char="",
-                                delim="=").replace("\n", ";")
+        cookies = gp.sprint_var(
+            cookies,
+            fmt=gp.no_header() | gp.strip_brackets(),
+            col1_width=0,
+            trailing_char="",
+            delim="=",
+        ).replace("\n", ";")
 
         websocket.enableTrace(enable_trace)
-        self.__websocket = websocket.create_connection("wss://{host}/subscribe".format(host=self.__host),
-                                                       sslopt={"cert_reqs": ssl.CERT_NONE},
-                                                       cookie=cookies)
-        dbus_path = [path.strip() for path in dbus_path.split(',')]
+        self.__websocket = websocket.create_connection(
+            "wss://{host}/subscribe".format(host=self.__host),
+            sslopt={"cert_reqs": ssl.CERT_NONE},
+            cookie=cookies,
+        )
+        dbus_path = [path.strip() for path in dbus_path.split(",")]
         dbus_path = {"paths": dbus_path}
 
         self.__websocket.send(json.dumps(dbus_path))
diff --git a/lib/external_intf/management_console_utils.py b/lib/external_intf/management_console_utils.py
index d754bea..5f02732 100644
--- a/lib/external_intf/management_console_utils.py
+++ b/lib/external_intf/management_console_utils.py
@@ -1,14 +1,15 @@
 #!/usr/bin/env python3
 
+import json
 import os
 import re
-import json
-from data import variables
 from collections import OrderedDict
 
-bmc_rec_pattern = '^=(.*)\n(.*)\n(.*)\n(.*)\n(.*)'
-bmc_prop_pattern = [r"\w+", r"\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}", '443']
-bmc_rec_prop = ['hostname', 'address', 'port', 'txt']
+from data import variables
+
+bmc_rec_pattern = "^=(.*)\n(.*)\n(.*)\n(.*)\n(.*)"
+bmc_prop_pattern = [r"\w+", r"\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}", "443"]
+bmc_rec_prop = ["hostname", "address", "port", "txt"]
 
 
 class Exception(Exception):
@@ -30,7 +31,7 @@
 
     try:
         for bmc_key, bmc_val in bmc_records.items():
-            temp_ip = bmc_val.get('address', None)
+            temp_ip = bmc_val.get("address", None)
             if bmc_ip.strip() == temp_ip.strip():
                 return True
         else:
@@ -39,8 +40,9 @@
         return exc_obj
 
 
-def validate_bmc_properties(bmc_prop_pattern, bmc_prop, bmc_value,
-                            bmc_rec_valid):
+def validate_bmc_properties(
+    bmc_prop_pattern, bmc_prop, bmc_value, bmc_rec_valid
+):
     r"""
     This function is to check pattern match in bmc properties.
 
@@ -52,9 +54,10 @@
     """
 
     try:
-        status = \
-            [lambda bmc_prop: re.search(bmc_prop_pattern, bmc_prob),
-                bmc_value]
+        status = [
+            lambda bmc_prop: re.search(bmc_prop_pattern, bmc_prob),
+            bmc_value,
+        ]
         if None in status:
             bmc_rec_valid[bmc_prop] = None
     except Exception as exc_obj:
@@ -72,14 +75,17 @@
     """
 
     try:
-        for bmc_prop_key, bmc_pattern_val in \
-                zip(bmc_rec_prop, bmc_prop_pattern):
+        for bmc_prop_key, bmc_pattern_val in zip(
+            bmc_rec_prop, bmc_prop_pattern
+        ):
             bmc_prop_value = bmc_rec_valid.get(bmc_prop_key, False)
             if bmc_rec_valid[bmc_prop_key] is not False:
-                valid_status = validate_bmc_properties(bmc_pattern_val,
-                                                       bmc_prop_key,
-                                                       bmc_prop_value,
-                                                       bmc_rec_valid)
+                valid_status = validate_bmc_properties(
+                    bmc_pattern_val,
+                    bmc_prop_key,
+                    bmc_prop_value,
+                    bmc_rec_valid,
+                )
                 if None not in bmc_rec_valid.values():
                     return bmc_rec_valid
                 else:
@@ -112,15 +118,16 @@
         exc_obj = None
         bmc_inv = OrderedDict()
         service_count = 0
-        for line in bmc_inv_record.split('\n'):
+        for line in bmc_inv_record.split("\n"):
             if line == "":
                 pass
             elif service_type in line:
-                bmc_inv['service'] = service_type
+                bmc_inv["service"] = service_type
                 service_count += 1
-            elif not line.startswith('=') and service_count == 1:
-                bmc_inv[line.split('=')[0].strip()] = \
-                    str(line.split('=')[-1].strip())[1:-1]
+            elif not line.startswith("=") and service_count == 1:
+                bmc_inv[line.split("=")[0].strip()] = str(
+                    line.split("=")[-1].strip()
+                )[1:-1]
     except Exception as exc_obj:
         return exc_obj
     finally:
@@ -161,10 +168,8 @@
         count = 0
         exe_obj = None
         bmc_inv_list = OrderedDict()
-        for match in re.finditer(bmc_rec_pattern, bmc_records,
-                                 re.MULTILINE):
-            bmc_record, exc_msg = \
-                bmc_inventory(service_type, match.group())
+        for match in re.finditer(bmc_rec_pattern, bmc_records, re.MULTILINE):
+            bmc_record, exc_msg = bmc_inventory(service_type, match.group())
             if bmc_record is not None and exc_msg is None:
                 count += 1
                 bmc_inv_list[count] = bmc_record
@@ -172,6 +177,6 @@
         return exe_obj
     finally:
         if len(bmc_inv_list) == 0:
-            '', exe_obj
+            "", exe_obj
         else:
             return bmc_inv_list, exe_obj
diff --git a/lib/ffdc_cli_robot_script.py b/lib/ffdc_cli_robot_script.py
index eb2cb2e..5d2cd18 100644
--- a/lib/ffdc_cli_robot_script.py
+++ b/lib/ffdc_cli_robot_script.py
@@ -3,11 +3,9 @@
 import os
 import sys
 
-
 from ffdc_collector import ffdc_collector
-from ssh_utility import SSHRemoteclient
-
 from robot.libraries.BuiltIn import BuiltIn as robotBuildIn
+from ssh_utility import SSHRemoteclient
 
 sys.path.append(__file__.split(__file__.split("/")[-1])[0] + "../ffdc")
 
@@ -76,12 +74,15 @@
         # When method is invoked with no parm,
         # use robot variables
         # OPENBMC_HOST, OPENBMC_USERNAME, OPENBMC_PASSWORD, OPENBMC (type)
-        dict_of_parms["OPENBMC_HOST"] = \
-            robotBuildIn().get_variable_value("${OPENBMC_HOST}", default=None)
-        dict_of_parms["OPENBMC_USERNAME"] = \
-            robotBuildIn().get_variable_value("${OPENBMC_USERNAME}", default=None)
-        dict_of_parms["OPENBMC_PASSWORD"] = \
-            robotBuildIn().get_variable_value("${OPENBMC_PASSWORD}", default=None)
+        dict_of_parms["OPENBMC_HOST"] = robotBuildIn().get_variable_value(
+            "${OPENBMC_HOST}", default=None
+        )
+        dict_of_parms["OPENBMC_USERNAME"] = robotBuildIn().get_variable_value(
+            "${OPENBMC_USERNAME}", default=None
+        )
+        dict_of_parms["OPENBMC_PASSWORD"] = robotBuildIn().get_variable_value(
+            "${OPENBMC_PASSWORD}", default=None
+        )
         dict_of_parms["REMOTE_TYPE"] = "OPENBMC"
 
         run_ffdc_collector(dict_of_parms)
@@ -154,7 +155,10 @@
     # that are not specified with input and have acceptable defaults.
     if not location:
         # Default FFDC store location
-        location = robotBuildIn().get_variable_value("${EXECDIR}", default=None) + "/logs"
+        location = (
+            robotBuildIn().get_variable_value("${EXECDIR}", default=None)
+            + "/logs"
+        )
         ffdc_collector.validate_local_store(location)
 
     if not config:
@@ -175,76 +179,83 @@
         log_level = "INFO"
 
     # If minimum required inputs are met, go collect.
-    if (remote and username and password and remote_type):
+    if remote and username and password and remote_type:
         # Execute data collection
-        this_ffdc = ffdc_collector(remote,
-                                   username,
-                                   password,
-                                   config,
-                                   location,
-                                   remote_type,
-                                   protocol,
-                                   env_vars,
-                                   econfig,
-                                   log_level)
+        this_ffdc = ffdc_collector(
+            remote,
+            username,
+            password,
+            config,
+            location,
+            remote_type,
+            protocol,
+            env_vars,
+            econfig,
+            log_level,
+        )
         this_ffdc.collect_ffdc()
 
         # If original ffdc request is for BMC,
         #  attempt to also collect ffdc for HOST_OS if possible.
-        if remote_type.upper() == 'OPENBMC':
-            os_host = \
-                robotBuildIn().get_variable_value("${OS_HOST}", default=None)
-            os_username = \
-                robotBuildIn().get_variable_value("${OS_USERNAME}", default=None)
-            os_password =  \
-                robotBuildIn().get_variable_value("${OS_PASSWORD}", default=None)
+        if remote_type.upper() == "OPENBMC":
+            os_host = robotBuildIn().get_variable_value(
+                "${OS_HOST}", default=None
+            )
+            os_username = robotBuildIn().get_variable_value(
+                "${OS_USERNAME}", default=None
+            )
+            os_password = robotBuildIn().get_variable_value(
+                "${OS_PASSWORD}", default=None
+            )
 
             if os_host and os_username and os_password:
                 os_type = get_os_type(os_host, os_username, os_password)
                 if os_type:
-                    os_ffdc = ffdc_collector(os_host,
-                                             os_username,
-                                             os_password,
-                                             config,
-                                             location,
-                                             os_type,
-                                             protocol,
-                                             env_vars,
-                                             econfig,
-                                             log_level)
+                    os_ffdc = ffdc_collector(
+                        os_host,
+                        os_username,
+                        os_password,
+                        config,
+                        location,
+                        os_type,
+                        protocol,
+                        env_vars,
+                        econfig,
+                        log_level,
+                    )
                     os_ffdc.collect_ffdc()
 
 
 def get_os_type(os_host, os_username, os_password):
-
     os_type = None
 
     # If HOST_OS is pingable
     if os.system("ping -c 1 " + os_host) == 0:
         r"""
-            Open a ssh connection to targeted system.
+        Open a ssh connection to targeted system.
         """
-        ssh_remoteclient = SSHRemoteclient(os_host,
-                                           os_username,
-                                           os_password)
+        ssh_remoteclient = SSHRemoteclient(os_host, os_username, os_password)
 
         if ssh_remoteclient.ssh_remoteclient_login():
-
             # Find OS_TYPE
-            cmd_exit_code, err, response = \
-                ssh_remoteclient.execute_command('uname')
+            cmd_exit_code, err, response = ssh_remoteclient.execute_command(
+                "uname"
+            )
             os_type = response.strip()
 
             # If HOST_OS is linux, expands os_type to one of
             # the 2 linux distros that have more details in ffdc_config.yaml
-            if os_type.upper() == 'LINUX':
-                cmd_exit_code, err, response = \
-                    ssh_remoteclient.execute_command('cat /etc/os-release')
+            if os_type.upper() == "LINUX":
+                (
+                    cmd_exit_code,
+                    err,
+                    response,
+                ) = ssh_remoteclient.execute_command("cat /etc/os-release")
                 linux_distro = response
-                if 'redhat' in linux_distro:
-                    os_type = 'RHEL'
-                elif 'ubuntu' in linux_distro:
-                    os_type = 'UBUNTU'
+                if "redhat" in linux_distro:
+                    os_type = "RHEL"
+                elif "ubuntu" in linux_distro:
+                    os_type = "UBUNTU"
 
         if ssh_remoteclient:
             ssh_remoteclient.ssh_remoteclient_disconnect()
diff --git a/lib/firmware_utils.py b/lib/firmware_utils.py
index 959693d..61d1e0b 100755
--- a/lib/firmware_utils.py
+++ b/lib/firmware_utils.py
@@ -61,15 +61,17 @@
 
     """
 
-    cmd_buf = "hdparm -I " + device + " | egrep \":.+\" | sed -re" +\
-        " \"s/[ \t]+/ /g\""
+    cmd_buf = (
+        "hdparm -I " + device + ' | egrep ":.+" | sed -re' + ' "s/[ \t]+/ /g"'
+    )
     stdout, stderr, rc = bsu.os_execute_command(cmd_buf)
 
     firmware_dict = vf.key_value_outbuf_to_dict(stdout)
 
     cmd_buf = "lsblk -P " + device + " | sed -re 's/\" /\"\\n/g'"
     stdout, stderr, rc = bsu.os_execute_command(cmd_buf)
-    firmware_dict.update(vf.key_value_outbuf_to_dict(stdout, delim='=',
-                                                     strip=" \""))
+    firmware_dict.update(
+        vf.key_value_outbuf_to_dict(stdout, delim="=", strip=' "')
+    )
 
     return firmware_dict
diff --git a/lib/func_args.py b/lib/func_args.py
index 306af38..d779b48 100644
--- a/lib/func_args.py
+++ b/lib/func_args.py
@@ -4,9 +4,10 @@
 This module provides argument manipulation functions like pop_arg.
 """
 
-import gen_print as gp
 import collections
 
+import gen_print as gp
+
 
 def pop_arg(pop_arg_default=None, *args, **kwargs):
     r"""
diff --git a/lib/func_timer.py b/lib/func_timer.py
index 852bbf2..fc339c2 100644
--- a/lib/func_timer.py
+++ b/lib/func_timer.py
@@ -5,11 +5,12 @@
 """
 
 import os
-import sys
 import signal
+import sys
 import time
-import gen_print as gp
+
 import gen_misc as gm
+import gen_print as gp
 import gen_valid as gv
 
 
@@ -30,9 +31,7 @@
     second.  "sleep 2" is a positional parm for the run_key function.
     """
 
-    def __init__(self,
-                 obj_name='func_timer_class'):
-
+    def __init__(self, obj_name="func_timer_class"):
         # Initialize object variables.
         self.__obj_name = obj_name
         self.__func = None
@@ -59,9 +58,11 @@
         buffer += gp.sprint_var(func_name, indent=indent)
         buffer += gp.sprint_varx("time_out", self.__time_out, indent=indent)
         buffer += gp.sprint_varx("child_pid", self.__child_pid, indent=indent)
-        buffer += gp.sprint_varx("original_SIGUSR1_handler",
-                                 self.__original_SIGUSR1_handler,
-                                 indent=indent)
+        buffer += gp.sprint_varx(
+            "original_SIGUSR1_handler",
+            self.__original_SIGUSR1_handler,
+            indent=indent,
+        )
         return buffer
 
     def print_obj(self):
@@ -95,8 +96,7 @@
         if self.__original_SIGUSR1_handler != 0:
             signal.signal(signal.SIGUSR1, self.__original_SIGUSR1_handler)
         try:
-            gp.lprint_timen("Killing child pid " + str(self.__child_pid)
-                            + ".")
+            gp.lprint_timen("Killing child pid " + str(self.__child_pid) + ".")
             os.kill(self.__child_pid, signal.SIGKILL)
         except OSError:
             gp.lprint_timen("Tolerated kill failure.")
@@ -110,9 +110,7 @@
         children = gm.get_child_pids()
         gp.lprint_var(children)
 
-    def timed_out(self,
-                  signal_number,
-                  frame):
+    def timed_out(self, signal_number, frame):
         r"""
         Handle a SIGUSR1 generated by the child process after the time_out has expired.
 
@@ -135,7 +133,6 @@
         raise ValueError(err_msg)
 
     def run(self, func, *args, **kwargs):
-
         r"""
         Run the indicated function with the given args and kwargs and return the value that the function
         returns.  If the time_out value expires, raise a ValueError exception with a detailed error message.
@@ -171,9 +168,9 @@
         # Get self.__time_out value from kwargs.  If kwargs['time_out'] is not present, self.__time_out will
         # default to None.
         self.__time_out = None
-        if 'time_out' in kwargs:
-            self.__time_out = kwargs['time_out']
-            del kwargs['time_out']
+        if "time_out" in kwargs:
+            self.__time_out = kwargs["time_out"]
+            del kwargs["time_out"]
             # Convert "none" string to None.
             try:
                 if self.__time_out.lower() == "none":
@@ -183,12 +180,13 @@
             if self.__time_out is not None:
                 self.__time_out = int(self.__time_out)
                 # Ensure that time_out is non-negative.
-                message = gv.valid_range(self.__time_out, 0,
-                                         var_name="time_out")
+                message = gv.valid_range(
+                    self.__time_out, 0, var_name="time_out"
+                )
                 if message != "":
-                    raise ValueError("\n"
-                                     + gp.sprint_error_report(message,
-                                                              format='long'))
+                    raise ValueError(
+                        "\n" + gp.sprint_error_report(message, format="long")
+                    )
 
         gp.lprint_varx("time_out", self.__time_out)
         self.__child_pid = 0
@@ -200,13 +198,21 @@
             parent_pid = os.getpid()
             self.__child_pid = os.fork()
             if self.__child_pid == 0:
-                gp.dprint_timen("Child timer pid " + str(os.getpid())
-                                + ": Sleeping for " + str(self.__time_out)
-                                + " seconds.")
+                gp.dprint_timen(
+                    "Child timer pid "
+                    + str(os.getpid())
+                    + ": Sleeping for "
+                    + str(self.__time_out)
+                    + " seconds."
+                )
                 time.sleep(self.__time_out)
-                gp.dprint_timen("Child timer pid " + str(os.getpid())
-                                + ": Sending SIGUSR1 to parent pid "
-                                + str(parent_pid) + ".")
+                gp.dprint_timen(
+                    "Child timer pid "
+                    + str(os.getpid())
+                    + ": Sending SIGUSR1 to parent pid "
+                    + str(parent_pid)
+                    + "."
+                )
                 os.kill(parent_pid, signal.SIGUSR1)
                 os._exit(0)
 
diff --git a/lib/gen_arg.py b/lib/gen_arg.py
index afa7b57..2d2ed68 100755
--- a/lib/gen_arg.py
+++ b/lib/gen_arg.py
@@ -4,11 +4,13 @@
 This module provides valuable argument processing functions like gen_get_options and sprint_args.
 """
 
-import sys
 import os
 import re
+import sys
+
 try:
     import psutil
+
     psutil_imported = True
 except ImportError:
     psutil_imported = False
@@ -16,15 +18,16 @@
     import __builtin__
 except ImportError:
     import builtins as __builtin__
+
+import argparse
 import atexit
 import signal
-import argparse
 import textwrap as textwrap
 
-import gen_print as gp
-import gen_valid as gv
 import gen_cmd as gc
 import gen_misc as gm
+import gen_print as gp
+import gen_valid as gv
 
 
 class MultilineFormatter(argparse.HelpFormatter):
@@ -32,13 +35,20 @@
         r"""
         Split text into formatted lines for every "%%n" encountered in the text and return the result.
         """
-        lines = self._whitespace_matcher.sub(' ', text).strip().split('%n')
-        formatted_lines = \
-            [textwrap.fill(x, width, initial_indent=indent, subsequent_indent=indent) + '\n' for x in lines]
-        return ''.join(formatted_lines)
+        lines = self._whitespace_matcher.sub(" ", text).strip().split("%n")
+        formatted_lines = [
+            textwrap.fill(
+                x, width, initial_indent=indent, subsequent_indent=indent
+            )
+            + "\n"
+            for x in lines
+        ]
+        return "".join(formatted_lines)
 
 
-class ArgumentDefaultsHelpMultilineFormatter(MultilineFormatter, argparse.ArgumentDefaultsHelpFormatter):
+class ArgumentDefaultsHelpMultilineFormatter(
+    MultilineFormatter, argparse.ArgumentDefaultsHelpFormatter
+):
     pass
 
 
@@ -46,8 +56,7 @@
 module = sys.modules["__main__"]
 
 
-def gen_get_options(parser,
-                    stock_list=[]):
+def gen_get_options(parser, stock_list=[]):
     r"""
     Parse the command line arguments using the parser object passed and return True/False (i.e. pass/fail).
     However, if gv.exit_on_error is set, simply exit the program on failure.  Also set the following built in
@@ -75,11 +84,14 @@
     # Process stock_list.
     for ix in range(0, len(stock_list)):
         if len(stock_list[ix]) < 1:
-            error_message = "Programmer error - stock_list[" + str(ix) +\
-                            "] is supposed to be a tuple containing at" +\
-                            " least one element which is the name of" +\
-                            " the desired stock parameter:\n" +\
-                            gp.sprint_var(stock_list)
+            error_message = (
+                "Programmer error - stock_list["
+                + str(ix)
+                + "] is supposed to be a tuple containing at"
+                + " least one element which is the name of"
+                + " the desired stock parameter:\n"
+                + gp.sprint_var(stock_list)
+            )
             return gv.process_error_message(error_message)
         if isinstance(stock_list[ix], tuple):
             arg_name = stock_list[ix][0]
@@ -89,65 +101,86 @@
             default = None
 
         if arg_name not in master_stock_list:
-            error_message = "Programmer error - arg_name \"" + arg_name +\
-                            "\" not found found in stock list:\n" +\
-                            gp.sprint_var(master_stock_list)
+            error_message = (
+                'Programmer error - arg_name "'
+                + arg_name
+                + '" not found found in stock list:\n'
+                + gp.sprint_var(master_stock_list)
+            )
             return gv.process_error_message(error_message)
 
         if arg_name == "quiet":
             if default is None:
                 default = 0
             parser.add_argument(
-                '--quiet',
+                "--quiet",
                 default=default,
                 type=int,
                 choices=[1, 0],
                 help='If this parameter is set to "1", %(prog)s'
-                     + ' will print only essential information, i.e. it will'
-                     + ' not echo parameters, echo commands, print the total'
-                     + ' run time, etc.' + default_string)
+                + " will print only essential information, i.e. it will"
+                + " not echo parameters, echo commands, print the total"
+                + " run time, etc."
+                + default_string,
+            )
         elif arg_name == "test_mode":
             if default is None:
                 default = 0
             parser.add_argument(
-                '--test_mode',
+                "--test_mode",
                 default=default,
                 type=int,
                 choices=[1, 0],
-                help='This means that %(prog)s should go through all the'
-                     + ' motions but not actually do anything substantial.'
-                     + '  This is mainly to be used by the developer of'
-                     + ' %(prog)s.' + default_string)
+                help="This means that %(prog)s should go through all the"
+                + " motions but not actually do anything substantial."
+                + "  This is mainly to be used by the developer of"
+                + " %(prog)s."
+                + default_string,
+            )
         elif arg_name == "debug":
             if default is None:
                 default = 0
             parser.add_argument(
-                '--debug',
+                "--debug",
                 default=default,
                 type=int,
                 choices=[1, 0],
                 help='If this parameter is set to "1", %(prog)s will print'
-                     + ' additional debug information.  This is mainly to be'
-                     + ' used by the developer of %(prog)s.' + default_string)
+                + " additional debug information.  This is mainly to be"
+                + " used by the developer of %(prog)s."
+                + default_string,
+            )
         elif arg_name == "loglevel":
             if default is None:
                 default = "info"
             parser.add_argument(
-                '--loglevel',
+                "--loglevel",
                 default=default,
                 type=str,
-                choices=['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL',
-                         'debug', 'info', 'warning', 'error', 'critical'],
+                choices=[
+                    "DEBUG",
+                    "INFO",
+                    "WARNING",
+                    "ERROR",
+                    "CRITICAL",
+                    "debug",
+                    "info",
+                    "warning",
+                    "error",
+                    "critical",
+                ],
                 help='If this parameter is set to "1", %(prog)s will print'
-                     + ' additional debug information.  This is mainly to be'
-                     + ' used by the developer of %(prog)s.' + default_string)
+                + " additional debug information.  This is mainly to be"
+                + " used by the developer of %(prog)s."
+                + default_string,
+            )
 
     arg_obj = parser.parse_args()
 
     __builtin__.quiet = 0
     __builtin__.test_mode = 0
     __builtin__.debug = 0
-    __builtin__.loglevel = 'WARNING'
+    __builtin__.loglevel = "WARNING"
     for ix in range(0, len(stock_list)):
         if isinstance(stock_list[ix], tuple):
             arg_name = stock_list[ix][0]
@@ -170,15 +203,14 @@
     # For each command line parameter, create a corresponding global variable and assign it the appropriate
     # value.  For example, if the command line contained "--last_name='Smith', we'll create a global variable
     # named "last_name" with the value "Smith".
-    module = sys.modules['__main__']
+    module = sys.modules["__main__"]
     for key in arg_obj.__dict__:
         setattr(module, key, getattr(__builtin__.arg_obj, key))
 
     return True
 
 
-def set_pgm_arg(var_value,
-                var_name=None):
+def set_pgm_arg(var_value, var_name=None):
     r"""
     Set the value of the arg_obj.__dict__ entry named in var_name with the var_value provided.  Also, set
     corresponding global variable.
@@ -193,7 +225,7 @@
         var_name = gp.get_arg_name(None, 1, 2)
 
     arg_obj.__dict__[var_name] = var_value
-    module = sys.modules['__main__']
+    module = sys.modules["__main__"]
     setattr(module, var_name, var_value)
     if var_name == "quiet":
         __builtin__.quiet = var_value
@@ -203,8 +235,7 @@
         __builtin__.test_mode = var_value
 
 
-def sprint_args(arg_obj,
-                indent=0):
+def sprint_args(arg_obj, indent=0):
     r"""
     sprint_var all of the arguments found in arg_obj and return the result as a string.
 
@@ -218,8 +249,9 @@
 
     buffer = ""
     for key in arg_obj.__dict__:
-        buffer += gp.sprint_varx(key, getattr(arg_obj, key), 0, indent,
-                                 col1_width)
+        buffer += gp.sprint_varx(
+            key, getattr(arg_obj, key), 0, indent, col1_width
+        )
     return buffer
 
 
@@ -238,7 +270,7 @@
         # Set a default value for dir_path argument.
         dir_path = gm.add_trailing_slash(gm.dft(dir_path, os.getcwd()))
     """
-    module = sys.modules['__main__']
+    module = sys.modules["__main__"]
     for key in arg_obj.__dict__:
         arg_obj.__dict__[key] = getattr(module, key)
 
@@ -266,16 +298,17 @@
     global term_options
     # Validation:
     arg_names = list(kwargs.keys())
-    gv.valid_list(arg_names, ['term_requests'])
-    if type(kwargs['term_requests']) is dict:
-        keys = list(kwargs['term_requests'].keys())
-        gv.valid_list(keys, ['pgm_names'])
+    gv.valid_list(arg_names, ["term_requests"])
+    if type(kwargs["term_requests"]) is dict:
+        keys = list(kwargs["term_requests"].keys())
+        gv.valid_list(keys, ["pgm_names"])
     else:
-        gv.valid_value(kwargs['term_requests'], ['children', 'descendants'])
+        gv.valid_value(kwargs["term_requests"], ["children", "descendants"])
     term_options = kwargs
 
 
 if psutil_imported:
+
     def match_process_by_pgm_name(process, pgm_name):
         r"""
         Return True or False to indicate whether the process matches the program name.
@@ -325,9 +358,10 @@
         # Because "sleep" is a compiled executable, it will appear in entry 0.
 
         optional_dir_path_regex = "(.*/)?"
-        cmdline = process.as_dict()['cmdline']
-        return re.match(optional_dir_path_regex + pgm_name + '( |$)', cmdline[0]) \
-            or re.match(optional_dir_path_regex + pgm_name + '( |$)', cmdline[1])
+        cmdline = process.as_dict()["cmdline"]
+        return re.match(
+            optional_dir_path_regex + pgm_name + "( |$)", cmdline[0]
+        ) or re.match(optional_dir_path_regex + pgm_name + "( |$)", cmdline[1])
 
     def select_processes_by_pgm_name(processes, pgm_name):
         r"""
@@ -340,7 +374,11 @@
                                     object.
         """
 
-        return [process for process in processes if match_process_by_pgm_name(process, pgm_name)]
+        return [
+            process
+            for process in processes
+            if match_process_by_pgm_name(process, pgm_name)
+        ]
 
     def sprint_process_report(pids):
         r"""
@@ -350,7 +388,10 @@
         pids                        A list of process IDs for processes to be included in the report.
         """
         report = "\n"
-        cmd_buf = "echo ; ps wwo user,pgrp,pid,ppid,lstart,cmd --forest " + ' '.join(pids)
+        cmd_buf = (
+            "echo ; ps wwo user,pgrp,pid,ppid,lstart,cmd --forest "
+            + " ".join(pids)
+        )
         report += gp.sprint_issuing(cmd_buf)
         rc, outbuf = gc.shell_cmd(cmd_buf, quiet=1)
         report += outbuf + "\n"
@@ -371,7 +412,9 @@
         descendants = process.children(recursive=True)
         descendant_pids = [str(process.pid) for process in descendants]
         if descendants:
-            process_report = sprint_process_report([str(process.pid)] + descendant_pids)
+            process_report = sprint_process_report(
+                [str(process.pid)] + descendant_pids
+            )
         else:
             process_report = ""
         return descendants, descendant_pids, process_report
@@ -397,12 +440,15 @@
         children it produces.
         """
 
-        message = "\n" + gp.sprint_dashes(width=120) \
-            + gp.sprint_executing() + "\n"
+        message = (
+            "\n" + gp.sprint_dashes(width=120) + gp.sprint_executing() + "\n"
+        )
 
         current_process = psutil.Process()
 
-        descendants, descendant_pids, process_report = get_descendant_info(current_process)
+        descendants, descendant_pids, process_report = get_descendant_info(
+            current_process
+        )
         if not descendants:
             # If there are no descendants, then we have nothing to do.
             return
@@ -410,38 +456,50 @@
         terminate_descendants_temp_file_path = gm.create_temp_file_path()
         gp.print_vars(terminate_descendants_temp_file_path)
 
-        message += gp.sprint_varx("pgm_name", gp.pgm_name) \
-            + gp.sprint_vars(term_options) \
+        message += (
+            gp.sprint_varx("pgm_name", gp.pgm_name)
+            + gp.sprint_vars(term_options)
             + process_report
+        )
 
         # Process the termination requests:
-        if term_options['term_requests'] == 'children':
+        if term_options["term_requests"] == "children":
             term_processes = current_process.children(recursive=False)
             term_pids = [str(process.pid) for process in term_processes]
-        elif term_options['term_requests'] == 'descendants':
+        elif term_options["term_requests"] == "descendants":
             term_processes = descendants
             term_pids = descendant_pids
         else:
             # Process term requests by pgm_names.
             term_processes = []
-            for pgm_name in term_options['term_requests']['pgm_names']:
-                term_processes.extend(select_processes_by_pgm_name(descendants, pgm_name))
+            for pgm_name in term_options["term_requests"]["pgm_names"]:
+                term_processes.extend(
+                    select_processes_by_pgm_name(descendants, pgm_name)
+                )
             term_pids = [str(process.pid) for process in term_processes]
 
-        message += gp.sprint_timen("Processes to be terminated:") \
-            + gp.sprint_var(term_pids)
+        message += gp.sprint_timen(
+            "Processes to be terminated:"
+        ) + gp.sprint_var(term_pids)
         for process in term_processes:
             process.terminate()
-        message += gp.sprint_timen("Waiting on the following pids: " + ' '.join(descendant_pids))
+        message += gp.sprint_timen(
+            "Waiting on the following pids: " + " ".join(descendant_pids)
+        )
         gm.append_file(terminate_descendants_temp_file_path, message)
         psutil.wait_procs(descendants)
 
         # Checking after the fact to see whether any descendant processes are still alive.  If so, a process
         # report showing this will be included in the output.
-        descendants, descendant_pids, process_report = get_descendant_info(current_process)
+        descendants, descendant_pids, process_report = get_descendant_info(
+            current_process
+        )
         if descendants:
-            message = "\n" + gp.sprint_timen("Not all of the processes terminated:") \
+            message = (
+                "\n"
+                + gp.sprint_timen("Not all of the processes terminated:")
                 + process_report
+            )
             gm.append_file(terminate_descendants_temp_file_path, message)
 
         message = gp.sprint_dashes(width=120)
@@ -470,8 +528,7 @@
     gp.qprint_pgm_footer()
 
 
-def gen_signal_handler(signal_number,
-                       frame):
+def gen_signal_handler(signal_number, frame):
     r"""
     Handle signals.  Without a function to catch a SIGTERM or SIGINT, the program would terminate immediately
     with return code 143 and without calling the exit_function.
@@ -486,8 +543,7 @@
     exit(0)
 
 
-def gen_post_validation(exit_function=None,
-                        signal_handler=None):
+def gen_post_validation(exit_function=None, signal_handler=None):
     r"""
     Do generic post-validation processing.  By "post", we mean that this is to be called from a validation
     function after the caller has done any validation desired.  If the calling program passes exit_function
diff --git a/lib/gen_call_robot.py b/lib/gen_call_robot.py
index 2e51626..e873c52 100755
--- a/lib/gen_call_robot.py
+++ b/lib/gen_call_robot.py
@@ -5,21 +5,22 @@
 robot program calls.
 """
 
-import sys
-import os
-import subprocess
-import re
-import time
 import imp
+import os
+import re
+import subprocess
+import sys
+import time
 
+import gen_cmd as gc
+import gen_misc as gm
 import gen_print as gp
 import gen_valid as gv
-import gen_misc as gm
-import gen_cmd as gc
 
-base_path = \
-    os.path.dirname(os.path.dirname(imp.find_module("gen_robot_print")[1])) +\
-    os.sep
+base_path = (
+    os.path.dirname(os.path.dirname(imp.find_module("gen_robot_print")[1]))
+    + os.sep
+)
 
 
 def init_robot_out_parms(extra_prefix=""):
@@ -44,17 +45,19 @@
     # Environment variable TMP_ROBOT_DIR_PATH can be set by the user to indicate that robot-generated output
     # should initially be written to the specified temporary directory and then moved to the normal output
     # location after completion.
-    outputdir =\
-        os.environ.get("TMP_ROBOT_DIR_PATH",
-                       os.environ.get("STATUS_DIR_PATH",
-                                      os.environ.get("HOME", ".")
-                                      + "/status"))
+    outputdir = os.environ.get(
+        "TMP_ROBOT_DIR_PATH",
+        os.environ.get(
+            "STATUS_DIR_PATH", os.environ.get("HOME", ".") + "/status"
+        ),
+    )
     outputdir = gm.add_trailing_slash(outputdir)
     seconds = time.time()
     loc_time = time.localtime(seconds)
     time_string = time.strftime("%y%m%d.%H%M%S", loc_time)
-    file_prefix = AUTOBOOT_OPENBMC_NICKNAME + "." + extra_prefix +\
-        time_string + "."
+    file_prefix = (
+        AUTOBOOT_OPENBMC_NICKNAME + "." + extra_prefix + time_string + "."
+    )
     # Environment variable SAVE_STATUS_POLICY governs when robot-generated output files (e.g. the log.html)
     # will be moved from TMP_ROBOT_DIR_PATH to FFDC_DIR_PATH.  Valid values are "ALWAYS", "NEVER" and "FAIL".
     SAVE_STATUS_POLICY = os.environ.get("SAVE_STATUS_POLICY", "ALWAYS")
@@ -67,8 +70,8 @@
         log = file_prefix + "log.html"
         report = file_prefix + "report.html"
     loglevel = "TRACE"
-    consolecolors = 'off'
-    consolemarkers = 'off'
+    consolecolors = "off"
+    consolemarkers = "off"
 
     # Make create_robot_cmd_string values global.
     gm.set_mod_global(outputdir)
@@ -79,7 +82,15 @@
     gm.set_mod_global(consolecolors)
     gm.set_mod_global(consolemarkers)
 
-    return outputdir, output, log, report, loglevel, consolecolors, consolemarkers
+    return (
+        outputdir,
+        output,
+        log,
+        report,
+        loglevel,
+        consolecolors,
+        consolemarkers,
+    )
 
 
 def init_robot_test_base_dir_path():
@@ -100,12 +111,13 @@
     # - Not in user sandbox:
     #   ROBOT_TEST_BASE_DIR_PATH will be set to <program dir path>/git/openbmc-test-automation/
 
-    ROBOT_TEST_BASE_DIR_PATH = os.environ.get('ROBOT_TEST_BASE_DIR_PATH', "")
-    ROBOT_TEST_RUNNING_FROM_SB = \
-        int(os.environ.get('ROBOT_TEST_RUNNING_FROM_SB', "0"))
+    ROBOT_TEST_BASE_DIR_PATH = os.environ.get("ROBOT_TEST_BASE_DIR_PATH", "")
+    ROBOT_TEST_RUNNING_FROM_SB = int(
+        os.environ.get("ROBOT_TEST_RUNNING_FROM_SB", "0")
+    )
     if ROBOT_TEST_BASE_DIR_PATH == "":
         # ROBOT_TEST_BASE_DIR_PATH was not set by user/caller.
-        AUTOIPL_VERSION = os.environ.get('AUTOIPL_VERSION', '')
+        AUTOIPL_VERSION = os.environ.get("AUTOIPL_VERSION", "")
         if AUTOIPL_VERSION == "":
             ROBOT_TEST_BASE_DIR_PATH = base_path
         else:
@@ -113,17 +125,26 @@
 
             # Determine whether we're running out of a developer sandbox or simply out of an apolloxxx/bin
             # path.
-            shell_rc, out_buf = gc.shell_cmd('dirname $(which gen_print.py)',
-                                             quiet=(not debug), print_output=0)
+            shell_rc, out_buf = gc.shell_cmd(
+                "dirname $(which gen_print.py)",
+                quiet=(not debug),
+                print_output=0,
+            )
             executable_base_dir_path = os.path.realpath(out_buf.rstrip()) + "/"
-            apollo_dir_path = os.environ['AUTO_BASE_PATH'] + AUTOIPL_VERSION +\
-                "/bin/"
-            developer_home_dir_path = re.sub('/sandbox.*', '',
-                                             executable_base_dir_path)
-            developer_home_dir_path = \
-                gm.add_trailing_slash(developer_home_dir_path)
-            gp.dprint_vars(executable_base_dir_path, developer_home_dir_path,
-                           apollo_dir_path)
+            apollo_dir_path = (
+                os.environ["AUTO_BASE_PATH"] + AUTOIPL_VERSION + "/bin/"
+            )
+            developer_home_dir_path = re.sub(
+                "/sandbox.*", "", executable_base_dir_path
+            )
+            developer_home_dir_path = gm.add_trailing_slash(
+                developer_home_dir_path
+            )
+            gp.dprint_vars(
+                executable_base_dir_path,
+                developer_home_dir_path,
+                apollo_dir_path,
+            )
 
             ROBOT_TEST_RUNNING_FROM_SB = 0
             if executable_base_dir_path != apollo_dir_path:
@@ -131,46 +152,61 @@
                 gp.dprint_vars(ROBOT_TEST_RUNNING_FROM_SB)
                 ROBOT_TEST_BASE_DIR_PATH = developer_home_dir_path + suffix
                 if not os.path.isdir(ROBOT_TEST_BASE_DIR_PATH):
-                    gp.dprint_timen("NOTE: Sandbox directory "
-                                    + ROBOT_TEST_BASE_DIR_PATH + " does not"
-                                    + " exist.")
+                    gp.dprint_timen(
+                        "NOTE: Sandbox directory "
+                        + ROBOT_TEST_BASE_DIR_PATH
+                        + " does not"
+                        + " exist."
+                    )
                     # Fall back to the apollo dir path.
                     ROBOT_TEST_BASE_DIR_PATH = apollo_dir_path + suffix
             else:
                 # Use to the apollo dir path.
                 ROBOT_TEST_BASE_DIR_PATH = apollo_dir_path + suffix
 
-    OBMC_TOOLS_BASE_DIR_PATH = \
-        os.path.dirname(ROBOT_TEST_BASE_DIR_PATH.rstrip("/")) \
+    OBMC_TOOLS_BASE_DIR_PATH = (
+        os.path.dirname(ROBOT_TEST_BASE_DIR_PATH.rstrip("/"))
         + "/openbmc-tools/"
+    )
     OPENBMCTOOL_DIR_PATH = OBMC_TOOLS_BASE_DIR_PATH + "openbmctool/"
-    JSON_CHECKER_TOOLS_DIR_PATH = OBMC_TOOLS_BASE_DIR_PATH + "expectedJsonChecker/"
+    JSON_CHECKER_TOOLS_DIR_PATH = (
+        OBMC_TOOLS_BASE_DIR_PATH + "expectedJsonChecker/"
+    )
 
     gv.valid_value(ROBOT_TEST_BASE_DIR_PATH)
-    gp.dprint_vars(ROBOT_TEST_RUNNING_FROM_SB, ROBOT_TEST_BASE_DIR_PATH, OBMC_TOOLS_BASE_DIR_PATH,
-                   OPENBMCTOOL_DIR_PATH, JSON_CHECKER_TOOLS_DIR_PATH)
+    gp.dprint_vars(
+        ROBOT_TEST_RUNNING_FROM_SB,
+        ROBOT_TEST_BASE_DIR_PATH,
+        OBMC_TOOLS_BASE_DIR_PATH,
+        OPENBMCTOOL_DIR_PATH,
+        JSON_CHECKER_TOOLS_DIR_PATH,
+    )
     gv.valid_dir_path(ROBOT_TEST_BASE_DIR_PATH)
 
     ROBOT_TEST_BASE_DIR_PATH = gm.add_trailing_slash(ROBOT_TEST_BASE_DIR_PATH)
     gm.set_mod_global(ROBOT_TEST_BASE_DIR_PATH)
-    os.environ['ROBOT_TEST_BASE_DIR_PATH'] = ROBOT_TEST_BASE_DIR_PATH
+    os.environ["ROBOT_TEST_BASE_DIR_PATH"] = ROBOT_TEST_BASE_DIR_PATH
 
     gm.set_mod_global(ROBOT_TEST_RUNNING_FROM_SB)
-    os.environ['ROBOT_TEST_RUNNING_FROM_SB'] = str(ROBOT_TEST_RUNNING_FROM_SB)
+    os.environ["ROBOT_TEST_RUNNING_FROM_SB"] = str(ROBOT_TEST_RUNNING_FROM_SB)
 
     gm.set_mod_global(OBMC_TOOLS_BASE_DIR_PATH)
-    os.environ['OBMC_TOOLS_BASE_DIR_PATH'] = str(OBMC_TOOLS_BASE_DIR_PATH)
+    os.environ["OBMC_TOOLS_BASE_DIR_PATH"] = str(OBMC_TOOLS_BASE_DIR_PATH)
 
     gm.set_mod_global(OPENBMCTOOL_DIR_PATH)
-    os.environ['OPENBMCTOOL_DIR_PATH'] = str(OPENBMCTOOL_DIR_PATH)
+    os.environ["OPENBMCTOOL_DIR_PATH"] = str(OPENBMCTOOL_DIR_PATH)
 
     gm.set_mod_global(JSON_CHECKER_TOOLS_DIR_PATH)
-    os.environ['JSON_CHECKER_TOOLS_DIR_PATH'] = str(JSON_CHECKER_TOOLS_DIR_PATH)
+    os.environ["JSON_CHECKER_TOOLS_DIR_PATH"] = str(
+        JSON_CHECKER_TOOLS_DIR_PATH
+    )
 
 
-raw_robot_file_search_path = "${ROBOT_TEST_BASE_DIR_PATH}:" +\
-    "${ROBOT_TEST_BASE_DIR_PATH}tests:${ROBOT_TEST_BASE_DIR_PATH}extended:" +\
-    "${ROBOT_TEST_BASE_DIR_PATH}scratch:${PATH}"
+raw_robot_file_search_path = (
+    "${ROBOT_TEST_BASE_DIR_PATH}:"
+    + "${ROBOT_TEST_BASE_DIR_PATH}tests:${ROBOT_TEST_BASE_DIR_PATH}extended:"
+    + "${ROBOT_TEST_BASE_DIR_PATH}scratch:${PATH}"
+)
 
 
 def init_robot_file_path(robot_file_path):
@@ -206,12 +242,13 @@
     gp.dprint_vars(abs_path, robot_file_path)
 
     if not abs_path:
-        cmd_buf = "echo -n \"" + raw_robot_file_search_path + "\""
-        shell_rc, out_buf = gc.shell_cmd(cmd_buf, quiet=(not debug),
-                                         print_output=0)
+        cmd_buf = 'echo -n "' + raw_robot_file_search_path + '"'
+        shell_rc, out_buf = gc.shell_cmd(
+            cmd_buf, quiet=(not debug), print_output=0
+        )
         robot_file_search_paths = out_buf
         gp.dprint_var(robot_file_search_paths)
-        robot_file_search_paths_list = robot_file_search_paths.split(':')
+        robot_file_search_paths_list = robot_file_search_paths.split(":")
         for search_path in robot_file_search_paths_list:
             search_path = gm.add_trailing_slash(search_path)
             candidate_file_path = search_path + robot_file_path
@@ -233,9 +270,11 @@
     Double dashes are not included in the names returned.
     """
 
-    cmd_buf = "robot -h | egrep " +\
-        "'^([ ]\\-[a-zA-Z0-9])?[ ]+--[a-zA-Z0-9]+[ ]+' | sed -re" +\
-        " s'/.*\\-\\-//g' -e s'/ .*//g' | sort -u"
+    cmd_buf = (
+        "robot -h | egrep "
+        + "'^([ ]\\-[a-zA-Z0-9])?[ ]+--[a-zA-Z0-9]+[ ]+' | sed -re"
+        + " s'/.*\\-\\-//g' -e s'/ .*//g' | sort -u"
+    )
     shell_rc, out_buf = gc.shell_cmd(cmd_buf, quiet=1, print_output=0)
 
     return out_buf.split("\n")
@@ -285,8 +324,9 @@
             robot_parm_list.append(p_string)
         ix += 1
 
-    robot_cmd_buf = "robot " + ' '.join(robot_parm_list) + " " +\
-        robot_file_path
+    robot_cmd_buf = (
+        "robot " + " ".join(robot_parm_list) + " " + robot_file_path
+    )
 
     return robot_cmd_buf
 
@@ -296,9 +336,7 @@
 gcr_last_robot_rc = 0
 
 
-def process_robot_output_files(robot_cmd_buf=None,
-                               robot_rc=None,
-                               gzip=None):
+def process_robot_output_files(robot_cmd_buf=None, robot_rc=None, gzip=None):
     r"""
     Process robot output files which can involve several operations:
     - If the files are in a temporary location, using SAVE_STATUS_POLICY to decide whether to move them to a
@@ -329,25 +367,36 @@
 
     # Compose file_list based on robot command buffer passed in.
     robot_cmd_buf_dict = gc.parse_command_string(robot_cmd_buf)
-    outputdir = robot_cmd_buf_dict['outputdir']
+    outputdir = robot_cmd_buf_dict["outputdir"]
     outputdir = gm.add_trailing_slash(outputdir)
-    file_list = outputdir + robot_cmd_buf_dict['output'] + " " + outputdir\
-        + robot_cmd_buf_dict['log'] + " " + outputdir\
-        + robot_cmd_buf_dict['report']
+    file_list = (
+        outputdir
+        + robot_cmd_buf_dict["output"]
+        + " "
+        + outputdir
+        + robot_cmd_buf_dict["log"]
+        + " "
+        + outputdir
+        + robot_cmd_buf_dict["report"]
+    )
 
     # Double checking that files are present.
-    shell_rc, out_buf = gc.shell_cmd("ls -1 " + file_list + " 2>/dev/null",
-                                     show_err=0)
+    shell_rc, out_buf = gc.shell_cmd(
+        "ls -1 " + file_list + " 2>/dev/null", show_err=0
+    )
     file_list = re.sub("\n", " ", out_buf.rstrip("\n"))
 
     if file_list == "":
-        gp.qprint_timen("No robot output files were found in " + outputdir
-                        + ".")
+        gp.qprint_timen(
+            "No robot output files were found in " + outputdir + "."
+        )
         return
     gp.qprint_var(robot_rc, gp.hexa())
     if SAVE_STATUS_POLICY == "FAIL" and robot_rc == 0:
-        gp.qprint_timen("The call to robot produced no failures."
-                        + "  Deleting robot output files.")
+        gp.qprint_timen(
+            "The call to robot produced no failures."
+            + "  Deleting robot output files."
+        )
         gc.shell_cmd("rm -rf " + file_list)
         return
 
@@ -363,23 +412,29 @@
         return
 
     # We're directing these to the FFDC dir path so that they'll be subjected to FFDC cleanup.
-    target_dir_path = os.environ.get("FFDC_DIR_PATH",
-                                     os.environ.get("HOME", ".")
-                                     + "/ffdc")
+    target_dir_path = os.environ.get(
+        "FFDC_DIR_PATH", os.environ.get("HOME", ".") + "/ffdc"
+    )
     target_dir_path = gm.add_trailing_slash(target_dir_path)
 
-    targ_file_list = [re.sub(".*/", target_dir_path, x)
-                      for x in file_list.split(" ")]
+    targ_file_list = [
+        re.sub(".*/", target_dir_path, x) for x in file_list.split(" ")
+    ]
 
-    gc.shell_cmd("mv " + file_list + " " + target_dir_path + " >/dev/null",
-                 time_out=600)
+    gc.shell_cmd(
+        "mv " + file_list + " " + target_dir_path + " >/dev/null", time_out=600
+    )
 
     gp.qprint_timen("New robot log file locations:")
-    gp.qprintn('\n'.join(targ_file_list))
+    gp.qprintn("\n".join(targ_file_list))
 
 
-def robot_cmd_fnc(robot_cmd_buf,
-                  robot_jail=os.environ.get('ROBOT_JAIL', ''), quiet=None, test_mode=0):
+def robot_cmd_fnc(
+    robot_cmd_buf,
+    robot_jail=os.environ.get("ROBOT_JAIL", ""),
+    quiet=None,
+    test_mode=0,
+):
     r"""
     Run the robot command string.
 
@@ -393,7 +448,7 @@
     test_mode                       If test_mode is set, this function will not actually run the command.
     """
 
-    quiet = int(gm.dft(quiet, gp.get_stack_var('quiet', 0)))
+    quiet = int(gm.dft(quiet, gp.get_stack_var("quiet", 0)))
     gv.valid_value(robot_cmd_buf)
 
     # Set global variables to aid in cleanup with process_robot_output_files.
@@ -409,7 +464,9 @@
         init_robot_test_base_dir_path()
         ROBOT_TEST_BASE_DIR_PATH = getattr(module, "ROBOT_TEST_BASE_DIR_PATH")
 
-    ROBOT_TEST_RUNNING_FROM_SB = gm.get_mod_global("ROBOT_TEST_RUNNING_FROM_SB")
+    ROBOT_TEST_RUNNING_FROM_SB = gm.get_mod_global(
+        "ROBOT_TEST_RUNNING_FROM_SB"
+    )
     OPENBMCTOOL_DIR_PATH = gm.get_mod_global("OPENBMCTOOL_DIR_PATH")
 
     if robot_jail == "":
@@ -419,9 +476,13 @@
             robot_jail = 1
 
     robot_jail = int(robot_jail)
-    ROBOT_JAIL = os.environ.get('ROBOT_JAIL', '')
-    gp.dprint_vars(ROBOT_TEST_BASE_DIR_PATH, ROBOT_TEST_RUNNING_FROM_SB,
-                   ROBOT_JAIL, robot_jail)
+    ROBOT_JAIL = os.environ.get("ROBOT_JAIL", "")
+    gp.dprint_vars(
+        ROBOT_TEST_BASE_DIR_PATH,
+        ROBOT_TEST_RUNNING_FROM_SB,
+        ROBOT_JAIL,
+        robot_jail,
+    )
 
     # Save PATH and PYTHONPATH to be restored later.
     os.environ["SAVED_PYTHONPATH"] = os.environ.get("PYTHONPATH", "")
@@ -433,28 +494,50 @@
         # It is expected that there will be a "python" program in the tool base bin path which is really a
         # link to select_version.  Ditto for "robot".  Call each with the --print_only option to get the
         # paths to the "real" programs.
-        cmd_buf = "for program in " + required_programs \
+        cmd_buf = (
+            "for program in "
+            + required_programs
             + " ; do dirname $(${program} --print_only) ; done 2>/dev/null"
+        )
         rc, out_buf = gc.shell_cmd(cmd_buf, quiet=1, print_output=0)
         PYTHONPATH = ROBOT_TEST_BASE_DIR_PATH + "lib"
         NEW_PATH_LIST = [ROBOT_TEST_BASE_DIR_PATH + "bin"]
         NEW_PATH_LIST.extend(list(set(out_buf.rstrip("\n").split("\n"))))
-        NEW_PATH_LIST.extend(["/usr/local/sbin", "/usr/local/bin", "/usr/sbin",
-                              "/usr/bin", "/sbin", "/bin",
-                              OPENBMCTOOL_DIR_PATH.rstrip('/')])
+        NEW_PATH_LIST.extend(
+            [
+                "/usr/local/sbin",
+                "/usr/local/bin",
+                "/usr/sbin",
+                "/usr/bin",
+                "/sbin",
+                "/bin",
+                OPENBMCTOOL_DIR_PATH.rstrip("/"),
+            ]
+        )
         PATH = ":".join(NEW_PATH_LIST)
     else:
-        PYTHONPATH = os.environ.get('PYTHONPATH', '') + ":" +\
-            ROBOT_TEST_BASE_DIR_PATH + "lib"
-        PATH = os.environ.get('PATH', '') + ":" + ROBOT_TEST_BASE_DIR_PATH +\
-            "bin" + ":" + OPENBMCTOOL_DIR_PATH.rstrip('/')
+        PYTHONPATH = (
+            os.environ.get("PYTHONPATH", "")
+            + ":"
+            + ROBOT_TEST_BASE_DIR_PATH
+            + "lib"
+        )
+        PATH = (
+            os.environ.get("PATH", "")
+            + ":"
+            + ROBOT_TEST_BASE_DIR_PATH
+            + "bin"
+            + ":"
+            + OPENBMCTOOL_DIR_PATH.rstrip("/")
+        )
 
-    os.environ['PYTHONPATH'] = PYTHONPATH
-    os.environ['PATH'] = PATH
+    os.environ["PYTHONPATH"] = PYTHONPATH
+    os.environ["PATH"] = PATH
     gp.dprint_vars(PATH, PYTHONPATH)
 
-    os.environ['FFDC_DIR_PATH_STYLE'] = os.environ.get('FFDC_DIR_PATH_STYLE',
-                                                       '1')
+    os.environ["FFDC_DIR_PATH_STYLE"] = os.environ.get(
+        "FFDC_DIR_PATH_STYLE", "1"
+    )
     gp.qpissuing(robot_cmd_buf, test_mode)
     if test_mode:
         os.environ["PATH"] = os.environ.get("SAVED_PATH", "")
@@ -462,7 +545,7 @@
         return True
 
     if quiet:
-        DEVNULL = open(os.devnull, 'wb')
+        DEVNULL = open(os.devnull, "wb")
         stdout = DEVNULL
     else:
         stdout = None
diff --git a/lib/gen_cmd.py b/lib/gen_cmd.py
index cac5ba4..03e8a11 100644
--- a/lib/gen_cmd.py
+++ b/lib/gen_cmd.py
@@ -4,19 +4,19 @@
 This module provides command execution functions such as cmd_fnc and cmd_fnc_u.
 """
 
-import os
-import sys
-import subprocess
 import collections
-import signal
-import time
-import re
 import inspect
+import os
+import re
+import signal
+import subprocess
+import sys
+import time
 
+import func_args as fa
+import gen_misc as gm
 import gen_print as gp
 import gen_valid as gv
-import gen_misc as gm
-import func_args as fa
 
 robot_env = gp.robot_env
 
@@ -26,14 +26,16 @@
 
 # cmd_fnc and cmd_fnc_u should now be considered deprecated.  shell_cmd and t_shell_cmd should be used
 # instead.
-def cmd_fnc(cmd_buf,
-            quiet=None,
-            test_mode=None,
-            debug=0,
-            print_output=1,
-            show_err=1,
-            return_stderr=0,
-            ignore_err=1):
+def cmd_fnc(
+    cmd_buf,
+    quiet=None,
+    test_mode=None,
+    debug=0,
+    print_output=1,
+    show_err=1,
+    return_stderr=0,
+    ignore_err=1,
+):
     r"""
     Run the given command in a shell and return the shell return code and the output.
 
@@ -80,13 +82,15 @@
     else:
         stderr = subprocess.STDOUT
 
-    sub_proc = subprocess.Popen(cmd_buf,
-                                bufsize=1,
-                                shell=True,
-                                universal_newlines=True,
-                                executable='/bin/bash',
-                                stdout=subprocess.PIPE,
-                                stderr=stderr)
+    sub_proc = subprocess.Popen(
+        cmd_buf,
+        bufsize=1,
+        shell=True,
+        universal_newlines=True,
+        executable="/bin/bash",
+        stdout=subprocess.PIPE,
+        stderr=stderr,
+    )
     out_buf = ""
     if return_stderr:
         for line in sub_proc.stderr:
@@ -131,22 +135,31 @@
         return shell_rc, out_buf
 
 
-def cmd_fnc_u(cmd_buf,
-              quiet=None,
-              debug=None,
-              print_output=1,
-              show_err=1,
-              return_stderr=0,
-              ignore_err=1):
+def cmd_fnc_u(
+    cmd_buf,
+    quiet=None,
+    debug=None,
+    print_output=1,
+    show_err=1,
+    return_stderr=0,
+    ignore_err=1,
+):
     r"""
     Call cmd_fnc with test_mode=0.  See cmd_fnc (above) for details.
 
     Note the "u" in "cmd_fnc_u" stands for "unconditional".
     """
 
-    return cmd_fnc(cmd_buf, test_mode=0, quiet=quiet, debug=debug,
-                   print_output=print_output, show_err=show_err,
-                   return_stderr=return_stderr, ignore_err=ignore_err)
+    return cmd_fnc(
+        cmd_buf,
+        test_mode=0,
+        quiet=quiet,
+        debug=debug,
+        print_output=print_output,
+        show_err=show_err,
+        return_stderr=return_stderr,
+        ignore_err=ignore_err,
+    )
 
 
 def parse_command_string(command_string):
@@ -200,16 +213,18 @@
 
     # We want the parms in the string broken down the way bash would do it, so we'll call upon bash to do
     # that by creating a simple inline bash function.
-    bash_func_def = "function parse { for parm in \"${@}\" ; do" +\
-        " echo $parm ; done ; }"
+    bash_func_def = (
+        'function parse { for parm in "${@}" ; do' + " echo $parm ; done ; }"
+    )
 
-    rc, outbuf = cmd_fnc_u(bash_func_def + " ; parse " + command_string,
-                           quiet=1, print_output=0)
+    rc, outbuf = cmd_fnc_u(
+        bash_func_def + " ; parse " + command_string, quiet=1, print_output=0
+    )
     command_string_list = outbuf.rstrip("\n").split("\n")
 
     command_string_dict = collections.OrderedDict()
     ix = 1
-    command_string_dict['command'] = command_string_list[0]
+    command_string_dict["command"] = command_string_list[0]
     while ix < len(command_string_list):
         if command_string_list[ix].startswith("--"):
             key, value = command_string_list[ix].split("=")
@@ -222,7 +237,7 @@
             except IndexError:
                 value = ""
         else:
-            key = 'positional'
+            key = "positional"
             value = command_string_list[ix]
         if key in command_string_dict:
             if isinstance(command_string_dict[key], str):
@@ -239,8 +254,7 @@
 original_sigalrm_handler = signal.getsignal(signal.SIGALRM)
 
 
-def shell_cmd_timed_out(signal_number,
-                        frame):
+def shell_cmd_timed_out(signal_number, frame):
     r"""
     Handle an alarm signal generated during the shell_cmd function.
     """
@@ -249,7 +263,7 @@
     global command_timed_out
     command_timed_out = True
     # Get subprocess pid from shell_cmd's call stack.
-    sub_proc = gp.get_stack_var('sub_proc', 0)
+    sub_proc = gp.get_stack_var("sub_proc", 0)
     pid = sub_proc.pid
     gp.dprint_var(pid)
     # Terminate the child process group.
@@ -260,19 +274,21 @@
     return
 
 
-def shell_cmd(command_string,
-              quiet=None,
-              print_output=None,
-              show_err=1,
-              test_mode=0,
-              time_out=None,
-              max_attempts=1,
-              retry_sleep_time=5,
-              valid_rcs=[0],
-              ignore_err=None,
-              return_stderr=0,
-              fork=0,
-              error_regexes=None):
+def shell_cmd(
+    command_string,
+    quiet=None,
+    print_output=None,
+    show_err=1,
+    test_mode=0,
+    time_out=None,
+    max_attempts=1,
+    retry_sleep_time=5,
+    valid_rcs=[0],
+    ignore_err=None,
+    return_stderr=0,
+    fork=0,
+    error_regexes=None,
+):
     r"""
     Run the given command string in a shell and return a tuple consisting of the shell return code and the
     output.
@@ -330,10 +346,10 @@
         raise ValueError(err_msg)
 
     # Assign default values to some of the arguments to this function.
-    quiet = int(gm.dft(quiet, gp.get_stack_var('quiet', 0)))
+    quiet = int(gm.dft(quiet, gp.get_stack_var("quiet", 0)))
     print_output = int(gm.dft(print_output, not quiet))
     show_err = int(show_err)
-    ignore_err = int(gm.dft(ignore_err, gp.get_stack_var('ignore_err', 1)))
+    ignore_err = int(gm.dft(ignore_err, gp.get_stack_var("ignore_err", 1)))
 
     gp.qprint_issuing(command_string, test_mode)
     if test_mode:
@@ -353,14 +369,16 @@
     command_timed_out = False
     func_out_history_buf = ""
     for attempt_num in range(1, max_attempts + 1):
-        sub_proc = subprocess.Popen(command_string,
-                                    bufsize=1,
-                                    shell=True,
-                                    universal_newlines=True,
-                                    executable='/bin/bash',
-                                    stdin=subprocess.PIPE,
-                                    stdout=subprocess.PIPE,
-                                    stderr=stderr)
+        sub_proc = subprocess.Popen(
+            command_string,
+            bufsize=1,
+            shell=True,
+            universal_newlines=True,
+            executable="/bin/bash",
+            stdin=subprocess.PIPE,
+            stdout=subprocess.PIPE,
+            stderr=stderr,
+        )
         if fork:
             return sub_proc
 
@@ -387,7 +405,7 @@
         shell_rc = sub_proc.returncode
         if shell_rc in valid_rcs:
             # Check output for text indicating there is an error.
-            if error_regexes and re.match('|'.join(error_regexes), stdout_buf):
+            if error_regexes and re.match("|".join(error_regexes), stdout_buf):
                 shell_rc = -1
             else:
                 break
@@ -415,21 +433,25 @@
         gp.gp_print(func_out_buf)
     else:
         if show_err:
-            gp.gp_print(func_out_history_buf, stream='stderr')
+            gp.gp_print(func_out_history_buf, stream="stderr")
         else:
             # There is no error information to show so just print output from last loop iteration.
             gp.gp_print(func_out_buf)
         if not ignore_err:
             # If the caller has already asked to show error info, avoid repeating that in the failure message.
-            err_msg = "The prior shell command failed.\n" if show_err \
-                else err_msg
+            err_msg = (
+                "The prior shell command failed.\n" if show_err else err_msg
+            )
             if robot_env:
                 BuiltIn().fail(err_msg)
             else:
                 raise ValueError(err_msg)
 
-    return (shell_rc, stdout_buf, stderr_buf) if return_stderr \
+    return (
+        (shell_rc, stdout_buf, stderr_buf)
+        if return_stderr
         else (shell_rc, stdout_buf)
+    )
 
 
 def t_shell_cmd(command_string, **kwargs):
@@ -440,14 +462,16 @@
     See shell_cmd prolog for details on all arguments.
     """
 
-    if 'test_mode' in kwargs:
-        error_message = "Programmer error - test_mode is not a valid" +\
-            " argument to this function."
+    if "test_mode" in kwargs:
+        error_message = (
+            "Programmer error - test_mode is not a valid"
+            + " argument to this function."
+        )
         gp.print_error_report(error_message)
         exit(1)
 
-    test_mode = int(gp.get_stack_var('test_mode', 0))
-    kwargs['test_mode'] = test_mode
+    test_mode = int(gp.get_stack_var("test_mode", 0))
+    kwargs["test_mode"] = test_mode
 
     return shell_cmd(command_string, **kwargs)
 
@@ -521,8 +545,9 @@
     new_kwargs = collections.OrderedDict()
 
     # Get position number of first keyword on the calling line of code.
-    (args, varargs, keywords, locals) =\
-        inspect.getargvalues(inspect.stack()[stack_frame_ix][0])
+    (args, varargs, keywords, locals) = inspect.getargvalues(
+        inspect.stack()[stack_frame_ix][0]
+    )
     first_kwarg_pos = 1 + len(args)
     if varargs is not None:
         first_kwarg_pos += len(locals[varargs])
@@ -531,7 +556,7 @@
         arg_name = gp.get_arg_name(None, arg_num, stack_frame_ix + 2)
         # Continuing with the prior example, the following line will result
         # in key being set to 'arg1'.
-        key = arg_name.split('=')[0]
+        key = arg_name.split("=")[0]
         new_kwargs[key] = kwargs[key]
 
     return new_kwargs
@@ -684,7 +709,7 @@
         del pos_parms[-1]
     else:
         # Either get stack_frame_ix from the caller via options or set it to the default value.
-        stack_frame_ix = options.pop('_stack_frame_ix_', 1)
+        stack_frame_ix = options.pop("_stack_frame_ix_", 1)
         if gm.python_version < gm.ordered_dict_version:
             # Re-establish the original options order as specified on the original line of code.  This
             # function depends on correct order.
@@ -709,6 +734,6 @@
                 command_string += gm.quote_bash_parm(str(value))
     # Finally, append the pos_parms to the end of the command_string.  Use filter to eliminate blank pos
     # parms.
-    command_string = ' '.join([command_string] + list(filter(None, pos_parms)))
+    command_string = " ".join([command_string] + list(filter(None, pos_parms)))
 
     return command_string
diff --git a/lib/gen_misc.py b/lib/gen_misc.py
index ad5beea..d7a6373 100755
--- a/lib/gen_misc.py
+++ b/lib/gen_misc.py
@@ -4,16 +4,18 @@
 This module provides many valuable functions such as my_parm_file.
 """
 
+import collections
+import errno
+import inspect
+import json
+import os
+import random
+import shutil
+
 # sys and os are needed to get the program dir path and program name.
 import sys
-import errno
-import os
-import shutil
-import collections
-import json
 import time
-import inspect
-import random
+
 try:
     import ConfigParser
 except ImportError:
@@ -22,17 +24,20 @@
     import StringIO
 except ImportError:
     import io
+
 import re
 import socket
 import tempfile
+
 try:
     import psutil
+
     psutil_imported = True
 except ImportError:
     psutil_imported = False
 
-import gen_print as gp
 import gen_cmd as gc
+import gen_print as gp
 
 robot_env = gp.robot_env
 if robot_env:
@@ -65,7 +70,7 @@
     mode                            The mode or permissions to be granted to the created directories.
     quiet                           Indicates whether this function should run the print_issuing() function.
     """
-    quiet = int(dft(quiet, gp.get_stack_var('quiet', 0)))
+    quiet = int(dft(quiet, gp.get_stack_var("quiet", 0)))
     gp.qprint_issuing("os.makedirs('" + path + "', mode=" + oct(mode) + ")")
     try:
         os.makedirs(path, mode)
@@ -84,9 +89,11 @@
     (All parms are passed directly to shutil.rmtree.  See its prolog for details)
     quiet                           Indicates whether this function should run the print_issuing() function.
     """
-    quiet = int(dft(quiet, gp.get_stack_var('quiet', 0)))
+    quiet = int(dft(quiet, gp.get_stack_var("quiet", 0)))
     print_string = gp.sprint_executing(max_width=2000)
-    print_string = re.sub(r"Executing: ", "Issuing: shutil.", print_string.rstrip("\n"))
+    print_string = re.sub(
+        r"Executing: ", "Issuing: shutil.", print_string.rstrip("\n")
+    )
     gp.qprintn(re.sub(r", quiet[ ]?=.*", ")", print_string))
     shutil.rmtree(path, ignore_errors, onerror)
 
@@ -102,7 +109,7 @@
     path                            The path of the directory to change to.
     quiet                           Indicates whether this function should run the print_issuing() function.
     """
-    quiet = int(dft(quiet, gp.get_stack_var('quiet', 0)))
+    quiet = int(dft(quiet, gp.get_stack_var("quiet", 0)))
     gp.qprint_issuing("os.chdir('" + path + "')")
     os.chdir(path)
 
@@ -117,11 +124,13 @@
     file_path                       The relative file path (e.g. "my_file" or "lib/my_file").
     """
 
-    shell_rc, out_buf = gc.cmd_fnc_u("which " + file_path, quiet=1,
-                                     print_output=0, show_err=0)
+    shell_rc, out_buf = gc.cmd_fnc_u(
+        "which " + file_path, quiet=1, print_output=0, show_err=0
+    )
     if shell_rc != 0:
-        error_message = "Failed to find complete path for file \"" +\
-                        file_path + "\".\n"
+        error_message = (
+            'Failed to find complete path for file "' + file_path + '".\n'
+        )
         error_message += gp.sprint_var(shell_rc, gp.hexa())
         error_message += out_buf
         if robot_env:
@@ -135,9 +144,7 @@
     return file_path
 
 
-def add_path(new_path,
-             path,
-             position=0):
+def add_path(new_path, path, position=0):
     r"""
     Add new_path to path, provided that path doesn't already contain new_path, and return the result.
 
@@ -183,9 +190,7 @@
     return default if value is None else value
 
 
-def get_mod_global(var_name,
-                   default=None,
-                   mod_name="__main__"):
+def get_mod_global(var_name, default=None, mod_name="__main__"):
     r"""
     Get module global variable value and return it.
 
@@ -204,10 +209,12 @@
     try:
         module = sys.modules[mod_name]
     except KeyError:
-        gp.print_error_report("Programmer error - The mod_name passed to"
-                              + " this function is invalid:\n"
-                              + gp.sprint_var(mod_name))
-        raise ValueError('Programmer error.')
+        gp.print_error_report(
+            "Programmer error - The mod_name passed to"
+            + " this function is invalid:\n"
+            + gp.sprint_var(mod_name)
+        )
+        raise ValueError("Programmer error.")
 
     if default is None:
         return getattr(module, var_name)
@@ -215,8 +222,7 @@
         return getattr(module, var_name, default)
 
 
-def global_default(var_value,
-                   default=0):
+def global_default(var_value, default=0):
     r"""
     If var_value is not None, return it.  Otherwise, return the global
     variable of the same name, if it exists.  If not, return default.
@@ -239,9 +245,7 @@
     return dft(var_value, get_mod_global(var_name, 0))
 
 
-def set_mod_global(var_value,
-                   mod_name="__main__",
-                   var_name=None):
+def set_mod_global(var_value, mod_name="__main__", var_name=None):
     r"""
     Set a global variable for a given module.
 
@@ -255,10 +259,12 @@
     try:
         module = sys.modules[mod_name]
     except KeyError:
-        gp.print_error_report("Programmer error - The mod_name passed to"
-                              + " this function is invalid:\n"
-                              + gp.sprint_var(mod_name))
-        raise ValueError('Programmer error.')
+        gp.print_error_report(
+            "Programmer error - The mod_name passed to"
+            + " this function is invalid:\n"
+            + gp.sprint_var(mod_name)
+        )
+        raise ValueError("Programmer error.")
 
     if var_name is None:
         var_name = gp.get_arg_name(None, 1, 2)
@@ -292,7 +298,7 @@
         string_file = io.StringIO()
 
     # Write the dummy section header to the string file.
-    string_file.write('[dummysection]\n')
+    string_file.write("[dummysection]\n")
     # Write the entire contents of the properties file to the string file.
     string_file.write(open(prop_file_path).read())
     # Rewind the string file.
@@ -309,15 +315,12 @@
     config_parser.readfp(string_file)
     # Return the properties as a dictionary.
     if robot_env:
-        return DotDict(config_parser.items('dummysection'))
+        return DotDict(config_parser.items("dummysection"))
     else:
-        return collections.OrderedDict(config_parser.items('dummysection'))
+        return collections.OrderedDict(config_parser.items("dummysection"))
 
 
-def file_to_list(file_path,
-                 newlines=0,
-                 comments=1,
-                 trim=0):
+def file_to_list(file_path, newlines=0, comments=1, trim=0):
     r"""
     Return the contents of a file as a list.  Each element of the resulting
     list is one line from the file.
@@ -354,7 +357,7 @@
     See file_to_list defined above for description of arguments.
     """
 
-    return '\n'.join(file_to_list(*args, **kwargs))
+    return "\n".join(file_to_list(*args, **kwargs))
 
 
 def append_file(file_path, buffer):
@@ -376,7 +379,7 @@
     the list will be normalized and have a trailing slash added.
     """
 
-    PATH_LIST = os.environ['PATH'].split(":")
+    PATH_LIST = os.environ["PATH"].split(":")
     PATH_LIST = [os.path.normpath(path) + os.sep for path in PATH_LIST]
 
     return PATH_LIST
@@ -402,7 +405,7 @@
     buffer                          The string whose quotes are to be escaped.
     """
 
-    return re.sub("\'", "\'\\\'\'", buffer)
+    return re.sub("'", "'\\''", buffer)
 
 
 def quote_bash_parm(parm):
@@ -424,19 +427,18 @@
     # Tilde expansion: ~
     # Piped commands: |
     # Bash re-direction: >, <
-    bash_special_chars = set(' \'"$*?[]+@!{}~|><')
+    bash_special_chars = set(" '\"$*?[]+@!{}~|><")
 
     if any((char in bash_special_chars) for char in parm):
         return "'" + escape_bash_quotes(parm) + "'"
 
-    if parm == '':
+    if parm == "":
         parm = "''"
 
     return parm
 
 
-def get_host_name_ip(host=None,
-                     short_name=0):
+def get_host_name_ip(host=None, short_name=0):
     r"""
     Get the host name and the IP address for the given host and return them as a tuple.
 
@@ -451,8 +453,11 @@
     try:
         host_ip = socket.gethostbyname(host)
     except socket.gaierror as my_gaierror:
-        message = "Unable to obtain the host name for the following host:" +\
-                  "\n" + gp.sprint_var(host)
+        message = (
+            "Unable to obtain the host name for the following host:"
+            + "\n"
+            + gp.sprint_var(host)
+        )
         gp.print_error_report(message)
         raise my_gaierror
 
@@ -488,8 +493,7 @@
     return True
 
 
-def to_signed(number,
-              bit_width=None):
+def to_signed(number, bit_width=None):
     r"""
     Convert number to a signed number and return the result.
 
@@ -530,7 +534,7 @@
 
     if number < 0:
         return number
-    neg_bit_mask = 2**(bit_width - 1)
+    neg_bit_mask = 2 ** (bit_width - 1)
     if number & neg_bit_mask:
         return ((2**bit_width) - number) * -1
     else:
@@ -538,7 +542,6 @@
 
 
 def get_child_pids(quiet=1):
-
     r"""
     Get and return a list of pids representing all first-generation processes that are the children of the
     current process.
@@ -564,24 +567,30 @@
         # Otherwise, find child pids using shell commands.
         print_output = not quiet
 
-        ps_cmd_buf = "ps --no-headers --ppid " + str(os.getpid()) +\
-            " -o pid,args"
+        ps_cmd_buf = (
+            "ps --no-headers --ppid " + str(os.getpid()) + " -o pid,args"
+        )
         # Route the output of ps to a temporary file for later grepping.  Avoid using " | grep" in the ps
         # command string because it creates yet another process which is of no interest to the caller.
         temp = tempfile.NamedTemporaryFile()
         temp_file_path = temp.name
-        gc.shell_cmd(ps_cmd_buf + " > " + temp_file_path,
-                     print_output=print_output)
+        gc.shell_cmd(
+            ps_cmd_buf + " > " + temp_file_path, print_output=print_output
+        )
         # Sample contents of the temporary file:
         # 30703 sleep 2
         # 30795 /bin/bash -c ps --no-headers --ppid 30672 -o pid,args > /tmp/tmpqqorWY
         # Use egrep to exclude the "ps" process itself from the results collected with the prior shell_cmd
         # invocation.  Only the other children are of interest to the caller.  Use cut on the grep results to
         # obtain only the pid column.
-        rc, output = \
-            gc.shell_cmd("egrep -v '" + re.escape(ps_cmd_buf) + "' "
-                         + temp_file_path + " | cut -c1-5",
-                         print_output=print_output)
+        rc, output = gc.shell_cmd(
+            "egrep -v '"
+            + re.escape(ps_cmd_buf)
+            + "' "
+            + temp_file_path
+            + " | cut -c1-5",
+            print_output=print_output,
+        )
         # Split the output buffer by line into a list.  Strip each element of extra spaces and convert each
         # element to an integer.
         return map(int, map(str.strip, filter(None, output.split("\n"))))
@@ -671,8 +680,7 @@
     return re.sub("[^0-9\\.]", "", sys_version)
 
 
-python_version = \
-    version_tuple(get_python_version())
+python_version = version_tuple(get_python_version())
 ordered_dict_version = version_tuple("3.6")
 
 
@@ -714,11 +722,14 @@
         pass
 
     callers_stack_frame = inspect.stack()[1]
-    file_name_elements = \
-        [
-            gp.pgm_name, callers_stack_frame.function, "line_" + str(callers_stack_frame.lineno),
-            "pid_" + str(os.getpid()), str(random.randint(0, 1000000)), suffix
-        ]
+    file_name_elements = [
+        gp.pgm_name,
+        callers_stack_frame.function,
+        "line_" + str(callers_stack_frame.lineno),
+        "pid_" + str(os.getpid()),
+        str(random.randint(0, 1000000)),
+        suffix,
+    ]
     temp_file_name = delim.join(file_name_elements)
 
     temp_file_path = temp_dir_path + temp_file_name
diff --git a/lib/gen_plug_in.py b/lib/gen_plug_in.py
index fc57cef..d6ab0a6 100755
--- a/lib/gen_plug_in.py
+++ b/lib/gen_plug_in.py
@@ -4,27 +4,29 @@
 This module provides functions which are useful for running plug-ins.
 """
 
-import sys
-import os
 import glob
+import os
+import sys
 
-import gen_print as gp
 import gen_misc as gm
+import gen_print as gp
 
 # Some help text that is common to more than one program.
-plug_in_dir_paths_help_text = \
-    'This is a colon-separated list of plug-in directory paths.  If one' +\
-    ' of the entries in the list is a plain directory name (i.e. no' +\
-    ' path info), it will be taken to be a native plug-in.  In that case,' +\
-    ' %(prog)s will search for the native plug-in in the "plug-ins"' +\
-    ' subdirectory of each path in the PATH environment variable until it' +\
-    ' is found.  Also, integrated plug-ins will automatically be appended' +\
-    ' to your plug_in_dir_paths list.  An integrated plug-in is any plug-in' +\
-    ' found using the PATH variable that contains a file named "integrated".'
+plug_in_dir_paths_help_text = (
+    "This is a colon-separated list of plug-in directory paths.  If one"
+    + " of the entries in the list is a plain directory name (i.e. no"
+    + " path info), it will be taken to be a native plug-in.  In that case,"
+    + ' %(prog)s will search for the native plug-in in the "plug-ins"'
+    + " subdirectory of each path in the PATH environment variable until it"
+    + " is found.  Also, integrated plug-ins will automatically be appended"
+    + " to your plug_in_dir_paths list.  An integrated plug-in is any plug-in"
+    + ' found using the PATH variable that contains a file named "integrated".'
+)
 
-mch_class_help_text = \
-    'The class of machine that we are testing (e.g. "op" = "open power",' +\
-    ' "obmc" = "open bmc", etc).'
+mch_class_help_text = (
+    'The class of machine that we are testing (e.g. "op" = "open power",'
+    + ' "obmc" = "open bmc", etc).'
+)
 
 PATH_LIST = gm.return_path_list()
 
@@ -64,17 +66,16 @@
 
     global plug_in_base_path_list
     for plug_in_base_dir_path in plug_in_base_path_list:
-        candidate_plug_in_dir_path = os.path.normpath(plug_in_base_dir_path
-                                                      + plug_in_name) + \
-            os.sep
+        candidate_plug_in_dir_path = (
+            os.path.normpath(plug_in_base_dir_path + plug_in_name) + os.sep
+        )
         if os.path.isdir(candidate_plug_in_dir_path):
             return candidate_plug_in_dir_path
 
     return ""
 
 
-def validate_plug_in_package(plug_in_dir_path,
-                             mch_class="obmc"):
+def validate_plug_in_package(plug_in_dir_path, mch_class="obmc"):
     r"""
     Validate the plug in package and return the normalized plug-in directory path.
 
@@ -88,33 +89,42 @@
 
     if os.path.isabs(plug_in_dir_path):
         # plug_in_dir_path begins with a slash so it is an absolute path.
-        candidate_plug_in_dir_path = os.path.normpath(plug_in_dir_path) +\
-            os.sep
+        candidate_plug_in_dir_path = (
+            os.path.normpath(plug_in_dir_path) + os.sep
+        )
         if not os.path.isdir(candidate_plug_in_dir_path):
-            gp.print_error_report("Plug-in directory path \""
-                                  + plug_in_dir_path + "\" does not exist.\n")
+            gp.print_error_report(
+                'Plug-in directory path "'
+                + plug_in_dir_path
+                + '" does not exist.\n'
+            )
             exit(1)
     else:
         # The plug_in_dir_path is actually a simple name (e.g. "OBMC_Sample")...
         candidate_plug_in_dir_path = find_plug_in_package(plug_in_dir_path)
         if candidate_plug_in_dir_path == "":
             global PATH_LIST
-            gp.print_error_report("Plug-in directory path \""
-                                  + plug_in_dir_path + "\" could not be found"
-                                  + " in any of the following directories:\n"
-                                  + gp.sprint_var(PATH_LIST))
+            gp.print_error_report(
+                'Plug-in directory path "'
+                + plug_in_dir_path
+                + '" could not be found'
+                + " in any of the following directories:\n"
+                + gp.sprint_var(PATH_LIST)
+            )
             exit(1)
     # Make sure that this plug-in supports us...
     supports_file_path = candidate_plug_in_dir_path + "supports_" + mch_class
     if not os.path.exists(supports_file_path):
-        gp.print_error_report("The following file path could not be"
-                              + " found:\n"
-                              + gp.sprint_varx("supports_file_path",
-                                               supports_file_path)
-                              + "\nThis file is necessary to indicate that"
-                              + " the given plug-in supports the class of"
-                              + " machine we are testing, namely \""
-                              + mch_class + "\".\n")
+        gp.print_error_report(
+            "The following file path could not be"
+            + " found:\n"
+            + gp.sprint_varx("supports_file_path", supports_file_path)
+            + "\nThis file is necessary to indicate that"
+            + " the given plug-in supports the class of"
+            + ' machine we are testing, namely "'
+            + mch_class
+            + '".\n'
+        )
         exit(1)
 
     return candidate_plug_in_dir_path
@@ -136,22 +146,25 @@
 
     integrated_plug_ins_list = []
 
-    DEBUG_SKIP_INTEGRATED = int(os.getenv('DEBUG_SKIP_INTEGRATED', '0'))
+    DEBUG_SKIP_INTEGRATED = int(os.getenv("DEBUG_SKIP_INTEGRATED", "0"))
 
     if DEBUG_SKIP_INTEGRATED:
         return integrated_plug_ins_list
 
     for plug_in_base_path in plug_in_base_path_list:
         # Get a list of all plug-in paths that support our mch_class.
-        mch_class_candidate_list = glob.glob(plug_in_base_path
-                                             + "*/supports_" + mch_class)
+        mch_class_candidate_list = glob.glob(
+            plug_in_base_path + "*/supports_" + mch_class
+        )
         for candidate_path in mch_class_candidate_list:
-            integrated_plug_in_dir_path = os.path.dirname(candidate_path) +\
-                os.sep
+            integrated_plug_in_dir_path = (
+                os.path.dirname(candidate_path) + os.sep
+            )
             integrated_file_path = integrated_plug_in_dir_path + "integrated"
             if os.path.exists(integrated_file_path):
-                plug_in_name = \
-                    os.path.basename(os.path.dirname(candidate_path))
+                plug_in_name = os.path.basename(
+                    os.path.dirname(candidate_path)
+                )
                 if plug_in_name not in integrated_plug_ins_list:
                     # If this plug-in has not already been added to the list...
                     integrated_plug_ins_list.append(plug_in_name)
@@ -159,8 +172,7 @@
     return integrated_plug_ins_list
 
 
-def return_plug_in_packages_list(plug_in_dir_paths,
-                                 mch_class="obmc"):
+def return_plug_in_packages_list(plug_in_dir_paths, mch_class="obmc"):
     r"""
     Return a list of plug-in packages given the plug_in_dir_paths string.  This function calls
     validate_plug_in_package so it will fail if plug_in_dir_paths contains any invalid plug-ins.
@@ -184,8 +196,13 @@
 
     plug_in_packages_list = plug_in_packages_list + integrated_plug_ins_list
 
-    plug_in_packages_list = \
-        list(set([validate_plug_in_package(path, mch_class)
-                  for path in plug_in_packages_list]))
+    plug_in_packages_list = list(
+        set(
+            [
+                validate_plug_in_package(path, mch_class)
+                for path in plug_in_packages_list
+            ]
+        )
+    )
 
     return plug_in_packages_list
diff --git a/lib/gen_plug_in_utils.py b/lib/gen_plug_in_utils.py
index 0cf3262..dbbafe5 100755
--- a/lib/gen_plug_in_utils.py
+++ b/lib/gen_plug_in_utils.py
@@ -4,16 +4,16 @@
 This module provides functions which are useful to plug-in call point programs.
 """
 
-import sys
+import collections
 import os
 import re
-import collections
+import sys
 
+import func_args as fa
+import gen_cmd as gc
+import gen_misc as gm
 import gen_print as gp
 import gen_valid as gv
-import gen_misc as gm
-import gen_cmd as gc
-import func_args as fa
 
 PLUG_VAR_PREFIX = os.environ.get("PLUG_VAR_PREFIX", "AUTOBOOT")
 
@@ -36,9 +36,7 @@
         return plug_in_package_name
 
 
-def return_plug_vars(general=True,
-                     custom=True,
-                     plug_in_package_name=None):
+def return_plug_vars(general=True, custom=True, plug_in_package_name=None):
     r"""
     Return an OrderedDict which is sorted by key and which contains all of the plug-in environment variables.
 
@@ -82,7 +80,9 @@
     regex_list = []
     if not (general or custom):
         return collections.OrderedDict()
-    plug_in_package_name = gm.dft(plug_in_package_name, get_plug_in_package_name())
+    plug_in_package_name = gm.dft(
+        plug_in_package_name, get_plug_in_package_name()
+    )
     if general:
         regex_list = [PLUG_VAR_PREFIX, "AUTOGUI"]
     if custom:
@@ -92,17 +92,23 @@
 
     # Set a default for nickname.
     if os.environ.get("AUTOBOOT_OPENBMC_NICKNAME", "") == "":
-        os.environ['AUTOBOOT_OPENBMC_NICKNAME'] = \
-            os.environ.get("AUTOBOOT_OPENBMC_HOST", "")
+        os.environ["AUTOBOOT_OPENBMC_NICKNAME"] = os.environ.get(
+            "AUTOBOOT_OPENBMC_HOST", ""
+        )
 
     if os.environ.get("AUTOIPL_FSP1_NICKNAME", "") == "":
-        os.environ['AUTOIPL_FSP1_NICKNAME'] = \
-            os.environ.get("AUTOIPL_FSP1_NAME", "").split(".")[0]
+        os.environ["AUTOIPL_FSP1_NICKNAME"] = os.environ.get(
+            "AUTOIPL_FSP1_NAME", ""
+        ).split(".")[0]
 
     # For all variables specified in the parm_def file, we want them to default to "" rather than being unset.
     # Process the parm_def file if it exists.
-    parm_def_file_path = os.path.dirname(gp.pgm_dir_path.rstrip("/")) + "/" + plug_in_package_name \
+    parm_def_file_path = (
+        os.path.dirname(gp.pgm_dir_path.rstrip("/"))
+        + "/"
+        + plug_in_package_name
         + "/parm_def"
+    )
     if os.path.exists(parm_def_file_path):
         parm_defs = gm.my_parm_file(parm_def_file_path)
     else:
@@ -115,8 +121,10 @@
 
     # Create a list of plug-in environment variables by pre-pending <all caps plug-in package name>_<all
     # caps var name>
-    plug_in_parm_names = [plug_in_package_name.upper() + "_" + x for x in
-                          map(str.upper, parm_defs.keys())]
+    plug_in_parm_names = [
+        plug_in_package_name.upper() + "_" + x
+        for x in map(str.upper, parm_defs.keys())
+    ]
     # Example plug_in_parm_names:
     # plug_in_parm_names:
     #  plug_in_parm_names[0]: STOP_REST_FAIL
@@ -137,13 +145,20 @@
         if os.environ[var_name] == "":
             os.environ[var_name] = str(default_value)
 
-    plug_var_dict = \
-        collections.OrderedDict(sorted({k: v for (k, v) in
-                                        os.environ.items()
-                                        if re.match(regex, k)}.items()))
+    plug_var_dict = collections.OrderedDict(
+        sorted(
+            {
+                k: v for (k, v) in os.environ.items() if re.match(regex, k)
+            }.items()
+        )
+    )
     # Restore the types of any variables where the caller had defined default values.
     for key, value in non_string_defaults.items():
-        cmd_buf = "plug_var_dict[key] = " + str(value).split("'")[1] + "(plug_var_dict[key]"
+        cmd_buf = (
+            "plug_var_dict[key] = "
+            + str(value).split("'")[1]
+            + "(plug_var_dict[key]"
+        )
         if value is int:
             # Use int base argument of 0 to allow it to interpret hex strings.
             cmd_buf += ", 0)"
@@ -152,8 +167,11 @@
         exec(cmd_buf) in globals(), locals()
     # Register password values to prevent printing them out.  Any plug var whose name ends in PASSWORD will
     # be registered.
-    password_vals = {k: v for (k, v) in plug_var_dict.items()
-                     if re.match(r".*_PASSWORD$", k)}.values()
+    password_vals = {
+        k: v
+        for (k, v) in plug_var_dict.items()
+        if re.match(r".*_PASSWORD$", k)
+    }.values()
     map(gp.register_passwords, password_vals)
 
     return plug_var_dict
@@ -231,8 +249,7 @@
         setattr(module, re.sub("^" + PLUG_VAR_PREFIX + "_", "", key), value)
 
 
-def get_plug_default(var_name,
-                     default=None):
+def get_plug_default(var_name, default=None):
     r"""
     Derive and return a default value for the given parm variable.
 
@@ -288,7 +305,7 @@
     default_value = os.environ.get(package_var_name, None)
     if default_value is not None:
         # A package-name version of the variable was found so return its value.
-        return (default_value)
+        return default_value
 
     plug_var_name = PLUG_VAR_PREFIX + "_OVERRIDE_" + var_name
     default_value = os.environ.get(plug_var_name, None)
@@ -305,8 +322,7 @@
     return default
 
 
-def required_plug_in(required_plug_in_names,
-                     plug_in_dir_paths=None):
+def required_plug_in(required_plug_in_names, plug_in_dir_paths=None):
     r"""
     Determine whether the required_plug_in_names are in plug_in_dir_paths, construct an error_message and
     call gv.process_error_message(error_message).
@@ -327,15 +343,22 @@
     """
 
     # Calculate default value for plug_in_dir_paths.
-    plug_in_dir_paths = gm.dft(plug_in_dir_paths,
-                               os.environ.get('AUTOGUI_PLUG_IN_DIR_PATHS',
-                                              os.environ.get(PLUG_VAR_PREFIX + "_PLUG_IN_DIR_PATHS", "")))
+    plug_in_dir_paths = gm.dft(
+        plug_in_dir_paths,
+        os.environ.get(
+            "AUTOGUI_PLUG_IN_DIR_PATHS",
+            os.environ.get(PLUG_VAR_PREFIX + "_PLUG_IN_DIR_PATHS", ""),
+        ),
+    )
 
     # Convert plug_in_dir_paths to a list of base names.
-    plug_in_dir_paths = \
-        list(filter(None, map(os.path.basename, plug_in_dir_paths.split(":"))))
+    plug_in_dir_paths = list(
+        filter(None, map(os.path.basename, plug_in_dir_paths.split(":")))
+    )
 
-    error_message = gv.valid_list(plug_in_dir_paths, required_values=required_plug_in_names)
+    error_message = gv.valid_list(
+        plug_in_dir_paths, required_values=required_plug_in_names
+    )
     if error_message:
         return gv.process_error_message(error_message)
 
@@ -356,20 +379,31 @@
                                     to retrieve data saved by another plug-in package.
     """
 
-    plug_in_package_name = gm.dft(plug_in_package_name,
-                                  get_plug_in_package_name())
+    plug_in_package_name = gm.dft(
+        plug_in_package_name, get_plug_in_package_name()
+    )
 
-    BASE_TOOL_DIR_PATH = \
-        gm.add_trailing_slash(os.environ.get(PLUG_VAR_PREFIX
-                                             + "_BASE_TOOL_DIR_PATH",
-                                             "/tmp/"))
+    BASE_TOOL_DIR_PATH = gm.add_trailing_slash(
+        os.environ.get(PLUG_VAR_PREFIX + "_BASE_TOOL_DIR_PATH", "/tmp/")
+    )
     NICKNAME = os.environ.get("AUTOBOOT_OPENBMC_NICKNAME", "")
     if NICKNAME == "":
         NICKNAME = os.environ["AUTOIPL_FSP1_NICKNAME"]
     MASTER_PID = os.environ[PLUG_VAR_PREFIX + "_MASTER_PID"]
-    gp.dprint_vars(BASE_TOOL_DIR_PATH, NICKNAME, plug_in_package_name, MASTER_PID)
-    return BASE_TOOL_DIR_PATH + gm.username() + "/" + NICKNAME + "/" +\
-        plug_in_package_name + "/" + str(MASTER_PID) + "/"
+    gp.dprint_vars(
+        BASE_TOOL_DIR_PATH, NICKNAME, plug_in_package_name, MASTER_PID
+    )
+    return (
+        BASE_TOOL_DIR_PATH
+        + gm.username()
+        + "/"
+        + NICKNAME
+        + "/"
+        + plug_in_package_name
+        + "/"
+        + str(MASTER_PID)
+        + "/"
+    )
 
 
 def create_plug_in_save_dir(plug_in_package_name=None):
@@ -397,8 +431,9 @@
     plug_in_package_name            See compose_plug_in_save_dir_path for details.
     """
 
-    gc.shell_cmd("rm -rf "
-                 + compose_plug_in_save_dir_path(plug_in_package_name))
+    gc.shell_cmd(
+        "rm -rf " + compose_plug_in_save_dir_path(plug_in_package_name)
+    )
 
 
 def save_plug_in_value(var_value=None, plug_in_package_name=None, **kwargs):
@@ -439,7 +474,7 @@
         var_name = gp.get_arg_name(0, 1, stack_frame_ix=2)
     plug_in_save_dir_path = create_plug_in_save_dir(plug_in_package_name)
     save_file_path = plug_in_save_dir_path + var_name
-    gp.qprint_timen("Saving \"" + var_name + "\" value.")
+    gp.qprint_timen('Saving "' + var_name + '" value.')
     gp.qprint_varx(var_name, var_value)
     gc.shell_cmd("echo '" + str(var_value) + "' > " + save_file_path)
 
@@ -485,22 +520,32 @@
     default, args, kwargs = fa.pop_arg("", *args, **kwargs)
     plug_in_package_name, args, kwargs = fa.pop_arg(None, *args, **kwargs)
     if args or kwargs:
-        error_message = "Programmer error - Too many arguments passed for this function."
+        error_message = (
+            "Programmer error - Too many arguments passed for this function."
+        )
         raise ValueError(error_message)
     plug_in_save_dir_path = create_plug_in_save_dir(plug_in_package_name)
     save_file_path = plug_in_save_dir_path + var_name
     if os.path.isfile(save_file_path):
-        gp.qprint_timen("Restoring " + var_name + " value from " + save_file_path + ".")
-        var_value = gm.file_to_list(save_file_path, newlines=0, comments=0, trim=1)[0]
+        gp.qprint_timen(
+            "Restoring " + var_name + " value from " + save_file_path + "."
+        )
+        var_value = gm.file_to_list(
+            save_file_path, newlines=0, comments=0, trim=1
+        )[0]
         if type(default) is bool:
             # Convert from string to bool.
-            var_value = (var_value == 'True')
+            var_value = var_value == "True"
         if type(default) is int:
             # Convert from string to int.
             var_value = int(var_value)
     else:
         var_value = default
-        gp.qprint_timen("Save file " + save_file_path + " does not exist so returning default value.")
+        gp.qprint_timen(
+            "Save file "
+            + save_file_path
+            + " does not exist so returning default value."
+        )
 
     gp.qprint_varx(var_name, var_value)
     return var_value
@@ -527,9 +572,14 @@
     AUTOBOOT_PROGRAM_PID = gm.get_mod_global("AUTOBOOT_PROGRAM_PID")
 
     if AUTOBOOT_MASTER_PID != AUTOBOOT_PROGRAM_PID:
-        message = get_plug_in_package_name() + "/" + gp.pgm_name + " is not" \
-            + " being called by the master program in the stack so no action" \
+        message = (
+            get_plug_in_package_name()
+            + "/"
+            + gp.pgm_name
+            + " is not"
+            + " being called by the master program in the stack so no action"
             + " will be taken."
+        )
         gp.qprint_timen(message)
         gp.qprint_vars(AUTOBOOT_MASTER_PID, AUTOBOOT_PROGRAM_PID)
         exit(0)
@@ -541,13 +591,22 @@
 
     The calling program is responsible for making sure that the tarball has been unpacked.
     """
-    AUTOBOOT_BASE_TOOL_DIR_PATH = gm.get_mod_global("AUTOBOOT_BASE_TOOL_DIR_PATH")
+    AUTOBOOT_BASE_TOOL_DIR_PATH = gm.get_mod_global(
+        "AUTOBOOT_BASE_TOOL_DIR_PATH"
+    )
     AUTOBOOT_OPENBMC_NICKNAME = gm.get_mod_global("AUTOBOOT_OPENBMC_NICKNAME")
 
-    tool_dir_path = AUTOBOOT_BASE_TOOL_DIR_PATH + os.environ.get('USER') + os.sep \
-        + AUTOBOOT_OPENBMC_NICKNAME + os.sep
-    tarball_tools_dir_path = tool_dir_path + 'tarball/x86/bin'
-    os.environ['PATH'] = gm.add_path(tarball_tools_dir_path, os.environ.get('PATH', ''))
+    tool_dir_path = (
+        AUTOBOOT_BASE_TOOL_DIR_PATH
+        + os.environ.get("USER")
+        + os.sep
+        + AUTOBOOT_OPENBMC_NICKNAME
+        + os.sep
+    )
+    tarball_tools_dir_path = tool_dir_path + "tarball/x86/bin"
+    os.environ["PATH"] = gm.add_path(
+        tarball_tools_dir_path, os.environ.get("PATH", "")
+    )
 
 
 def stop_test_rc():
@@ -573,14 +632,15 @@
 
 # Create print wrapper functions for all sprint functions defined above.
 # func_names contains a list of all print functions which should be created from their sprint counterparts.
-func_names = ['print_plug_vars']
+func_names = ["print_plug_vars"]
 
 # stderr_func_names is a list of functions whose output should go to stderr rather than stdout.
 stderr_func_names = []
 
 replace_dict = dict(gp.replace_dict)
-replace_dict['mod_qualifier'] = 'gp.'
-func_defs = gp.create_print_wrapper_funcs(func_names, stderr_func_names,
-                                          replace_dict)
+replace_dict["mod_qualifier"] = "gp."
+func_defs = gp.create_print_wrapper_funcs(
+    func_names, stderr_func_names, replace_dict
+)
 gp.gp_debug_print(func_defs)
 exec(func_defs)
diff --git a/lib/gen_print.py b/lib/gen_print.py
index 5f87343..8372832 100755
--- a/lib/gen_print.py
+++ b/lib/gen_print.py
@@ -4,28 +4,31 @@
 This module provides many print functions such as sprint_var, sprint_time, sprint_error, sprint_call_stack.
 """
 
-import sys
-import os
-import time
-import inspect
-import re
-import grp
-import socket
 import argparse
 import copy
+import grp
+import inspect
+import os
+import re
+import socket
+import sys
+import time
+
 try:
     import __builtin__
 except ImportError:
     import builtins as __builtin__
-import logging
+
 import collections
+import logging
+
 from wrap_utils import *
 
 try:
     robot_env = 1
-    from robot.utils import DotDict
-    from robot.utils import NormalizedDict
     from robot.libraries.BuiltIn import BuiltIn
+    from robot.utils import DotDict, NormalizedDict
+
     # Having access to the robot libraries alone does not indicate that we are in a robot environment.  The
     # following try block should confirm that.
     try:
@@ -40,8 +43,9 @@
 # Setting these variables for use both inside this module and by programs importing this module.
 pgm_file_path = sys.argv[0]
 pgm_name = os.path.basename(pgm_file_path)
-pgm_dir_path = os.path.normpath(re.sub("/" + pgm_name, "", pgm_file_path)) +\
-    os.path.sep
+pgm_dir_path = (
+    os.path.normpath(re.sub("/" + pgm_name, "", pgm_file_path)) + os.path.sep
+)
 
 
 # Some functions (e.g. sprint_pgm_header) have need of a program name value that looks more like a valid
@@ -55,12 +59,12 @@
 # objective is to make the variable values line up nicely with the time stamps.
 dft_col1_width = 29
 
-NANOSECONDS = os.environ.get('NANOSECONDS', '1')
+NANOSECONDS = os.environ.get("NANOSECONDS", "1")
 
 if NANOSECONDS == "1":
     dft_col1_width = dft_col1_width + 7
 
-SHOW_ELAPSED_TIME = os.environ.get('SHOW_ELAPSED_TIME', '1')
+SHOW_ELAPSED_TIME = os.environ.get("SHOW_ELAPSED_TIME", "1")
 
 if SHOW_ELAPSED_TIME == "1":
     if NANOSECONDS == "1":
@@ -107,7 +111,7 @@
 
 
 # The user can set environment variable "GEN_PRINT_DEBUG" to get debug output from this module.
-gen_print_debug = int(os.environ.get('GEN_PRINT_DEBUG', 0))
+gen_print_debug = int(os.environ.get("GEN_PRINT_DEBUG", 0))
 
 
 def sprint_func_name(stack_frame_ix=None):
@@ -156,14 +160,12 @@
     Return the number of spaces at the beginning of the line.
     """
 
-    return len(line) - len(line.lstrip(' '))
+    return len(line) - len(line.lstrip(" "))
 
 
 # get_arg_name is not a print function per se.  It has been included in this module because it is used by
 # sprint_var which is defined in this module.
-def get_arg_name(var,
-                 arg_num=1,
-                 stack_frame_ix=1):
+def get_arg_name(var, arg_num=1, stack_frame_ix=1):
     r"""
     Return the "name" of an argument passed to a function.  This could be a literal or a variable name.
 
@@ -221,17 +223,22 @@
     # sprint_var, valid_value, etc.).
 
     # The user can set environment variable "GET_ARG_NAME_DEBUG" to get debug output from this function.
-    local_debug = int(os.environ.get('GET_ARG_NAME_DEBUG', 0))
+    local_debug = int(os.environ.get("GET_ARG_NAME_DEBUG", 0))
     # In addition to GET_ARG_NAME_DEBUG, the user can set environment variable "GET_ARG_NAME_SHOW_SOURCE" to
     # have this function include source code in the debug output.
     local_debug_show_source = int(
-        os.environ.get('GET_ARG_NAME_SHOW_SOURCE', 0))
+        os.environ.get("GET_ARG_NAME_SHOW_SOURCE", 0)
+    )
 
     if stack_frame_ix < 1:
-        print_error("Programmer error - Variable \"stack_frame_ix\" has an"
-                    + " invalid value of \"" + str(stack_frame_ix) + "\".  The"
-                    + " value must be an integer that is greater than or equal"
-                    + " to 1.\n")
+        print_error(
+            'Programmer error - Variable "stack_frame_ix" has an'
+            + ' invalid value of "'
+            + str(stack_frame_ix)
+            + '".  The'
+            + " value must be an integer that is greater than or equal"
+            + " to 1.\n"
+        )
         return
 
     if local_debug:
@@ -248,15 +255,25 @@
     work_around_inspect_stack_cwd_failure()
     for count in range(0, 2):
         try:
-            frame, filename, cur_line_no, function_name, lines, index = \
-                inspect.stack()[stack_frame_ix]
+            (
+                frame,
+                filename,
+                cur_line_no,
+                function_name,
+                lines,
+                index,
+            ) = inspect.stack()[stack_frame_ix]
         except IndexError:
-            print_error("Programmer error - The caller has asked for"
-                        + " information about the stack frame at index \""
-                        + str(stack_frame_ix) + "\".  However, the stack"
-                        + " only contains " + str(len(inspect.stack()))
-                        + " entries.  Therefore the stack frame index is out"
-                        + " of range.\n")
+            print_error(
+                "Programmer error - The caller has asked for"
+                + ' information about the stack frame at index "'
+                + str(stack_frame_ix)
+                + '".  However, the stack'
+                + " only contains "
+                + str(len(inspect.stack()))
+                + " entries.  Therefore the stack frame index is out"
+                + " of range.\n"
+            )
             return
         if filename != "<string>":
             break
@@ -275,12 +292,10 @@
     # Though one would expect inspect.getsourcelines(frame) to get all module source lines if the frame is
     # "<module>", it doesn't do that.  Therefore, for this special case, do inspect.getsourcelines(module).
     if function_name == "<module>":
-        source_lines, source_line_num =\
-            inspect.getsourcelines(module)
+        source_lines, source_line_num = inspect.getsourcelines(module)
         line_ix = cur_line_no - source_line_num - 1
     else:
-        source_lines, source_line_num =\
-            inspect.getsourcelines(frame)
+        source_lines, source_line_num = inspect.getsourcelines(frame)
         line_ix = cur_line_no - source_line_num
 
     if local_debug:
@@ -295,8 +310,9 @@
         print_varx("line_ix", line_ix, indent=debug_indent)
         if local_debug_show_source:
             print_varx("source_lines", source_lines, indent=debug_indent)
-        print_varx("real_called_func_name", real_called_func_name,
-                   indent=debug_indent)
+        print_varx(
+            "real_called_func_name", real_called_func_name, indent=debug_indent
+        )
 
     # Get a list of all functions defined for the module.  Note that this doesn't work consistently when
     # _run_exitfuncs is at the top of the stack (i.e. if we're running an exit function).  I've coded a
@@ -330,8 +346,9 @@
     # The call to the function could be encased in a recast (e.g. int(func_name())).
     recast_regex = "([^ ]+\\([ ]*)?"
     import_name_regex = "([a-zA-Z0-9_]+\\.)?"
-    func_name_regex = recast_regex + import_name_regex + "(" +\
-        '|'.join(aliases) + ")"
+    func_name_regex = (
+        recast_regex + import_name_regex + "(" + "|".join(aliases) + ")"
+    )
     pre_args_regex = ".*" + func_name_regex + "[ ]*\\("
 
     # Search backward through source lines looking for the calling function name.
@@ -344,9 +361,12 @@
             found = True
             break
     if not found:
-        print_error("Programmer error - Could not find the source line with"
-                    + " a reference to function \"" + real_called_func_name
-                    + "\".\n")
+        print_error(
+            "Programmer error - Could not find the source line with"
+            + ' a reference to function "'
+            + real_called_func_name
+            + '".\n'
+        )
         return
 
     # Search forward through the source lines looking for a line whose indentation is the same or less than
@@ -365,15 +385,18 @@
         prior_line = source_lines[start_line_ix - 1]
         prior_line_stripped = re.sub(r"[ ]*\\([\r\n]$)", " \\1", prior_line)
         prior_line_indent = get_line_indent(prior_line)
-        if prior_line != prior_line_stripped and\
-           prior_line_indent < start_indent:
+        if (
+            prior_line != prior_line_stripped
+            and prior_line_indent < start_indent
+        ):
             start_line_ix -= 1
             # Remove the backslash (continuation char) from prior line.
             source_lines[start_line_ix] = prior_line_stripped
 
     # Join the start line through the end line into a composite line.
-    composite_line = ''.join(map(str.strip,
-                                 source_lines[start_line_ix:end_line_ix + 1]))
+    composite_line = "".join(
+        map(str.strip, source_lines[start_line_ix : end_line_ix + 1])
+    )
     # Insert one space after first "=" if there isn't one already.
     composite_line = re.sub("=[ ]*([^ ])", "= \\1", composite_line, 1)
 
@@ -393,8 +416,9 @@
         lvalues[ix] = lvalue
         ix += 1
     lvalue_prefix_regex = "(.*=[ ]+)?"
-    called_func_name_regex = lvalue_prefix_regex + func_name_regex +\
-        "[ ]*\\(.*"
+    called_func_name_regex = (
+        lvalue_prefix_regex + func_name_regex + "[ ]*\\(.*"
+    )
     called_func_name = re.sub(called_func_name_regex, "\\4", composite_line)
     arg_list_etc = "(" + re.sub(pre_args_regex, "", composite_line)
     if local_debug:
@@ -408,8 +432,11 @@
         print_varx("lvalue_regex", lvalue_regex, indent=debug_indent)
         print_varx("lvalue_string", lvalue_string, indent=debug_indent)
         print_varx("lvalues", lvalues, indent=debug_indent)
-        print_varx("called_func_name_regex", called_func_name_regex,
-                   indent=debug_indent)
+        print_varx(
+            "called_func_name_regex",
+            called_func_name_regex,
+            indent=debug_indent,
+        )
         print_varx("called_func_name", called_func_name, indent=debug_indent)
         print_varx("arg_list_etc", arg_list_etc, indent=debug_indent)
 
@@ -530,8 +557,11 @@
 
     if SHOW_ELAPSED_TIME == "1":
         cur_time_seconds = seconds
-        math_string = "%9.9f" % cur_time_seconds + " - " + "%9.9f" % \
-            sprint_time_last_seconds[last_seconds_ix]
+        math_string = (
+            "%9.9f" % cur_time_seconds
+            + " - "
+            + "%9.9f" % sprint_time_last_seconds[last_seconds_ix]
+        )
         elapsed_seconds = eval(math_string)
         if NANOSECONDS == "1":
             elapsed_seconds = "%11.6f" % elapsed_seconds
@@ -648,8 +678,9 @@
         return word_length_in_digits()
 
     num_length_in_bits = bit_length(working_number)
-    num_hex_digits, remainder = divmod(num_length_in_bits,
-                                       digit_length_in_bits())
+    num_hex_digits, remainder = divmod(
+        num_length_in_bits, digit_length_in_bits()
+    )
     if remainder > 0:
         # Example: the number 7 requires 3 bits.  The divmod above produces, 0 with remainder of 3.  So
         # because we have a remainder, we increment num_hex_digits from 0 to 1.
@@ -780,16 +811,17 @@
     """
 
     return [
-        'hexa',
-        'octal',
-        'binary',
-        'blank',
-        'verbose',
-        'quote_keys',
-        'show_type',
-        'strip_brackets',
-        'no_header',
-        'quote_values']
+        "hexa",
+        "octal",
+        "binary",
+        "blank",
+        "verbose",
+        "quote_keys",
+        "show_type",
+        "strip_brackets",
+        "no_header",
+        "quote_values",
+    ]
 
 
 def create_fmt_definition():
@@ -960,14 +992,16 @@
         return fmt, fmt
 
 
-def sprint_varx(var_name,
-                var_value,
-                fmt=0,
-                indent=dft_indent,
-                col1_width=dft_col1_width,
-                trailing_char="\n",
-                key_list=None,
-                delim=":"):
+def sprint_varx(
+    var_name,
+    var_value,
+    fmt=0,
+    indent=dft_indent,
+    col1_width=dft_col1_width,
+    trailing_char="\n",
+    key_list=None,
+    delim=":",
+):
     r"""
     Print the var name/value passed to it.  If the caller lets col1_width default, the printing lines up
     nicely with output generated by the print_time functions.
@@ -1071,8 +1105,9 @@
         if type(var_value) in int_types:
             # Process format values pertaining to int types.
             if fmt & hexa():
-                num_hex_digits = max(dft_num_hex_digits(),
-                                     get_req_num_hex_digits(var_value))
+                num_hex_digits = max(
+                    dft_num_hex_digits(), get_req_num_hex_digits(var_value)
+                )
                 # Convert a negative number to its positive twos complement for proper printing.  For
                 # example, instead of printing -1 as "0x-000000000000001" it will be printed as
                 # "0xffffffffffffffff".
@@ -1081,13 +1116,14 @@
             elif fmt & octal():
                 value_format = "0o%016o"
             elif fmt & binary():
-                num_digits, remainder = \
-                    divmod(max(bit_length(var_value), 1), 8)
+                num_digits, remainder = divmod(
+                    max(bit_length(var_value), 1), 8
+                )
                 num_digits *= 8
                 if remainder:
                     num_digits += 8
                 num_digits += 2
-                value_format = '#0' + str(num_digits) + 'b'
+                value_format = "#0" + str(num_digits) + "b"
                 var_value = format(var_value, value_format)
                 value_format = "%s"
         elif type(var_value) in string_types:
@@ -1097,8 +1133,9 @@
                 var_value = "<blank>"
         elif type(var_value) is type:
             var_value = str(var_value).split("'")[1]
-        format_string = "%" + str(indent) + "s%-" + str(col1_width) + "s" \
-            + value_format
+        format_string = (
+            "%" + str(indent) + "s%-" + str(col1_width) + "s" + value_format
+        )
         if fmt & show_type():
             if var_value != "":
                 format_string += " "
@@ -1109,16 +1146,19 @@
         if not (fmt & verbose()):
             # Strip everything leading up to the first left square brace.
             var_name = re.sub(r".*\[", "[", var_name)
-        if (fmt & strip_brackets()):
+        if fmt & strip_brackets():
             var_name = re.sub(r"[\[\]]", "", var_name)
         if value_format == "0x%08x":
-            return format_string % ("", str(var_name) + delim,
-                                    var_value & 0xffffffff)
+            return format_string % (
+                "",
+                str(var_name) + delim,
+                var_value & 0xFFFFFFFF,
+            )
         else:
             return format_string % ("", str(var_name) + delim, var_value)
     else:
         # The data type is complex in the sense that it has subordinate parts.
-        if (fmt & no_header()):
+        if fmt & no_header():
             buffer = ""
         else:
             # Create header line.
@@ -1127,7 +1167,7 @@
                 loc_var_name = re.sub(r".*\[", "[", var_name)
             else:
                 loc_var_name = var_name
-            if (fmt & strip_brackets()):
+            if fmt & strip_brackets():
                 loc_var_name = re.sub(r"[\[\]]", "", loc_var_name)
             format_string = "%" + str(indent) + "s%s\n"
             buffer = format_string % ("", loc_var_name + ":")
@@ -1142,9 +1182,9 @@
         loc_trailing_char = "\n"
         if is_dict(var_value):
             if type(child_fmt) is list:
-                child_quote_keys = (child_fmt[0] & quote_keys())
+                child_quote_keys = child_fmt[0] & quote_keys()
             else:
-                child_quote_keys = (child_fmt & quote_keys())
+                child_quote_keys = child_fmt & quote_keys()
             for key, value in var_value.items():
                 if key_list is not None:
                     key_list_regex = "^" + "|".join(key_list) + "$"
@@ -1156,39 +1196,65 @@
                 if child_quote_keys:
                     key = "'" + key + "'"
                 key = "[" + str(key) + "]"
-                buffer += sprint_varx(var_name + key, value, child_fmt, indent,
-                                      col1_width, loc_trailing_char, key_list,
-                                      delim)
+                buffer += sprint_varx(
+                    var_name + key,
+                    value,
+                    child_fmt,
+                    indent,
+                    col1_width,
+                    loc_trailing_char,
+                    key_list,
+                    delim,
+                )
         elif type(var_value) in (list, tuple, set):
             for key, value in enumerate(var_value):
                 ix += 1
                 if ix == length:
                     loc_trailing_char = trailing_char
                 key = "[" + str(key) + "]"
-                buffer += sprint_varx(var_name + key, value, child_fmt, indent,
-                                      col1_width, loc_trailing_char, key_list,
-                                      delim)
+                buffer += sprint_varx(
+                    var_name + key,
+                    value,
+                    child_fmt,
+                    indent,
+                    col1_width,
+                    loc_trailing_char,
+                    key_list,
+                    delim,
+                )
         elif isinstance(var_value, argparse.Namespace):
             for key in var_value.__dict__:
                 ix += 1
                 if ix == length:
                     loc_trailing_char = trailing_char
-                cmd_buf = "buffer += sprint_varx(var_name + \".\" + str(key)" \
-                          + ", var_value." + key + ", child_fmt, indent," \
-                          + " col1_width, loc_trailing_char, key_list," \
-                          + " delim)"
+                cmd_buf = (
+                    'buffer += sprint_varx(var_name + "." + str(key)'
+                    + ", var_value."
+                    + key
+                    + ", child_fmt, indent,"
+                    + " col1_width, loc_trailing_char, key_list,"
+                    + " delim)"
+                )
                 exec(cmd_buf)
         else:
             var_type = type(var_value).__name__
             func_name = sys._getframe().f_code.co_name
-            var_value = "<" + var_type + " type not supported by " + \
-                        func_name + "()>"
+            var_value = (
+                "<" + var_type + " type not supported by " + func_name + "()>"
+            )
             value_format = "%s"
             indent -= 2
             # Adjust col1_width.
             col1_width = col1_width - indent
-            format_string = "%" + str(indent) + "s%-" \
-                + str(col1_width) + "s" + value_format + trailing_char
+            format_string = (
+                "%"
+                + str(indent)
+                + "s%-"
+                + str(col1_width)
+                + "s"
+                + value_format
+                + trailing_char
+            )
             return format_string % ("", str(var_name) + ":", var_value)
 
         return buffer
@@ -1239,10 +1305,7 @@
     return buffer
 
 
-def sprint_dashes(indent=dft_indent,
-                  width=80,
-                  line_feed=1,
-                  char="-"):
+def sprint_dashes(indent=dft_indent, width=80, line_feed=1, char="-"):
     r"""
     Return a string of dashes to the caller.
 
@@ -1261,8 +1324,7 @@
     return buffer
 
 
-def sindent(text="",
-            indent=0):
+def sindent(text="", indent=0):
     r"""
     Pre-pend the specified number of characters to the text string (i.e. indent it) and return it.
 
@@ -1310,36 +1372,41 @@
 
     if func_name == "<module>":
         # If the func_name is the "main" program, we simply get the command line call string.
-        func_and_args = ' '.join(sys.argv)
+        func_and_args = " ".join(sys.argv)
     else:
         # Get the program arguments.
-        (args, varargs, keywords, locals) =\
-            inspect.getargvalues(stack_frame[0])
+        (args, varargs, keywords, locals) = inspect.getargvalues(
+            stack_frame[0]
+        )
 
         args_list = []
         for arg_name in filter(None, args + [varargs, keywords]):
             # Get the arg value from frame locals.
             arg_value = locals[arg_name]
-            if arg_name == 'self':
+            if arg_name == "self":
                 if style == func_line_style_short:
                     continue
                 # Manipulations to improve output for class methods.
                 func_name = arg_value.__class__.__name__ + "." + func_name
                 args_list.append(arg_name + " = <self>")
-            elif (style == func_line_style_short
-                  and arg_name == 'args'
-                  and type(arg_value) in (list, tuple)):
+            elif (
+                style == func_line_style_short
+                and arg_name == "args"
+                and type(arg_value) in (list, tuple)
+            ):
                 if len(arg_value) == 0:
                     continue
-                args_list.append(repr(', '.join(arg_value)))
-            elif (style == func_line_style_short
-                  and arg_name == 'kwargs'
-                  and type(arg_value) is dict):
+                args_list.append(repr(", ".join(arg_value)))
+            elif (
+                style == func_line_style_short
+                and arg_name == "kwargs"
+                and type(arg_value) is dict
+            ):
                 for key, value in arg_value.items():
                     args_list.append(key + "=" + repr(value))
             else:
                 args_list.append(arg_name + " = " + repr(arg_value))
-        args_str = "(" + ', '.join(map(str, args_list)) + ")"
+        args_str = "(" + ", ".join(map(str, args_list)) + ")"
 
         # Now we need to print this in a nicely-wrapped way.
         func_and_args = func_name + args_str
@@ -1349,9 +1416,7 @@
     return func_and_args
 
 
-def sprint_call_stack(indent=0,
-                      stack_frame_ix=0,
-                      style=None):
+def sprint_call_stack(indent=0, stack_frame_ix=0, style=None):
     r"""
     Return a call stack report for the given point in the program with line numbers, function names and
     function parameters and arguments.
@@ -1444,8 +1509,7 @@
     return sprint_time() + "Executing: " + func_and_args + "\n"
 
 
-def sprint_pgm_header(indent=0,
-                      linefeed=1):
+def sprint_pgm_header(indent=0, linefeed=1):
     r"""
     Return a standardized header that programs should print at the beginning of the run.  It includes useful
     information like command line, pid, userid, program parameters, etc.
@@ -1464,20 +1528,25 @@
 
     if robot_env:
         suite_name = BuiltIn().get_variable_value("${suite_name}")
-        buffer += sindent(sprint_time("Running test suite \"" + suite_name
-                                      + "\".\n"), indent)
+        buffer += sindent(
+            sprint_time('Running test suite "' + suite_name + '".\n'), indent
+        )
 
     buffer += sindent(sprint_time() + "Running " + pgm_name + ".\n", indent)
-    buffer += sindent(sprint_time() + "Program parameter values, etc.:\n\n",
-                      indent)
-    buffer += sprint_varx("command_line", ' '.join(sys.argv), 0, indent,
-                          col1_width)
+    buffer += sindent(
+        sprint_time() + "Program parameter values, etc.:\n\n", indent
+    )
+    buffer += sprint_varx(
+        "command_line", " ".join(sys.argv), 0, indent, col1_width
+    )
     # We want the output to show a customized name for the pid and pgid but we want it to look like a valid
     # variable name.  Therefore, we'll use pgm_name_var_name which was set when this module was imported.
-    buffer += sprint_varx(pgm_name_var_name + "_pid", os.getpid(), 0, indent,
-                          col1_width)
-    buffer += sprint_varx(pgm_name_var_name + "_pgid", os.getpgrp(), 0, indent,
-                          col1_width)
+    buffer += sprint_varx(
+        pgm_name_var_name + "_pid", os.getpid(), 0, indent, col1_width
+    )
+    buffer += sprint_varx(
+        pgm_name_var_name + "_pgid", os.getpgrp(), 0, indent, col1_width
+    )
     userid_num = str(os.geteuid())
     try:
         username = os.getlogin()
@@ -1486,30 +1555,36 @@
             username = "root"
         else:
             username = "?"
-    buffer += sprint_varx("uid", userid_num + " (" + username
-                          + ")", 0, indent, col1_width)
-    buffer += sprint_varx("gid", str(os.getgid()) + " ("
-                          + str(grp.getgrgid(os.getgid()).gr_name) + ")", 0,
-                          indent, col1_width)
-    buffer += sprint_varx("host_name", socket.gethostname(), 0, indent,
-                          col1_width)
+    buffer += sprint_varx(
+        "uid", userid_num + " (" + username + ")", 0, indent, col1_width
+    )
+    buffer += sprint_varx(
+        "gid",
+        str(os.getgid()) + " (" + str(grp.getgrgid(os.getgid()).gr_name) + ")",
+        0,
+        indent,
+        col1_width,
+    )
+    buffer += sprint_varx(
+        "host_name", socket.gethostname(), 0, indent, col1_width
+    )
     try:
-        DISPLAY = os.environ['DISPLAY']
+        DISPLAY = os.environ["DISPLAY"]
     except KeyError:
         DISPLAY = ""
     buffer += sprint_var(DISPLAY, 0, indent, col1_width)
-    PYTHON_VERSION = os.environ.get('PYTHON_VERSION', None)
+    PYTHON_VERSION = os.environ.get("PYTHON_VERSION", None)
     if PYTHON_VERSION is not None:
         buffer += sprint_var(PYTHON_VERSION, 0, indent, col1_width)
-    PYTHON_PGM_PATH = os.environ.get('PYTHON_PGM_PATH', None)
+    PYTHON_PGM_PATH = os.environ.get("PYTHON_PGM_PATH", None)
     if PYTHON_PGM_PATH is not None:
         buffer += sprint_var(PYTHON_PGM_PATH, 0, indent, col1_width)
     python_version = sys.version.replace("\n", "")
     buffer += sprint_var(python_version, 0, indent, col1_width)
-    ROBOT_VERSION = os.environ.get('ROBOT_VERSION', None)
+    ROBOT_VERSION = os.environ.get("ROBOT_VERSION", None)
     if ROBOT_VERSION is not None:
         buffer += sprint_var(ROBOT_VERSION, 0, indent, col1_width)
-    ROBOT_PGM_PATH = os.environ.get('ROBOT_PGM_PATH', None)
+    ROBOT_PGM_PATH = os.environ.get("ROBOT_PGM_PATH", None)
     if ROBOT_PGM_PATH is not None:
         buffer += sprint_var(ROBOT_PGM_PATH, 0, indent, col1_width)
 
@@ -1536,10 +1611,9 @@
     return buffer
 
 
-def sprint_error_report(error_text="\n",
-                        indent=2,
-                        format=None,
-                        stack_frame_ix=None):
+def sprint_error_report(
+    error_text="\n", indent=2, format=None, stack_frame_ix=None
+):
     r"""
     Return a string with a standardized report which includes the caller's error text, the call stack and the
     program header.
@@ -1558,12 +1632,12 @@
     indent = int(indent)
     if format is None:
         if robot_env:
-            format = 'short'
+            format = "short"
         else:
-            format = 'long'
-    error_text = error_text.rstrip('\n') + '\n'
+            format = "long"
+    error_text = error_text.rstrip("\n") + "\n"
 
-    if format == 'short':
+    if format == "short":
         return sprint_error(error_text)
 
     buffer = ""
@@ -1588,8 +1662,7 @@
     return buffer
 
 
-def sprint_issuing(cmd_buf,
-                   test_mode=0):
+def sprint_issuing(cmd_buf, test_mode=0):
     r"""
     Return a line indicating a command that the program is about to execute.
 
@@ -1610,7 +1683,7 @@
         buffer += "(test_mode) "
     if type(cmd_buf) is list:
         # Assume this is a robot command in the form of a list.
-        cmd_buf = '  '.join([str(element) for element in cmd_buf])
+        cmd_buf = "  ".join([str(element) for element in cmd_buf])
     buffer += "Issuing: " + cmd_buf + "\n"
 
     return buffer
@@ -1641,7 +1714,7 @@
     file_path                       The path to a file (e.g. "/tmp/file1").
     """
 
-    with open(file_path, 'r') as file:
+    with open(file_path, "r") as file:
         buffer = file.read()
     return buffer
 
@@ -1678,8 +1751,7 @@
     return buffer
 
 
-def gp_print(buffer,
-             stream='stdout'):
+def gp_print(buffer, stream="stdout"):
     r"""
     Print the buffer using either sys.stdout.write or BuiltIn().log_to_console depending on whether we are
     running in a robot environment.
@@ -1735,9 +1807,7 @@
     gp_print(buffer)
 
 
-def get_var_value(var_value=None,
-                  default=1,
-                  var_name=None):
+def get_var_value(var_value=None, default=1, var_name=None):
     r"""
     Return either var_value, the corresponding global value or default.
 
@@ -1787,17 +1857,16 @@
         var_name = get_arg_name(None, 1, 2)
 
     if robot_env:
-        var_value = BuiltIn().get_variable_value("${" + var_name + "}",
-                                                 default)
+        var_value = BuiltIn().get_variable_value(
+            "${" + var_name + "}", default
+        )
     else:
         var_value = getattr(__builtin__, var_name, default)
 
     return var_value
 
 
-def get_stack_var(var_name,
-                  default="",
-                  init_stack_ix=2):
+def get_stack_var(var_name, default="", init_stack_ix=2):
     r"""
     Starting with the caller's stack level, search upward in the call stack for a variable named var_name and
     return its value.  If the variable cannot be found in the stack, attempt to get the global value.  If the
@@ -1825,9 +1894,14 @@
 
     work_around_inspect_stack_cwd_failure()
     default = get_var_value(var_name=var_name, default=default)
-    return next((frame[0].f_locals[var_name]
-                 for frame in inspect.stack()[init_stack_ix:]
-                 if var_name in frame[0].f_locals), default)
+    return next(
+        (
+            frame[0].f_locals[var_name]
+            for frame in inspect.stack()[init_stack_ix:]
+            if var_name in frame[0].f_locals
+        ),
+        default,
+    )
 
 
 # hidden_text is a list of passwords which are to be replaced with asterisks by print functions defined in
@@ -1861,8 +1935,9 @@
         # Place the password into the hidden_text list.
         hidden_text.append(password)
         # Create a corresponding password regular expression.  Escape regex special characters too.
-        password_regex = '(' +\
-            '|'.join([re.escape(x) for x in hidden_text]) + ')'
+        password_regex = (
+            "(" + "|".join([re.escape(x) for x in hidden_text]) + ")"
+        )
 
 
 def replace_passwords(buffer):
@@ -1886,10 +1961,9 @@
     return re.sub(password_regex, "********", buffer)
 
 
-def create_print_wrapper_funcs(func_names,
-                               stderr_func_names,
-                               replace_dict,
-                               func_prefix=""):
+def create_print_wrapper_funcs(
+    func_names, stderr_func_names, replace_dict, func_prefix=""
+):
     r"""
     Generate code for print wrapper functions and return the generated code as a string.
 
@@ -1919,9 +1993,9 @@
 
     for func_name in func_names:
         if func_name in stderr_func_names:
-            replace_dict['output_stream'] = "stderr"
+            replace_dict["output_stream"] = "stderr"
         else:
-            replace_dict['output_stream'] = "stdout"
+            replace_dict["output_stream"] = "stdout"
 
         s_func_name = "s" + func_name
         q_func_name = "q" + func_name
@@ -1929,32 +2003,48 @@
 
         # We don't want to try to redefine the "print" function, thus the following if statement.
         if func_name != "print":
-            func_def = create_func_def_string(s_func_name,
-                                              func_prefix + func_name,
-                                              print_func_template,
-                                              replace_dict)
+            func_def = create_func_def_string(
+                s_func_name,
+                func_prefix + func_name,
+                print_func_template,
+                replace_dict,
+            )
             buffer += func_def
 
-        func_def = create_func_def_string(s_func_name,
-                                          func_prefix + "q" + func_name,
-                                          qprint_func_template, replace_dict)
+        func_def = create_func_def_string(
+            s_func_name,
+            func_prefix + "q" + func_name,
+            qprint_func_template,
+            replace_dict,
+        )
         buffer += func_def
 
-        func_def = create_func_def_string(s_func_name,
-                                          func_prefix + "d" + func_name,
-                                          dprint_func_template, replace_dict)
+        func_def = create_func_def_string(
+            s_func_name,
+            func_prefix + "d" + func_name,
+            dprint_func_template,
+            replace_dict,
+        )
         buffer += func_def
 
-        func_def = create_func_def_string(s_func_name,
-                                          func_prefix + "l" + func_name,
-                                          lprint_func_template, replace_dict)
+        func_def = create_func_def_string(
+            s_func_name,
+            func_prefix + "l" + func_name,
+            lprint_func_template,
+            replace_dict,
+        )
         buffer += func_def
 
         # Create abbreviated aliases (e.g. spvar is an alias for sprint_var).
         alias = re.sub("print_", "p", func_name)
         alias = re.sub("print", "p", alias)
-        prefixes = [func_prefix + "", "s", func_prefix + "q",
-                    func_prefix + "d", func_prefix + "l"]
+        prefixes = [
+            func_prefix + "",
+            "s",
+            func_prefix + "q",
+            func_prefix + "d",
+            func_prefix + "l",
+        ]
         for prefix in prefixes:
             if alias == "p":
                 continue
@@ -1984,49 +2074,61 @@
 # means use of the logging module.  For robot programs it means use of the BuiltIn().log() function.
 
 # Templates for the various print wrapper functions.
-print_func_template = \
-    [
-        "    <mod_qualifier>gp_print(<mod_qualifier>replace_passwords("
-        + "<call_line>), stream='<output_stream>')"
-    ]
+print_func_template = [
+    "    <mod_qualifier>gp_print(<mod_qualifier>replace_passwords("
+    + "<call_line>), stream='<output_stream>')"
+]
 
-qprint_func_template = \
-    [
-        "    quiet = <mod_qualifier>get_stack_var(\"quiet\", 0)",
-        "    if int(quiet): return"
-    ] + print_func_template
+qprint_func_template = [
+    '    quiet = <mod_qualifier>get_stack_var("quiet", 0)',
+    "    if int(quiet): return",
+] + print_func_template
 
-dprint_func_template = \
-    [
-        "    debug = <mod_qualifier>get_stack_var(\"debug\", 0)",
-        "    if not int(debug): return"
-    ] + print_func_template
+dprint_func_template = [
+    '    debug = <mod_qualifier>get_stack_var("debug", 0)',
+    "    if not int(debug): return",
+] + print_func_template
 
-lprint_func_template = \
-    [
-        "    <mod_qualifier>set_last_seconds_ix(<mod_qualifier>"
-        + "lprint_last_seconds_ix())",
-        "    <mod_qualifier>gp_log(<mod_qualifier>replace_passwords"
-        + "(<call_line>))",
-        "    <mod_qualifier>set_last_seconds_ix(<mod_qualifier>"
-        + "standard_print_last_seconds_ix())"
-    ]
+lprint_func_template = [
+    "    <mod_qualifier>set_last_seconds_ix(<mod_qualifier>"
+    + "lprint_last_seconds_ix())",
+    "    <mod_qualifier>gp_log(<mod_qualifier>replace_passwords"
+    + "(<call_line>))",
+    "    <mod_qualifier>set_last_seconds_ix(<mod_qualifier>"
+    + "standard_print_last_seconds_ix())",
+]
 
-replace_dict = {'output_stream': 'stdout', 'mod_qualifier': ''}
+replace_dict = {"output_stream": "stdout", "mod_qualifier": ""}
 
 gp_debug_print("robot_env: " + str(robot_env) + "\n")
 
 # func_names contains a list of all print functions which should be created from their sprint counterparts.
-func_names = ['print_time', 'print_timen', 'print_error', 'print_varx',
-              'print_var', 'print_vars', 'print_dashes', 'indent',
-              'print_call_stack', 'print_func_name', 'print_executing',
-              'print_pgm_header', 'print_issuing', 'print_pgm_footer',
-              'print_file', 'print_error_report', 'print', 'printn']
+func_names = [
+    "print_time",
+    "print_timen",
+    "print_error",
+    "print_varx",
+    "print_var",
+    "print_vars",
+    "print_dashes",
+    "indent",
+    "print_call_stack",
+    "print_func_name",
+    "print_executing",
+    "print_pgm_header",
+    "print_issuing",
+    "print_pgm_footer",
+    "print_file",
+    "print_error_report",
+    "print",
+    "printn",
+]
 
 # stderr_func_names is a list of functions whose output should go to stderr rather than stdout.
-stderr_func_names = ['print_error', 'print_error_report']
+stderr_func_names = ["print_error", "print_error_report"]
 
-func_defs = create_print_wrapper_funcs(func_names, stderr_func_names,
-                                       replace_dict)
+func_defs = create_print_wrapper_funcs(
+    func_names, stderr_func_names, replace_dict
+)
 gp_debug_print(func_defs)
 exec(func_defs)
diff --git a/lib/gen_robot_keyword.py b/lib/gen_robot_keyword.py
index f4b2e73..304a836 100755
--- a/lib/gen_robot_keyword.py
+++ b/lib/gen_robot_keyword.py
@@ -8,10 +8,7 @@
 from robot.libraries.BuiltIn import BuiltIn
 
 
-def run_key(keyword_buf,
-            quiet=None,
-            test_mode=None,
-            ignore=0):
+def run_key(keyword_buf, quiet=None, test_mode=None, ignore=0):
     r"""
     Run the given keyword, return the status and the keyword return values.
 
@@ -47,28 +44,29 @@
     ignore = int(ignore)
 
     # Convert the keyword_buf into a list split wherever 2 or more spaces are found.
-    keyword_list = keyword_buf.split('  ')
+    keyword_list = keyword_buf.split("  ")
     # Strip spaces from each argument to make the output look clean and uniform.
-    keyword_list = [item.strip(' ') for item in keyword_list]
+    keyword_list = [item.strip(" ") for item in keyword_list]
 
     if not quiet:
         # Join the list back into keyword_buf for the sake of output.
-        keyword_buf = '  '.join(keyword_list)
+        keyword_buf = "  ".join(keyword_list)
         gp.pissuing(keyword_buf, test_mode)
 
     if test_mode:
-        return 'PASS', ""
+        return "PASS", ""
 
     try:
-        status, ret_values = \
-            BuiltIn().run_keyword_and_ignore_error(*keyword_list)
+        status, ret_values = BuiltIn().run_keyword_and_ignore_error(
+            *keyword_list
+        )
     except Exception as my_assertion_error:
         status = "FAIL"
         ret_values = my_assertion_error.args[0]
 
-    if status != 'PASS':
+    if status != "PASS":
         # Output the error message to stderr.
-        BuiltIn().log_to_console(ret_values, stream='STDERR')
+        BuiltIn().log_to_console(ret_values, stream="STDERR")
         if not ignore:
             # Fail with the given error message.
             BuiltIn().fail(ret_values)
@@ -76,9 +74,7 @@
     return status, ret_values
 
 
-def run_key_u(keyword_buf,
-              quiet=None,
-              ignore=0):
+def run_key_u(keyword_buf, quiet=None, ignore=0):
     r"""
     Run keyword unconditionally (i.e. without regard to global test_mode setting).
 
diff --git a/lib/gen_robot_plug_in.py b/lib/gen_robot_plug_in.py
index 0f6deda..77a1f35 100755
--- a/lib/gen_robot_plug_in.py
+++ b/lib/gen_robot_plug_in.py
@@ -4,19 +4,18 @@
 This module provides functions which are useful for running plug-ins from a robot program.
 """
 
-import sys
-import subprocess
-from robot.libraries.BuiltIn import BuiltIn
 import os
+import subprocess
+import sys
 import tempfile
 
-import gen_print as gp
-import gen_misc as gm
 import gen_cmd as gc
+import gen_misc as gm
+import gen_print as gp
+from robot.libraries.BuiltIn import BuiltIn
 
 
-def rvalidate_plug_ins(plug_in_dir_paths,
-                       quiet=1):
+def rvalidate_plug_ins(plug_in_dir_paths, quiet=1):
     r"""
     Call the external validate_plug_ins.py program which validates the plug-in dir paths given to it.  Return
     a list containing a normalized path for each plug-in selected.
@@ -27,11 +26,15 @@
                                     stdout.
     """
 
-    cmd_buf = "validate_plug_ins.py \"" + plug_in_dir_paths + "\""
+    cmd_buf = 'validate_plug_ins.py "' + plug_in_dir_paths + '"'
     rc, out_buf = gc.shell_cmd(cmd_buf, print_output=0)
     if rc != 0:
-        BuiltIn().fail(gp.sprint_error("Validate plug ins call failed.  See"
-                                       + " stderr text for details.\n"))
+        BuiltIn().fail(
+            gp.sprint_error(
+                "Validate plug ins call failed.  See"
+                + " stderr text for details.\n"
+            )
+        )
 
     # plug_in_packages_list = out_buf.split("\n")
     plug_in_packages_list = list(filter(None, out_buf.split("\n")))
@@ -41,15 +44,17 @@
     return plug_in_packages_list
 
 
-def rprocess_plug_in_packages(plug_in_packages_list=None,
-                              call_point="setup",
-                              shell_rc="0x00000000",
-                              stop_on_plug_in_failure=1,
-                              stop_on_non_zero_rc=0,
-                              release_type="obmc",
-                              quiet=None,
-                              debug=None,
-                              return_history=False):
+def rprocess_plug_in_packages(
+    plug_in_packages_list=None,
+    call_point="setup",
+    shell_rc="0x00000000",
+    stop_on_plug_in_failure=1,
+    stop_on_non_zero_rc=0,
+    release_type="obmc",
+    quiet=None,
+    debug=None,
+    return_history=False,
+):
     r"""
     Call the external process_plug_in_packages.py to process the plug-in packages.  Return the following:
     rc                              The return code - 0 = PASS, 1 = FAIL.
@@ -110,7 +115,7 @@
     debug = int(gp.get_var_value(debug, 0))
 
     # Create string from list.
-    plug_in_dir_paths = ':'.join(plug_in_packages_list)
+    plug_in_dir_paths = ":".join(plug_in_packages_list)
 
     temp = tempfile.NamedTemporaryFile()
     temp_file_path = temp.name
@@ -125,23 +130,37 @@
 
     loc_shell_rc = 0
 
-    sub_cmd_buf = "process_plug_in_packages.py" + debug_string +\
-                  " --call_point=" + call_point + " --allow_shell_rc=" +\
-                  str(shell_rc) + " --stop_on_plug_in_failure=" +\
-                  str(stop_on_plug_in_failure) + " --stop_on_non_zero_rc=" +\
-                  str(stop_on_non_zero_rc) + " " + plug_in_dir_paths
+    sub_cmd_buf = (
+        "process_plug_in_packages.py"
+        + debug_string
+        + " --call_point="
+        + call_point
+        + " --allow_shell_rc="
+        + str(shell_rc)
+        + " --stop_on_plug_in_failure="
+        + str(stop_on_plug_in_failure)
+        + " --stop_on_non_zero_rc="
+        + str(stop_on_non_zero_rc)
+        + " "
+        + plug_in_dir_paths
+    )
     if quiet:
         cmd_buf = sub_cmd_buf + " > " + temp_file_path + " 2>&1"
     else:
-        cmd_buf = "set -o pipefail ; " + sub_cmd_buf + " 2>&1 | tee " +\
-                  temp_file_path
+        cmd_buf = (
+            "set -o pipefail ; "
+            + sub_cmd_buf
+            + " 2>&1 | tee "
+            + temp_file_path
+        )
         if debug:
             gp.print_issuing(cmd_buf)
         else:
-            gp.print_timen("Processing " + call_point
-                           + " call point programs.")
+            gp.print_timen(
+                "Processing " + call_point + " call point programs."
+            )
 
-    sub_proc = subprocess.Popen(cmd_buf, shell=True, executable='/bin/bash')
+    sub_proc = subprocess.Popen(cmd_buf, shell=True, executable="/bin/bash")
     sub_proc.communicate()
     proc_plug_pkg_rc = sub_proc.returncode
 
@@ -149,8 +168,13 @@
         # Get the "Running" statements from the output.
         regex = " Running [^/]+/cp_"
         cmd_buf = "egrep '" + regex + "' " + temp_file_path
-        _, history = gc.shell_cmd(cmd_buf, quiet=(not debug), print_output=0,
-                                  show_err=0, ignore_err=1)
+        _, history = gc.shell_cmd(
+            cmd_buf,
+            quiet=(not debug),
+            print_output=0,
+            show_err=0,
+            ignore_err=1,
+        )
         history = [x + "\n" for x in filter(None, history.split("\n"))]
     else:
         history = []
@@ -167,8 +191,14 @@
     # - Zero or more spaces
     bash_var_regex = "[_[:alpha:]][_[:alnum:]]*"
     regex = "^" + bash_var_regex + ":[ ]*"
-    cmd_buf = "egrep '" + regex + "' " + temp_file_path + " > " +\
-              temp_properties_file_path
+    cmd_buf = (
+        "egrep '"
+        + regex
+        + "' "
+        + temp_file_path
+        + " > "
+        + temp_properties_file_path
+    )
     gp.dprint_issuing(cmd_buf)
     grep_rc = os.system(cmd_buf)
 
@@ -176,8 +206,8 @@
     properties = gm.my_parm_file(temp_properties_file_path)
 
     # Finally, we access the 2 values that we need.
-    shell_rc = int(properties.get('shell_rc', '0x0000000000000000'), 16)
-    failed_plug_in_name = properties.get('failed_plug_in_name', '')
+    shell_rc = int(properties.get("shell_rc", "0x0000000000000000"), 16)
+    failed_plug_in_name = properties.get("failed_plug_in_name", "")
 
     if proc_plug_pkg_rc != 0:
         if quiet:
@@ -186,9 +216,13 @@
             gp.print_var(grep_rc, gp.hexa())
         gp.print_var(proc_plug_pkg_rc, gp.hexa())
         gp.print_timen("Re-cap of plug-in failures:")
-        gc.cmd_fnc_u("egrep -A 1 '^failed_plug_in_name:[ ]+' "
-                     + temp_properties_file_path + " | egrep -v '^\\--'",
-                     quiet=1, show_err=0)
+        gc.cmd_fnc_u(
+            "egrep -A 1 '^failed_plug_in_name:[ ]+' "
+            + temp_properties_file_path
+            + " | egrep -v '^\\--'",
+            quiet=1,
+            show_err=0,
+        )
         rc = 1
 
     if return_history:
diff --git a/lib/gen_robot_print.py b/lib/gen_robot_print.py
index fb958e0..b0e6a94 100755
--- a/lib/gen_robot_print.py
+++ b/lib/gen_robot_print.py
@@ -4,15 +4,14 @@
 This file contains functions useful for printing to stdout from robot programs.
 """
 
-import re
 import os
+import re
 
-import gen_print as gp
 import func_args as fa
-
+import gen_print as gp
 from robot.libraries.BuiltIn import BuiltIn
 
-gen_robot_print_debug = int(os.environ.get('GEN_ROBOT_PRINT_DEBUG', '0'))
+gen_robot_print_debug = int(os.environ.get("GEN_ROBOT_PRINT_DEBUG", "0"))
 
 
 def sprint_vars(*args, **kwargs):
@@ -28,15 +27,14 @@
     kwargs                          See sprint_varx in gen_print.py for descriptions of all other arguments.
     """
 
-    if 'fmt' in kwargs:
+    if "fmt" in kwargs:
         # Find format option names in kwargs['fmt'] and wrap them with "gp." and "()" to make them into
         # function calls.  For example, verbose would be converted to "gp.verbose()".  This allows the user
         # to simply specify "fmt=verbose" (vs. fmt=gp.verbose()).
         # Note "terse" has been explicitly added for backward compatibility.  Once the repo has been purged
         # of its use, this code can return to its original form.
         regex = "(" + "|".join(gp.valid_fmts()) + "|terse)"
-        kwargs['fmt'] = \
-            re.sub(regex, "gp.\\1()", kwargs['fmt'])
+        kwargs["fmt"] = re.sub(regex, "gp.\\1()", kwargs["fmt"])
     kwargs = fa.args_to_objects(kwargs)
     buffer = ""
     for var_name in args:
@@ -61,15 +59,32 @@
         buffer += gp.sprint_dashes()
         buffer += "Automatic Variables:"
 
-    buffer += \
-        sprint_vars(
-            "TEST_NAME", "TEST_TAGS", "TEST_DOCUMENTATION", "TEST_STATUS",
-            "TEST_DOCUMENTATION", "TEST_STATUS", "TEST_MESSAGE",
-            "PREV_TEST_NAME", "PREV_TEST_STATUS", "PREV_TEST_MESSAGE",
-            "SUITE_NAME", "SUITE_SOURCE", "SUITE_DOCUMENTATION",
-            "SUITE_METADATA", "SUITE_STATUS", "SUITE_MESSAGE",
-            "KEYWORD_STATUS", "KEYWORD_MESSAGE", "LOG_LEVEL", "OUTPUT_FILE",
-            "LOG_FILE", "REPORT_FILE", "DEBUG_FILE", "OUTPUT_DIR")
+    buffer += sprint_vars(
+        "TEST_NAME",
+        "TEST_TAGS",
+        "TEST_DOCUMENTATION",
+        "TEST_STATUS",
+        "TEST_DOCUMENTATION",
+        "TEST_STATUS",
+        "TEST_MESSAGE",
+        "PREV_TEST_NAME",
+        "PREV_TEST_STATUS",
+        "PREV_TEST_MESSAGE",
+        "SUITE_NAME",
+        "SUITE_SOURCE",
+        "SUITE_DOCUMENTATION",
+        "SUITE_METADATA",
+        "SUITE_STATUS",
+        "SUITE_MESSAGE",
+        "KEYWORD_STATUS",
+        "KEYWORD_MESSAGE",
+        "LOG_LEVEL",
+        "OUTPUT_FILE",
+        "LOG_FILE",
+        "REPORT_FILE",
+        "DEBUG_FILE",
+        "OUTPUT_DIR",
+    )
 
     if int(headers) == 1:
         buffer += gp.sprint_dashes()
@@ -120,20 +135,19 @@
 # full names.
 # Rprint Vars (instead of Rpvars)
 
-replace_dict = {'output_stream': 'stdout', 'mod_qualifier': 'gp.'}
+replace_dict = {"output_stream": "stdout", "mod_qualifier": "gp."}
 
 gp_debug_print("gp.robot_env: " + str(gp.robot_env) + "\n")
 
 # func_names contains a list of all rprint functions which should be created from their sprint counterparts.
-func_names = [
-    'print_vars', 'print_auto_vars'
-]
+func_names = ["print_vars", "print_auto_vars"]
 
 # stderr_func_names is a list of functions whose output should go to stderr rather than stdout.
 stderr_func_names = []
 
-func_defs = gp.create_print_wrapper_funcs(func_names, stderr_func_names,
-                                          replace_dict, "r")
+func_defs = gp.create_print_wrapper_funcs(
+    func_names, stderr_func_names, replace_dict, "r"
+)
 gp_debug_print(func_defs)
 exec(func_defs)
 
diff --git a/lib/gen_robot_ssh.py b/lib/gen_robot_ssh.py
index b0cd049..e3b4436 100755
--- a/lib/gen_robot_ssh.py
+++ b/lib/gen_robot_ssh.py
@@ -4,20 +4,20 @@
 This module provides many valuable ssh functions such as sprint_connection, execute_ssh_command, etc.
 """
 
-import sys
-import traceback
 import re
 import socket
+import sys
+import traceback
+
 import paramiko
+
 try:
     import exceptions
 except ImportError:
     import builtins as exceptions
 
-import gen_print as gp
 import func_timer as ft
-
-
+import gen_print as gp
 from robot.libraries.BuiltIn import BuiltIn
 from SSHLibrary import SSHLibrary
 
@@ -26,8 +26,7 @@
 sshlib = SSHLibrary()
 
 
-def sprint_connection(connection,
-                      indent=0):
+def sprint_connection(connection, indent=0):
     r"""
     sprint data from the connection object to a string and return it.
 
@@ -49,15 +48,15 @@
     buffer += gp.sprint_varx("term_type", connection.term_type, 0, indent)
     buffer += gp.sprint_varx("width", connection.width, 0, indent)
     buffer += gp.sprint_varx("height", connection.height, 0, indent)
-    buffer += gp.sprint_varx("path_separator", connection.path_separator, 0,
-                             indent)
+    buffer += gp.sprint_varx(
+        "path_separator", connection.path_separator, 0, indent
+    )
     buffer += gp.sprint_varx("encoding", connection.encoding, 0, indent)
 
     return buffer
 
 
-def sprint_connections(connections=None,
-                       indent=0):
+def sprint_connections(connections=None, indent=0):
     r"""
     sprint data from the connections list to a string and return it.
 
@@ -93,16 +92,16 @@
 
     for connection in sshlib.get_connections():
         # Create connection_dict from connection object.
-        connection_dict = dict((key, str(value)) for key, value in
-                               connection._config.items())
+        connection_dict = dict(
+            (key, str(value)) for key, value in connection._config.items()
+        )
         if dict(connection_dict, **open_connection_args) == connection_dict:
             return connection
 
     return False
 
 
-def login_ssh(login_args={},
-              max_login_attempts=5):
+def login_ssh(login_args={}, max_login_attempts=5):
     r"""
     Login on the latest open SSH connection.  Retry on failure up to max_login_attempts.
 
@@ -134,8 +133,10 @@
             except_type, except_value, except_traceback = sys.exc_info()
             gp.lprint_var(except_type)
             gp.lprint_varx("except_value", str(except_value))
-            if except_type is paramiko.ssh_exception.SSHException and\
-                    re.match(r"No existing session", str(except_value)):
+            if (
+                except_type is paramiko.ssh_exception.SSHException
+                and re.match(r"No existing session", str(except_value))
+            ):
                 continue
             else:
                 # We don't tolerate any other error so break from loop and re-raise exception.
@@ -148,16 +149,18 @@
     raise (except_value)
 
 
-def execute_ssh_command(cmd_buf,
-                        open_connection_args={},
-                        login_args={},
-                        print_out=0,
-                        print_err=0,
-                        ignore_err=1,
-                        fork=0,
-                        quiet=None,
-                        test_mode=None,
-                        time_out=None):
+def execute_ssh_command(
+    cmd_buf,
+    open_connection_args={},
+    login_args={},
+    print_out=0,
+    print_err=0,
+    ignore_err=1,
+    fork=0,
+    quiet=None,
+    test_mode=None,
+    time_out=None,
+):
     r"""
     Run the given command in an SSH session and return the stdout, stderr and the return code.
 
@@ -223,11 +226,12 @@
             index_or_alias = connection.index
         else:
             index_or_alias = connection.alias
-        gp.lprint_timen("Switching to existing connection: \""
-                        + str(index_or_alias) + "\".")
+        gp.lprint_timen(
+            'Switching to existing connection: "' + str(index_or_alias) + '".'
+        )
         sshlib.switch_connection(index_or_alias)
     else:
-        gp.lprint_timen("Connecting to " + open_connection_args['host'] + ".")
+        gp.lprint_timen("Connecting to " + open_connection_args["host"] + ".")
         cix = sshlib.open_connection(**open_connection_args)
         try:
             login_ssh(login_args)
@@ -244,18 +248,19 @@
             if fork:
                 sshlib.start_command(cmd_buf)
             else:
-                if open_connection_args['alias'] == "device_connection":
+                if open_connection_args["alias"] == "device_connection":
                     stdout = sshlib.write(cmd_buf)
                     stderr = ""
                     rc = 0
                 else:
-                    stdout, stderr, rc = \
-                        func_timer.run(sshlib.execute_command,
-                                       cmd_buf,
-                                       return_stdout=True,
-                                       return_stderr=True,
-                                       return_rc=True,
-                                       time_out=time_out)
+                    stdout, stderr, rc = func_timer.run(
+                        sshlib.execute_command,
+                        cmd_buf,
+                        return_stdout=True,
+                        return_stderr=True,
+                        return_rc=True,
+                        time_out=time_out,
+                    )
                     BuiltIn().log_to_console(stdout)
         except Exception:
             except_type, except_value, except_traceback = sys.exc_info()
@@ -267,30 +272,47 @@
             stderr = str(except_value)
             stdout = ""
 
-            if except_type is exceptions.AssertionError and\
-               re.match(r"Connection not open", str(except_value)):
+            if except_type is exceptions.AssertionError and re.match(
+                r"Connection not open", str(except_value)
+            ):
                 try:
                     login_ssh(login_args)
                     # Now we must continue to next loop iteration to retry the
                     # execute_command.
                     continue
                 except Exception:
-                    except_type, except_value, except_traceback =\
-                        sys.exc_info()
+                    (
+                        except_type,
+                        except_value,
+                        except_traceback,
+                    ) = sys.exc_info()
                     rc = 1
                     stderr = str(except_value)
                     stdout = ""
                     break
 
-            if (except_type is paramiko.ssh_exception.SSHException
-                and re.match(r"SSH session not active", str(except_value))) or\
-               ((except_type is socket.error
-                 or except_type is ConnectionResetError)
-                and re.match(r"\[Errno 104\] Connection reset by peer",
-                             str(except_value))) or\
-               (except_type is paramiko.ssh_exception.SSHException
-                and re.match(r"Timeout opening channel\.",
-                             str(except_value))):
+            if (
+                (
+                    except_type is paramiko.ssh_exception.SSHException
+                    and re.match(r"SSH session not active", str(except_value))
+                )
+                or (
+                    (
+                        except_type is socket.error
+                        or except_type is ConnectionResetError
+                    )
+                    and re.match(
+                        r"\[Errno 104\] Connection reset by peer",
+                        str(except_value),
+                    )
+                )
+                or (
+                    except_type is paramiko.ssh_exception.SSHException
+                    and re.match(
+                        r"Timeout opening channel\.", str(except_value)
+                    )
+                )
+            ):
                 # Close and re-open a connection.
                 # Note: close_connection() doesn't appear to get rid of the
                 # connection.  It merely closes it.  Since there is a concern
@@ -299,8 +321,9 @@
                 # connections.
                 gp.lprint_timen("Closing all connections.")
                 sshlib.close_all_connections()
-                gp.lprint_timen("Connecting to "
-                                + open_connection_args['host'] + ".")
+                gp.lprint_timen(
+                    "Connecting to " + open_connection_args["host"] + "."
+                )
                 cix = sshlib.open_connection(**open_connection_args)
                 login_ssh(login_args)
                 continue
@@ -326,13 +349,16 @@
         gp.printn(stderr + stdout)
 
     if not ignore_err:
-        message = gp.sprint_error("The prior SSH"
-                                  + " command returned a non-zero return"
-                                  + " code:\n"
-                                  + gp.sprint_var(rc, gp.hexa()) + stderr
-                                  + "\n")
+        message = gp.sprint_error(
+            "The prior SSH"
+            + " command returned a non-zero return"
+            + " code:\n"
+            + gp.sprint_var(rc, gp.hexa())
+            + stderr
+            + "\n"
+        )
         BuiltIn().should_be_equal(rc, 0, message)
 
-    if open_connection_args['alias'] == "device_connection":
+    if open_connection_args["alias"] == "device_connection":
         return stdout
     return stdout, stderr, rc
diff --git a/lib/gen_robot_utils.py b/lib/gen_robot_utils.py
index bd61a87..07ff1b4 100644
--- a/lib/gen_robot_utils.py
+++ b/lib/gen_robot_utils.py
@@ -6,6 +6,7 @@
 """
 
 import re
+
 from robot.libraries.BuiltIn import BuiltIn
 
 
@@ -70,5 +71,6 @@
         if key in pre_var_dict:
             if value != pre_var_dict[key]:
                 global_var_name = re.sub("[@&]", "$", key)
-                BuiltIn().set_global_variable(global_var_name,
-                                              pre_var_dict[key])
+                BuiltIn().set_global_variable(
+                    global_var_name, pre_var_dict[key]
+                )
diff --git a/lib/gen_robot_valid.py b/lib/gen_robot_valid.py
index 5580a5e..d1e8d23 100755
--- a/lib/gen_robot_valid.py
+++ b/lib/gen_robot_valid.py
@@ -5,10 +5,10 @@
 """
 
 import re
+
+import func_args as fa
 import gen_print as gp
 import gen_valid as gv
-import func_args as fa
-
 from robot.libraries.BuiltIn import BuiltIn
 
 
@@ -27,8 +27,9 @@
     var_value = BuiltIn().get_variable_value("${" + var_name + "}")
     if var_value is None:
         var_value = "<undefined>"
-        error_message = gv.valid_value(var_value, invalid_values=[var_value],
-                                       var_name=var_name)
+        error_message = gv.valid_value(
+            var_value, invalid_values=[var_value], var_name=var_name
+        )
         BuiltIn().fail(error_message)
 
     return var_value
@@ -73,8 +74,7 @@
 
 
 # The docstring header will be pre-pended to each validation function's existing docstring.
-docstring_header = \
-    r"""
+docstring_header = r"""
     Fail if the variable named by var_name is invalid.
     """
 
@@ -105,12 +105,19 @@
 
     start_ix = 0
     # Find the "var_value" line.
-    start_ix = next((index for index, value in
-                     enumerate(doc_string[start_ix:], start_ix)
-                     if re.match("[ ]+var_value  ", value)), None)
+    start_ix = next(
+        (
+            index
+            for index, value in enumerate(doc_string[start_ix:], start_ix)
+            if re.match("[ ]+var_value  ", value)
+        ),
+        None,
+    )
     # Replace the "var_value" line with our "var_name" line.
-    doc_string[start_ix] = "    var_name                        " \
+    doc_string[start_ix] = (
+        "    var_name                        "
         + "The name of the variable to be validated."
+    )
 
     return "\n".join(doc_string)
 
@@ -120,121 +127,134 @@
 # the gv.<function name> which they call.  Also, note that the docstring for each is created by modifying the
 # docstring from the supporting gen_valid.py function.
 
-def valid_type(var_name, *args, **kwargs):
 
+def valid_type(var_name, *args, **kwargs):
     var_value, args, kwargs = valid_init(var_name, *args, **kwargs)
-    error_message = \
-        gv.valid_type(var_value, *args, var_name=var_name, **kwargs)
+    error_message = gv.valid_type(
+        var_value, *args, var_name=var_name, **kwargs
+    )
     process_error_message(error_message)
 
 
 def valid_value(var_name, *args, **kwargs):
-
     var_value, args, kwargs = valid_init(var_name, *args, **kwargs)
-    error_message = \
-        gv.valid_value(var_value, *args, var_name=var_name, **kwargs)
+    error_message = gv.valid_value(
+        var_value, *args, var_name=var_name, **kwargs
+    )
     process_error_message(error_message)
 
 
 def valid_range(var_name, *args, **kwargs):
-
     var_value, args, kwargs = valid_init(var_name, *args, **kwargs)
-    error_message = \
-        gv.valid_range(var_value, *args, var_name=var_name, **kwargs)
+    error_message = gv.valid_range(
+        var_value, *args, var_name=var_name, **kwargs
+    )
     process_error_message(error_message)
 
 
 def valid_integer(var_name, *args, **kwargs):
-
     var_value, args, kwargs = valid_init(var_name, *args, **kwargs)
-    error_message = \
-        gv.valid_integer(var_value, *args, var_name=var_name, **kwargs)
+    error_message = gv.valid_integer(
+        var_value, *args, var_name=var_name, **kwargs
+    )
     process_error_message(error_message)
 
 
 def valid_float(var_name, *args, **kwargs):
-
     var_value, args, kwargs = valid_init(var_name, *args, **kwargs)
-    error_message = \
-        gv.valid_float(var_value, *args, var_name=var_name, **kwargs)
+    error_message = gv.valid_float(
+        var_value, *args, var_name=var_name, **kwargs
+    )
     process_error_message(error_message)
 
 
 def valid_date_time(var_name, *args, **kwargs):
-
     var_value, args, kwargs = valid_init(var_name, *args, **kwargs)
-    error_message = \
-        gv.valid_date_time(var_value, *args, var_name=var_name, **kwargs)
+    error_message = gv.valid_date_time(
+        var_value, *args, var_name=var_name, **kwargs
+    )
     process_error_message(error_message)
 
 
 def valid_dir_path(var_name, *args, **kwargs):
-
     var_value, args, kwargs = valid_init(var_name, *args, **kwargs)
-    error_message = \
-        gv.valid_dir_path(var_value, *args, var_name=var_name, **kwargs)
+    error_message = gv.valid_dir_path(
+        var_value, *args, var_name=var_name, **kwargs
+    )
     process_error_message(error_message)
 
 
 def valid_file_path(var_name, *args, **kwargs):
-
     var_value, args, kwargs = valid_init(var_name, *args, **kwargs)
-    error_message = \
-        gv.valid_file_path(var_value, *args, var_name=var_name, **kwargs)
+    error_message = gv.valid_file_path(
+        var_value, *args, var_name=var_name, **kwargs
+    )
     process_error_message(error_message)
 
 
 def valid_path(var_name, *args, **kwargs):
-
     var_value, args, kwargs = valid_init(var_name, *args, **kwargs)
-    error_message = \
-        gv.valid_path(var_value, *args, var_name=var_name, **kwargs)
+    error_message = gv.valid_path(
+        var_value, *args, var_name=var_name, **kwargs
+    )
     process_error_message(error_message)
 
 
 def valid_list(var_name, *args, **kwargs):
-
     var_value, args, kwargs = valid_init(var_name, *args, **kwargs)
-    error_message = \
-        gv.valid_list(var_value, *args, var_name=var_name, **kwargs)
+    error_message = gv.valid_list(
+        var_value, *args, var_name=var_name, **kwargs
+    )
     process_error_message(error_message)
 
 
 def valid_dict(var_name, *args, **kwargs):
-
     var_value, args, kwargs = valid_init(var_name, *args, **kwargs)
-    error_message = \
-        gv.valid_dict(var_value, *args, var_name=var_name, **kwargs)
+    error_message = gv.valid_dict(
+        var_value, *args, var_name=var_name, **kwargs
+    )
     process_error_message(error_message)
 
 
 def valid_program(var_name, *args, **kwargs):
-
     var_value, args, kwargs = valid_init(var_name, *args, **kwargs)
-    error_message = \
-        gv.valid_program(var_value, *args, var_name=var_name, **kwargs)
+    error_message = gv.valid_program(
+        var_value, *args, var_name=var_name, **kwargs
+    )
     process_error_message(error_message)
 
 
 def valid_length(var_name, *args, **kwargs):
-
     var_value, args, kwargs = valid_init(var_name, *args, **kwargs)
-    error_message = \
-        gv.valid_length(var_value, *args, var_name=var_name, **kwargs)
+    error_message = gv.valid_length(
+        var_value, *args, var_name=var_name, **kwargs
+    )
     process_error_message(error_message)
 
 
 # Modify the validation function docstrings by calling customize_doc_string for each function in the
 # func_names list.
 func_names = [
-    "valid_type", "valid_value", "valid_range", "valid_integer",
-    "valid_dir_path", "valid_file_path", "valid_path", "valid_list",
-    "valid_dict", "valid_program", "valid_length", "valid_float",
-    "valid_date_time"
+    "valid_type",
+    "valid_value",
+    "valid_range",
+    "valid_integer",
+    "valid_dir_path",
+    "valid_file_path",
+    "valid_path",
+    "valid_list",
+    "valid_dict",
+    "valid_program",
+    "valid_length",
+    "valid_float",
+    "valid_date_time",
 ]
 
 for func_name in func_names:
-    cmd_buf = func_name \
-        + ".__doc__ = customize_doc_string(gv.raw_doc_strings['" \
-        + func_name + "'])"
+    cmd_buf = (
+        func_name
+        + ".__doc__ = customize_doc_string(gv.raw_doc_strings['"
+        + func_name
+        + "'])"
+    )
     exec(cmd_buf)
diff --git a/lib/gen_valid.py b/lib/gen_valid.py
index 57c1a1d..a422e0f 100755
--- a/lib/gen_valid.py
+++ b/lib/gen_valid.py
@@ -4,11 +4,12 @@
 This module provides validation functions like valid_value(), valid_integer(), etc.
 """
 
-import os
-import gen_print as gp
-import gen_cmd as gc
-import func_args as fa
 import datetime
+import os
+
+import func_args as fa
+import gen_cmd as gc
+import gen_print as gp
 
 exit_on_error = False
 
@@ -134,8 +135,7 @@
 
 
 # The docstring header and footer will be added to each validation function's existing docstring.
-docstring_header = \
-    r"""
+docstring_header = r"""
     Determine whether var_value is valid, construct an error_message and call
     process_error_message(error_message).
 
@@ -143,8 +143,7 @@
     are processed.
     """
 
-additional_args_docstring_footer = \
-    r"""
+additional_args_docstring_footer = r"""
     var_name                        The name of the variable whose value is passed in var_value.  For the
                                     general case, this argument is unnecessary as this function can figure
                                     out the var_name.  This is provided for Robot callers in which case, this
@@ -178,8 +177,9 @@
     # If we get to this point, the validation has failed.
     var_name = get_var_name(var_name)
     error_message += "Invalid variable type:\n"
-    error_message += gp.sprint_varx(var_name, var_value,
-                                    gp.blank() | gp.show_type())
+    error_message += gp.sprint_varx(
+        var_name, var_value, gp.blank() | gp.show_type()
+    )
     error_message += "\n"
     error_message += gp.sprint_var(required_type)
 
@@ -187,7 +187,6 @@
 
 
 def valid_value(var_value, valid_values=[], invalid_values=[], var_name=None):
-
     r"""
     The variable value is valid if it is either contained in the valid_values list or if it is NOT contained
     in the invalid_values list.  If the caller specifies nothing for either of these 2 arguments,
@@ -230,11 +229,11 @@
         error_message += gp.sprint_var(valid_values)
         return process_error_message(error_message)
 
-    error_message = valid_type(valid_values, list, var_name='valid_values')
+    error_message = valid_type(valid_values, list, var_name="valid_values")
     if error_message:
         return process_error_message(error_message)
 
-    error_message = valid_type(invalid_values, list, var_name='invalid_values')
+    error_message = valid_type(invalid_values, list, var_name="invalid_values")
     if error_message:
         return process_error_message(error_message)
 
@@ -244,14 +243,15 @@
             return process_error_message(error_message)
         var_name = get_var_name(var_name)
         error_message += "Invalid variable value:\n"
-        error_message += gp.sprint_varx(var_name, var_value,
-                                        gp.blank() | gp.verbose()
-                                        | gp.show_type())
+        error_message += gp.sprint_varx(
+            var_name, var_value, gp.blank() | gp.verbose() | gp.show_type()
+        )
         error_message += "\n"
         error_message += "It must be one of the following values:\n"
         error_message += "\n"
-        error_message += gp.sprint_var(valid_values,
-                                       gp.blank() | gp.show_type())
+        error_message += gp.sprint_var(
+            valid_values, gp.blank() | gp.show_type()
+        )
         return process_error_message(error_message)
 
     if len_invalid_values == 0:
@@ -264,14 +264,13 @@
 
     var_name = get_var_name(var_name)
     error_message += "Invalid variable value:\n"
-    error_message += gp.sprint_varx(var_name, var_value,
-                                    gp.blank() | gp.verbose()
-                                    | gp.show_type())
+    error_message += gp.sprint_varx(
+        var_name, var_value, gp.blank() | gp.verbose() | gp.show_type()
+    )
     error_message += "\n"
     error_message += "It must NOT be any of the following values:\n"
     error_message += "\n"
-    error_message += gp.sprint_var(invalid_values,
-                                   gp.blank() | gp.show_type())
+    error_message += gp.sprint_var(invalid_values, gp.blank() | gp.show_type())
     return process_error_message(error_message)
 
 
@@ -338,8 +337,9 @@
         var_value = int(str(var_value), 0)
     except ValueError:
         error_message += "Invalid integer value:\n"
-        error_message += gp.sprint_varx(var_name, var_value,
-                                        gp.blank() | gp.show_type())
+        error_message += gp.sprint_varx(
+            var_name, var_value, gp.blank() | gp.show_type()
+        )
         return process_error_message(error_message)
 
     # Check the range (if any).
@@ -373,8 +373,9 @@
         var_value = float(str(var_value))
     except ValueError:
         error_message += "Invalid float value:\n"
-        error_message += gp.sprint_varx(var_name, var_value,
-                                        gp.blank() | gp.show_type())
+        error_message += gp.sprint_varx(
+            var_name, var_value, gp.blank() | gp.show_type()
+        )
         return process_error_message(error_message)
 
     # Check the range (if any).
@@ -397,12 +398,15 @@
     """
 
     error_message = ""
-    rc, out_buf = gc.shell_cmd("date -d '" + str(var_value) + "'", quiet=1, show_err=0, ignore_err=1)
+    rc, out_buf = gc.shell_cmd(
+        "date -d '" + str(var_value) + "'", quiet=1, show_err=0, ignore_err=1
+    )
     if rc:
         var_name = get_var_name(var_name)
         error_message += "Invalid date/time value:\n"
-        error_message += gp.sprint_varx(var_name, var_value,
-                                        gp.blank() | gp.show_type())
+        error_message += gp.sprint_varx(
+            var_name, var_value, gp.blank() | gp.show_type()
+        )
         return process_error_message(error_message)
 
     return process_error_message(error_message)
@@ -459,8 +463,14 @@
     return process_error_message(error_message)
 
 
-def valid_list(var_value, valid_values=[], invalid_values=[],
-               required_values=[], fail_on_empty=False, var_name=None):
+def valid_list(
+    var_value,
+    valid_values=[],
+    invalid_values=[],
+    required_values=[],
+    fail_on_empty=False,
+    var_name=None,
+):
     r"""
     The variable value is valid if it is a list where each entry can be found in the valid_values list or if
     none of its values can be found in the invalid_values list or if all of the values in the required_values
@@ -483,7 +493,11 @@
     error_message = ""
 
     # Validate this function's arguments.
-    if not (bool(len(valid_values)) ^ bool(len(invalid_values)) ^ bool(len(required_values))):
+    if not (
+        bool(len(valid_values))
+        ^ bool(len(invalid_values))
+        ^ bool(len(required_values))
+    ):
         error_message += "Programmer error - You must provide only one of the"
         error_message += " following: valid_values, invalid_values,"
         error_message += " required_values.\n"
@@ -510,21 +524,25 @@
         for ix in range(0, len(required_values)):
             if required_values[ix] not in var_value:
                 found_error = 1
-                display_required_values[ix] = \
+                display_required_values[ix] = (
                     str(display_required_values[ix]) + "*"
+                )
         if found_error:
             var_name = get_var_name(var_name)
             error_message += "The following list is invalid:\n"
-            error_message += gp.sprint_varx(var_name, var_value,
-                                            gp.blank() | gp.show_type())
+            error_message += gp.sprint_varx(
+                var_name, var_value, gp.blank() | gp.show_type()
+            )
             error_message += "\n"
             error_message += "Because some of the values in the "
             error_message += "required_values list are not present (see"
-            error_message += " entries marked with \"*\"):\n"
+            error_message += ' entries marked with "*"):\n'
             error_message += "\n"
-            error_message += gp.sprint_varx('required_values',
-                                            display_required_values,
-                                            gp.blank() | gp.show_type())
+            error_message += gp.sprint_varx(
+                "required_values",
+                display_required_values,
+                gp.blank() | gp.show_type(),
+            )
             error_message += "\n"
 
         return process_error_message(error_message)
@@ -540,9 +558,10 @@
         if found_error:
             var_name = get_var_name(var_name)
             error_message += "The following list is invalid (see entries"
-            error_message += " marked with \"*\"):\n"
-            error_message += gp.sprint_varx(var_name, display_var_value,
-                                            gp.blank() | gp.show_type())
+            error_message += ' marked with "*"):\n'
+            error_message += gp.sprint_varx(
+                var_name, display_var_value, gp.blank() | gp.show_type()
+            )
             error_message += "\n"
             error_message += gp.sprint_var(invalid_values, gp.show_type())
         return process_error_message(error_message)
@@ -557,9 +576,10 @@
     if found_error:
         var_name = get_var_name(var_name)
         error_message += "The following list is invalid (see entries marked"
-        error_message += " with \"*\"):\n"
-        error_message += gp.sprint_varx(var_name, display_var_value,
-                                        gp.blank() | gp.show_type())
+        error_message += ' with "*"):\n'
+        error_message += gp.sprint_varx(
+            var_name, display_var_value, gp.blank() | gp.show_type()
+        )
         error_message += "\n"
         error_message += gp.sprint_var(valid_values, gp.show_type())
         return process_error_message(error_message)
@@ -567,7 +587,13 @@
     return process_error_message(error_message)
 
 
-def valid_dict(var_value, required_keys=[], valid_values={}, invalid_values={}, var_name=None):
+def valid_dict(
+    var_value,
+    required_keys=[],
+    valid_values={},
+    invalid_values={},
+    var_name=None,
+):
     r"""
     The dictionary variable value is valid if it contains all required keys and each entry passes the
     valid_value() call.
@@ -601,7 +627,9 @@
         var_name = get_var_name(var_name)
         error_message += "The following dictionary is invalid because it is"
         error_message += " missing required keys:\n"
-        error_message += gp.sprint_varx(var_name, var_value, gp.blank() | gp.show_type())
+        error_message += gp.sprint_varx(
+            var_name, var_value, gp.blank() | gp.show_type()
+        )
         error_message += "\n"
         error_message += gp.sprint_var(missing_keys, gp.show_type())
         return process_error_message(error_message)
@@ -609,15 +637,24 @@
     var_name = get_var_name(var_name)
     if len(valid_values):
         keys = valid_values.keys()
-        error_message = valid_dict(var_value, required_keys=keys, var_name=var_name)
+        error_message = valid_dict(
+            var_value, required_keys=keys, var_name=var_name
+        )
         if error_message:
             return process_error_message(error_message)
     for key, value in valid_values.items():
         key_name = "  [" + key + "]"
-        sub_error_message = valid_value(var_value[key], valid_values=value, var_name=key_name)
+        sub_error_message = valid_value(
+            var_value[key], valid_values=value, var_name=key_name
+        )
         if sub_error_message:
-            error_message += "The following dictionary is invalid because one of its entries is invalid:\n"
-            error_message += gp.sprint_varx(var_name, var_value, gp.blank() | gp.show_type())
+            error_message += (
+                "The following dictionary is invalid because one of its"
+                " entries is invalid:\n"
+            )
+            error_message += gp.sprint_varx(
+                var_name, var_value, gp.blank() | gp.show_type()
+            )
             error_message += "\n"
             error_message += sub_error_message
             return process_error_message(error_message)
@@ -626,10 +663,17 @@
         if key not in var_value:
             continue
         key_name = "  [" + key + "]"
-        sub_error_message = valid_value(var_value[key], invalid_values=value, var_name=key_name)
+        sub_error_message = valid_value(
+            var_value[key], invalid_values=value, var_name=key_name
+        )
         if sub_error_message:
-            error_message += "The following dictionary is invalid because one of its entries is invalid:\n"
-            error_message += gp.sprint_varx(var_name, var_value, gp.blank() | gp.show_type())
+            error_message += (
+                "The following dictionary is invalid because one of its"
+                " entries is invalid:\n"
+            )
+            error_message += gp.sprint_varx(
+                var_name, var_value, gp.blank() | gp.show_type()
+            )
             error_message += "\n"
             error_message += sub_error_message
             return process_error_message(error_message)
@@ -647,8 +691,9 @@
     """
 
     error_message = ""
-    rc, out_buf = gc.shell_cmd("which " + var_value, quiet=1, show_err=0,
-                               ignore_err=1)
+    rc, out_buf = gc.shell_cmd(
+        "which " + var_value, quiet=1, show_err=0, ignore_err=1
+    )
     if rc:
         var_name = get_var_name(var_name)
         error_message += "The following required program could not be found"
@@ -692,10 +737,19 @@
 # Modify selected function docstrings by adding headers/footers.
 
 func_names = [
-    "valid_type", "valid_value", "valid_range", "valid_integer",
-    "valid_dir_path", "valid_file_path", "valid_path", "valid_list",
-    "valid_dict", "valid_program", "valid_length", "valid_float",
-    "valid_date_time"
+    "valid_type",
+    "valid_value",
+    "valid_range",
+    "valid_integer",
+    "valid_dir_path",
+    "valid_file_path",
+    "valid_path",
+    "valid_list",
+    "valid_dict",
+    "valid_program",
+    "valid_length",
+    "valid_float",
+    "valid_date_time",
 ]
 
 raw_doc_strings = {}
@@ -705,5 +759,5 @@
     cmd_buf += ".__doc__"
     exec(cmd_buf)
     cmd_buf = func_name + ".__doc__ = docstring_header + " + func_name
-    cmd_buf += ".__doc__.rstrip(\" \\n\") + additional_args_docstring_footer"
+    cmd_buf += '.__doc__.rstrip(" \\n") + additional_args_docstring_footer'
     exec(cmd_buf)
diff --git a/lib/ipmi_client.py b/lib/ipmi_client.py
index 7eb8f08..7d4e582 100644
--- a/lib/ipmi_client.py
+++ b/lib/ipmi_client.py
@@ -5,32 +5,32 @@
 """
 
 import collections
-import gen_print as gp
+
 import gen_cmd as gc
+import gen_print as gp
 from robot.libraries.BuiltIn import BuiltIn
 
-
 # Set default values for required IPMI options.
-ipmi_interface = 'lanplus'
-ipmi_cipher_suite = BuiltIn().get_variable_value("${IPMI_CIPHER_LEVEL}", '17')
-ipmi_timeout = BuiltIn().get_variable_value("${IPMI_TIMEOUT}", '3')
-ipmi_port = BuiltIn().get_variable_value("${IPMI_PORT}", '623')
+ipmi_interface = "lanplus"
+ipmi_cipher_suite = BuiltIn().get_variable_value("${IPMI_CIPHER_LEVEL}", "17")
+ipmi_timeout = BuiltIn().get_variable_value("${IPMI_TIMEOUT}", "3")
+ipmi_port = BuiltIn().get_variable_value("${IPMI_PORT}", "623")
 ipmi_username = BuiltIn().get_variable_value("${IPMI_USERNAME}", "root")
 ipmi_password = BuiltIn().get_variable_value("${IPMI_PASSWORD}", "0penBmc")
 ipmi_host = BuiltIn().get_variable_value("${OPENBMC_HOST}")
 
 # Create a list of the required IPMI options.
-ipmi_required_options = ['I', 'C', 'N', 'p', 'U', 'P', 'H']
+ipmi_required_options = ["I", "C", "N", "p", "U", "P", "H"]
 # The following dictionary maps the ipmitool option names (e.g. "I") to our
 # more descriptive names (e.g. "interface") for the required options.
 ipmi_option_name_map = {
-    'I': 'interface',
-    'C': 'cipher_suite',
-    'N': 'timeout',
-    'p': 'port',
-    'U': 'username',
-    'P': 'password',
-    'H': 'host',
+    "I": "interface",
+    "C": "cipher_suite",
+    "N": "timeout",
+    "p": "port",
+    "U": "username",
+    "P": "password",
+    "H": "host",
 }
 
 
@@ -78,7 +78,7 @@
         else:
             # The caller hasn't specified this required option so specify it
             # for them using the global value.
-            var_name = 'ipmi_' + ipmi_option_name_map[option]
+            var_name = "ipmi_" + ipmi_option_name_map[option]
             value = eval(var_name)
             new_options[option] = value
     # Include the remainder of the caller's options in the new options
@@ -86,7 +86,7 @@
     for key, value in options.items():
         new_options[key] = value
 
-    return gc.create_command_string('ipmitool', command, new_options)
+    return gc.create_command_string("ipmitool", command, new_options)
 
 
 def verify_ipmi_user_parm_accepted():
@@ -99,11 +99,10 @@
     global ipmi_required_options
     print_output = 0
 
-    command_string = create_ipmi_ext_command_string('power status')
-    rc, stdout = gc.shell_cmd(command_string,
-                              print_output=print_output,
-                              show_err=0,
-                              ignore_err=1)
+    command_string = create_ipmi_ext_command_string("power status")
+    rc, stdout = gc.shell_cmd(
+        command_string, print_output=print_output, show_err=0, ignore_err=1
+    )
     gp.qprint_var(rc, 1)
     if rc == 0:
         # The OBMC accepts the ipmitool "-U" option so new further work needs
@@ -112,13 +111,12 @@
 
     # Remove the "U" option from ipmi_required_options to allow us to create a
     # command string without the "U" option.
-    if 'U' in ipmi_required_options:
-        del ipmi_required_options[ipmi_required_options.index('U')]
-    command_string = create_ipmi_ext_command_string('power status')
-    rc, stdout = gc.shell_cmd(command_string,
-                              print_output=print_output,
-                              show_err=0,
-                              ignore_err=1)
+    if "U" in ipmi_required_options:
+        del ipmi_required_options[ipmi_required_options.index("U")]
+    command_string = create_ipmi_ext_command_string("power status")
+    rc, stdout = gc.shell_cmd(
+        command_string, print_output=print_output, show_err=0, ignore_err=1
+    )
     gp.qprint_var(rc, 1)
     if rc == 0:
         # The "U" option has been removed from the ipmi_required_options
@@ -130,7 +128,7 @@
 
     # Revert to original ipmi_required_options by inserting 'U' right before
     # 'P'.
-    ipmi_required_options.insert(ipmi_required_options.index('P'), 'U')
+    ipmi_required_options.insert(ipmi_required_options.index("P"), "U")
 
 
 def ipmi_setup():
@@ -152,7 +150,9 @@
     command                         An IPMI command (e.g. "power status").
     """
 
-    ipmi_user_options = BuiltIn().get_variable_value("${IPMI_USER_OPTIONS}", '')
+    ipmi_user_options = BuiltIn().get_variable_value(
+        "${IPMI_USER_OPTIONS}", ""
+    )
     if ipmi_user_options == "":
         return command
     return ipmi_user_options + " " + command
diff --git a/lib/ipmi_utils.py b/lib/ipmi_utils.py
index b2a1b2b..5d1598c 100644
--- a/lib/ipmi_utils.py
+++ b/lib/ipmi_utils.py
@@ -4,17 +4,18 @@
 Provide useful ipmi functions.
 """
 
+import json
 import re
-import gen_print as gp
-import gen_misc as gm
+import tempfile
+
+import bmc_ssh_utils as bsu
 import gen_cmd as gc
+import gen_misc as gm
+import gen_print as gp
 import gen_robot_keyword as grk
 import gen_robot_utils as gru
-import bmc_ssh_utils as bsu
-import var_funcs as vf
 import ipmi_client as ic
-import tempfile
-import json
+import var_funcs as vf
 from robot.libraries.BuiltIn import BuiltIn
 
 gru.my_import_resource("ipmi_client.robot")
@@ -76,17 +77,19 @@
     # setting_value                 Value which needs to be set (e.g. "7").
     """
 
-    status, ret_values = grk.run_key_u("Run IPMI Standard Command  sol set "
-                                       + setting_name + " " + setting_value)
+    status, ret_values = grk.run_key_u(
+        "Run IPMI Standard Command  sol set "
+        + setting_name
+        + " "
+        + setting_value
+    )
 
     return status
 
 
-def execute_ipmi_cmd(cmd_string,
-                     ipmi_cmd_type='inband',
-                     print_output=1,
-                     ignore_err=0,
-                     **options):
+def execute_ipmi_cmd(
+    cmd_string, ipmi_cmd_type="inband", print_output=1, ignore_err=0, **options
+):
     r"""
     Run the given command string as an IPMI command and return the stdout,
     stderr and the return code.
@@ -107,23 +110,25 @@
                                     See that function's prolog for details.
     """
 
-    if ipmi_cmd_type == 'inband':
+    if ipmi_cmd_type == "inband":
         IPMI_INBAND_CMD = BuiltIn().get_variable_value("${IPMI_INBAND_CMD}")
         cmd_buf = IPMI_INBAND_CMD + " " + cmd_string
-        return bsu.os_execute_command(cmd_buf,
-                                      print_out=print_output,
-                                      ignore_err=ignore_err)
+        return bsu.os_execute_command(
+            cmd_buf, print_out=print_output, ignore_err=ignore_err
+        )
 
-    if ipmi_cmd_type == 'external':
+    if ipmi_cmd_type == "external":
         cmd_buf = ic.create_ipmi_ext_command_string(cmd_string, **options)
-        rc, stdout, stderr = gc.shell_cmd(cmd_buf,
-                                          print_output=print_output,
-                                          ignore_err=ignore_err,
-                                          return_stderr=1)
+        rc, stdout, stderr = gc.shell_cmd(
+            cmd_buf,
+            print_output=print_output,
+            ignore_err=ignore_err,
+            return_stderr=1,
+        )
         return stdout, stderr, rc
 
 
-def get_lan_print_dict(channel_number='', ipmi_cmd_type='external'):
+def get_lan_print_dict(channel_number="", ipmi_cmd_type="external"):
     r"""
     Get IPMI 'lan print' output and return it as a dictionary.
 
@@ -175,26 +180,34 @@
     # special processing.  We essentially want to isolate its data and remove
     # the 'Auth Type Enable' string so that key_value_outbuf_to_dict can
     # process it as a sub-dictionary.
-    cmd_buf = "lan print " + channel_number + " | grep -E '^(Auth Type Enable)" +\
-        "?[ ]+: ' | sed -re 's/^(Auth Type Enable)?[ ]+: //g'"
-    stdout1, stderr, rc = execute_ipmi_cmd(cmd_buf, ipmi_cmd_type,
-                                           print_output=0)
+    cmd_buf = (
+        "lan print "
+        + channel_number
+        + " | grep -E '^(Auth Type Enable)"
+        + "?[ ]+: ' | sed -re 's/^(Auth Type Enable)?[ ]+: //g'"
+    )
+    stdout1, stderr, rc = execute_ipmi_cmd(
+        cmd_buf, ipmi_cmd_type, print_output=0
+    )
 
     # Now get the remainder of the data and exclude the lines with no field
     # names (i.e. the 'Auth Type Enable' sub-fields).
     cmd_buf = "lan print " + channel_number + " | grep -E -v '^[ ]+: '"
-    stdout2, stderr, rc = execute_ipmi_cmd(cmd_buf, ipmi_cmd_type,
-                                           print_output=0)
+    stdout2, stderr, rc = execute_ipmi_cmd(
+        cmd_buf, ipmi_cmd_type, print_output=0
+    )
 
     # Make auth_type_enable_dict sub-dictionary...
-    auth_type_enable_dict = vf.key_value_outbuf_to_dict(stdout1, to_lower=0,
-                                                        underscores=0)
+    auth_type_enable_dict = vf.key_value_outbuf_to_dict(
+        stdout1, to_lower=0, underscores=0
+    )
 
     # Create the lan_print_dict...
-    lan_print_dict = vf.key_value_outbuf_to_dict(stdout2, to_lower=0,
-                                                 underscores=0)
+    lan_print_dict = vf.key_value_outbuf_to_dict(
+        stdout2, to_lower=0, underscores=0
+    )
     # Re-assign 'Auth Type Enable' to contain the auth_type_enable_dict.
-    lan_print_dict['Auth Type Enable'] = auth_type_enable_dict
+    lan_print_dict["Auth Type Enable"] = auth_type_enable_dict
 
     return lan_print_dict
 
@@ -230,12 +243,13 @@
                                     trailing " Watts" substring.
     """
 
-    status, ret_values = \
-        grk.run_key_u("Run IPMI Standard Command  dcmi power reading")
+    status, ret_values = grk.run_key_u(
+        "Run IPMI Standard Command  dcmi power reading"
+    )
     result = vf.key_value_outbuf_to_dict(ret_values)
 
     if strip_watts:
-        result.update((k, re.sub(' Watts$', '', v)) for k, v in result.items())
+        result.update((k, re.sub(" Watts$", "", v)) for k, v in result.items())
 
     return result
 
@@ -292,8 +306,7 @@
         [aux_firmware_rev_info][3]:      0x00
     """
 
-    status, ret_values = \
-        grk.run_key_u("Run IPMI Standard Command  mc info")
+    status, ret_values = grk.run_key_u("Run IPMI Standard Command  mc info")
     result = vf.key_value_outbuf_to_dict(ret_values, process_indent=1)
 
     return result
@@ -334,8 +347,7 @@
       [sdr_repository_alloc_info_supported]: no
     """
 
-    status, ret_values = \
-        grk.run_key_u("Run IPMI Standard Command  sdr info")
+    status, ret_values = grk.run_key_u("Run IPMI Standard Command  sdr info")
     result = vf.key_value_outbuf_to_dict(ret_values, process_indent=1)
 
     return result
@@ -416,19 +428,21 @@
         [board_part_number]:       02CY209
     """
 
-    status, ret_values = \
-        grk.run_key_u("Run IPMI Standard Command  fru print -N 50")
+    status, ret_values = grk.run_key_u(
+        "Run IPMI Standard Command  fru print -N 50"
+    )
 
     # Manipulate the "Device not present" line to create a "state" key.
-    ret_values = re.sub("Device not present", "state : Device not present",
-                        ret_values)
+    ret_values = re.sub(
+        "Device not present", "state : Device not present", ret_values
+    )
 
-    return [vf.key_value_outbuf_to_dict(x) for x in re.split("\n\n",
-                                                             ret_values)]
+    return [
+        vf.key_value_outbuf_to_dict(x) for x in re.split("\n\n", ret_values)
+    ]
 
 
-def get_component_fru_info(component='cpu',
-                           fru_objs=None):
+def get_component_fru_info(component="cpu", fru_objs=None):
     r"""
     Get fru info for the given component and return it as a list of
     dictionaries.
@@ -449,9 +463,11 @@
 
     if fru_objs is None:
         fru_objs = get_fru_info()
-    return\
-        [x for x in fru_objs
-         if re.match(component + '([0-9]+)? ', x['fru_device_description'])]
+    return [
+        x
+        for x in fru_objs
+        if re.match(component + "([0-9]+)? ", x["fru_device_description"])
+    ]
 
 
 def get_user_info(userid, channel_number=1):
@@ -494,8 +510,12 @@
       [enable_status]        enabled
     """
 
-    status, ret_values = grk.run_key_u("Run IPMI Standard Command  channel getaccess "
-                                       + str(channel_number) + " " + str(userid))
+    status, ret_values = grk.run_key_u(
+        "Run IPMI Standard Command  channel getaccess "
+        + str(channel_number)
+        + " "
+        + str(userid)
+    )
 
     if userid == "":
         return vf.key_value_outbuf_to_dicts(ret_values, process_indent=1)
@@ -504,7 +524,6 @@
 
 
 def channel_getciphers_ipmi():
-
     r"""
     Run 'channel getciphers ipmi' command and return the result as a list of dictionaries.
 
@@ -551,7 +570,9 @@
         [revision]:             129
         [device_revision]:        1
     """
-    stdout, stderr, rc = bsu.bmc_execute_command("cat /usr/share/ipmi-providers/dev_id.json")
+    stdout, stderr, rc = bsu.bmc_execute_command(
+        "cat /usr/share/ipmi-providers/dev_id.json"
+    )
 
     result = json.loads(stdout)
 
@@ -562,7 +583,7 @@
     # [6:4] reserved. Return as 0.
     # [3:0] Device Revision, binary encoded.
 
-    result['device_revision'] = result['revision'] & 0x0F
+    result["device_revision"] = result["revision"] & 0x0F
 
     return result
 
@@ -618,8 +639,9 @@
       [power_button_disabled]:               false
     """
 
-    status, ret_values = \
-        grk.run_key_u("Run IPMI Standard Command  chassis status")
+    status, ret_values = grk.run_key_u(
+        "Run IPMI Standard Command  chassis status"
+    )
     result = vf.key_value_outbuf_to_dict(ret_values, process_indent=1)
 
     return result
@@ -649,19 +671,19 @@
         [access_mode]:                                always available
     """
 
-    status, ret_values = \
-        grk.run_key_u("Run IPMI Standard Command  channel info " + str(channel_number))
+    status, ret_values = grk.run_key_u(
+        "Run IPMI Standard Command  channel info " + str(channel_number)
+    )
     key_var_list = list(filter(None, ret_values.split("\n")))
     # To match the dict format, add a colon after 'Volatile(active) Settings' and 'Non-Volatile Settings'
     # respectively.
-    key_var_list[6] = 'Volatile(active) Settings:'
-    key_var_list[11] = 'Non-Volatile Settings:'
+    key_var_list[6] = "Volatile(active) Settings:"
+    key_var_list[11] = "Non-Volatile Settings:"
     result = vf.key_value_list_to_dict(key_var_list, process_indent=1)
     return result
 
 
 def get_user_access_ipmi(channel_number=1):
-
     r"""
     Run 'user list [<channel number>]' command and return the result as a list of dictionaries.
 
@@ -711,9 +733,12 @@
         [channel_supports_ipmi_v2.0]:                   yes
     """
 
-    status, ret_values = \
-        grk.run_key_u("Run IPMI Standard Command  channel authcap " + str(channel_number) + " "
-                      + str(privilege_level))
+    status, ret_values = grk.run_key_u(
+        "Run IPMI Standard Command  channel authcap "
+        + str(channel_number)
+        + " "
+        + str(privilege_level)
+    )
     result = vf.key_value_outbuf_to_dict(ret_values, process_indent=1)
 
     return result
@@ -790,8 +815,8 @@
     newthreshold_list = []
     for th in old_threshold:
         th = th.strip()
-        if th == 'na':
-            newthreshold_list.append('na')
+        if th == "na":
+            newthreshold_list.append("na")
         else:
             x = int(float(th)) + n
             newthreshold_list.append(x)
diff --git a/lib/jobs_processing.py b/lib/jobs_processing.py
index 5555b62..2f698c9 100644
--- a/lib/jobs_processing.py
+++ b/lib/jobs_processing.py
@@ -6,11 +6,12 @@
 
 """
 
-from robot.libraries.BuiltIn import BuiltIn
-from multiprocessing import Process, Manager
-import os
 import datetime
+import os
+from multiprocessing import Manager, Process
+
 import gen_print as gp
+from robot.libraries.BuiltIn import BuiltIn
 
 
 def execute_keyword(keyword_name, return_dict):
@@ -48,8 +49,9 @@
 
     # Append user-defined times process needed to execute.
     for ix in range(int(num_process)):
-        task = Process(target=execute_keyword,
-                       args=(keyword_name, return_dict))
+        task = Process(
+            target=execute_keyword, args=(keyword_name, return_dict)
+        )
         process_list.append(task)
         task.start()
 
@@ -98,8 +100,10 @@
     for keywords_data in keyword_names:
         keyword_args = tuple(keywords_data.split(" ")[-number_args:])
         keyword_name = " ".join(keywords_data.split(" ")[:-number_args])
-        task = Process(target=execute_keyword_args,
-                       args=(keyword_name, keyword_args, return_dict))
+        task = Process(
+            target=execute_keyword_args,
+            args=(keyword_name, keyword_args, return_dict),
+        )
         process_list.append(task)
         task.start()
 
diff --git a/lib/logging_utils.py b/lib/logging_utils.py
index 0cdbea9..7936c25 100644
--- a/lib/logging_utils.py
+++ b/lib/logging_utils.py
@@ -4,23 +4,28 @@
 Provide useful error log utility keywords.
 """
 
-import gen_print as gp
-import variables as var
-import gen_robot_utils as gru
-import sys
-import os
 import imp
+import os
+import sys
 
+import gen_print as gp
+import gen_robot_utils as gru
+import variables as var
 from robot.libraries.BuiltIn import BuiltIn
 
-base_path = os.path.dirname(os.path.dirname(
-                            imp.find_module("gen_robot_print")[1])) + os.sep
+base_path = (
+    os.path.dirname(os.path.dirname(imp.find_module("gen_robot_print")[1]))
+    + os.sep
+)
 sys.path.append(base_path + "data/")
 gru.my_import_resource("logging_utils.robot")
 
 
-redfish_support_trans_state = int(os.environ.get('REDFISH_SUPPORT_TRANS_STATE', 0)) or \
-    int(BuiltIn().get_variable_value("${REDFISH_SUPPORT_TRANS_STATE}", default=0))
+redfish_support_trans_state = int(
+    os.environ.get("REDFISH_SUPPORT_TRANS_STATE", 0)
+) or int(
+    BuiltIn().get_variable_value("${REDFISH_SUPPORT_TRANS_STATE}", default=0)
+)
 
 
 def print_error_logs(error_logs, key_list=None):
@@ -107,7 +112,7 @@
     """
 
     if error_logs is None:
-        error_logs = BuiltIn().run_keyword('Get Error Logs')
+        error_logs = BuiltIn().run_keyword("Get Error Logs")
 
     # Look for any error log entries containing the 'AdditionalData' field
     # which in turn has an entry starting with "ESEL=".  Here is an excerpt of
@@ -119,9 +124,9 @@
     #       [AdditionalData][1]:   ESEL=00 00 df 00 00 00 00 20 00 04...
     esels = []
     for error_log in error_logs.values():
-        if 'AdditionalData' in error_log:
-            for additional_data in error_log['AdditionalData']:
-                if additional_data.startswith('ESEL='):
+        if "AdditionalData" in error_log:
+            for additional_data in error_log["AdditionalData"]:
+                if additional_data.startswith("ESEL="):
                     esels.append(additional_data)
 
     return esels
diff --git a/lib/obmc_boot_test.py b/lib/obmc_boot_test.py
index 79358a6..5435dcb 100755
--- a/lib/obmc_boot_test.py
+++ b/lib/obmc_boot_test.py
@@ -4,47 +4,49 @@
 This module is the python counterpart to obmc_boot_test.
 """
 
-import os
-import imp
-import time
 import glob
+import imp
+import os
 import random
 import re
 import signal
+import time
+
 try:
     import cPickle as pickle
 except ImportError:
     import pickle
+
 import socket
 
-from robot.utils import DotDict
-from robot.libraries.BuiltIn import BuiltIn
-
-from boot_data import *
-import gen_print as gp
-import gen_robot_plug_in as grpi
 import gen_arg as ga
-import gen_valid as gv
-import gen_misc as gm
 import gen_cmd as gc
+import gen_misc as gm
+import gen_plug_in_utils as gpu
+import gen_print as gp
 import gen_robot_keyword as grk
+import gen_robot_plug_in as grpi
+import gen_valid as gv
+import logging_utils as log
+import pel_utils as pel
+import run_keyword as rk
 import state as st
 import var_stack as vs
-import gen_plug_in_utils as gpu
-import pel_utils as pel
-import logging_utils as log
-import run_keyword as rk
+from boot_data import *
+from robot.libraries.BuiltIn import BuiltIn
+from robot.utils import DotDict
 
-base_path = os.path.dirname(os.path.dirname(
-                            imp.find_module("gen_robot_print")[1])) +\
-    os.sep
+base_path = (
+    os.path.dirname(os.path.dirname(imp.find_module("gen_robot_print")[1]))
+    + os.sep
+)
 sys.path.append(base_path + "extended/")
 
 # Setting master_pid correctly influences the behavior of plug-ins like
 # DB_Logging
 program_pid = os.getpid()
-master_pid = os.environ.get('AUTOBOOT_MASTER_PID', program_pid)
-pgm_name = re.sub('\\.py$', '', os.path.basename(__file__))
+master_pid = os.environ.get("AUTOBOOT_MASTER_PID", program_pid)
+pgm_name = re.sub("\\.py$", "", os.path.basename(__file__))
 
 # Set up boot data structures.
 os_host = BuiltIn().get_variable_value("${OS_HOST}", default="")
@@ -55,29 +57,41 @@
 max_boot_history = 10
 boot_history = []
 
-state = st.return_state_constant('default_state')
+state = st.return_state_constant("default_state")
 cp_setup_called = 0
 next_boot = ""
-base_tool_dir_path = os.path.normpath(os.environ.get(
-    'AUTOBOOT_BASE_TOOL_DIR_PATH', "/tmp")) + os.sep
+base_tool_dir_path = (
+    os.path.normpath(os.environ.get("AUTOBOOT_BASE_TOOL_DIR_PATH", "/tmp"))
+    + os.sep
+)
 
-ffdc_dir_path = os.path.normpath(os.environ.get('FFDC_DIR_PATH', '')) + os.sep
+ffdc_dir_path = os.path.normpath(os.environ.get("FFDC_DIR_PATH", "")) + os.sep
 boot_success = 0
 
-status_dir_path = os.environ.get('STATUS_DIR_PATH', "") or \
-    BuiltIn().get_variable_value("${STATUS_DIR_PATH}", default="")
+status_dir_path = os.environ.get(
+    "STATUS_DIR_PATH", ""
+) or BuiltIn().get_variable_value("${STATUS_DIR_PATH}", default="")
 if status_dir_path != "":
     status_dir_path = os.path.normpath(status_dir_path) + os.sep
     # For plugin expecting env gen_call_robot.py
-    os.environ['STATUS_DIR_PATH'] = status_dir_path
+    os.environ["STATUS_DIR_PATH"] = status_dir_path
 
-redfish_support_trans_state = int(os.environ.get('REDFISH_SUPPORT_TRANS_STATE', 0)) or \
-    int(BuiltIn().get_variable_value("${REDFISH_SUPPORT_TRANS_STATE}", default=0))
-redfish_supported = BuiltIn().get_variable_value("${REDFISH_SUPPORTED}", default=False)
-redfish_rest_supported = BuiltIn().get_variable_value("${REDFISH_REST_SUPPORTED}", default=False)
-redfish_delete_sessions = int(BuiltIn().get_variable_value("${REDFISH_DELETE_SESSIONS}", default=1))
+redfish_support_trans_state = int(
+    os.environ.get("REDFISH_SUPPORT_TRANS_STATE", 0)
+) or int(
+    BuiltIn().get_variable_value("${REDFISH_SUPPORT_TRANS_STATE}", default=0)
+)
+redfish_supported = BuiltIn().get_variable_value(
+    "${REDFISH_SUPPORTED}", default=False
+)
+redfish_rest_supported = BuiltIn().get_variable_value(
+    "${REDFISH_REST_SUPPORTED}", default=False
+)
+redfish_delete_sessions = int(
+    BuiltIn().get_variable_value("${REDFISH_DELETE_SESSIONS}", default=1)
+)
 if redfish_supported:
-    redfish = BuiltIn().get_library_instance('redfish')
+    redfish = BuiltIn().get_library_instance("redfish")
     default_power_on = "Redfish Power On"
     default_power_off = "Redfish Power Off"
     if not redfish_support_trans_state:
@@ -88,7 +102,9 @@
         delete_errlogs_cmd = "Redfish Purge Event Log"
         delete_bmcdump_cmd = "Redfish Delete All BMC Dumps"
         delete_sysdump_cmd = "Redfish Delete All System Dumps"
-        default_set_power_policy = "Redfish Set Power Restore Policy  AlwaysOff"
+        default_set_power_policy = (
+            "Redfish Set Power Restore Policy  AlwaysOff"
+        )
 else:
     default_power_on = "REST Power On"
     default_power_off = "REST Power Off"
@@ -98,12 +114,12 @@
 boot_count = 0
 
 LOG_LEVEL = BuiltIn().get_variable_value("${LOG_LEVEL}")
-AUTOBOOT_FFDC_PREFIX = os.environ.get('AUTOBOOT_FFDC_PREFIX', '')
+AUTOBOOT_FFDC_PREFIX = os.environ.get("AUTOBOOT_FFDC_PREFIX", "")
 ffdc_prefix = AUTOBOOT_FFDC_PREFIX
 boot_start_time = ""
 boot_end_time = ""
-save_stack = vs.var_stack('save_stack')
-main_func_parm_list = ['boot_stack', 'stack_mode', 'quiet']
+save_stack = vs.var_stack("save_stack")
+main_func_parm_list = ["boot_stack", "stack_mode", "quiet"]
 
 
 def dump_ffdc_rc():
@@ -128,8 +144,7 @@
     return 0x00000200
 
 
-def process_host(host,
-                 host_var_name=""):
+def process_host(host, host_var_name=""):
     r"""
     Process a host by getting the associated host name and IP address and
     setting them in global variables.
@@ -162,9 +177,19 @@
 
     host_name_var_name = re.sub("host", "host_name", host_var_name)
     ip_var_name = re.sub("host", "ip", host_var_name)
-    cmd_buf = "global " + host_name_var_name + ", " + ip_var_name + " ; " +\
-        host_name_var_name + ", " + ip_var_name + " = gm.get_host_name_ip('" +\
-        host + "')"
+    cmd_buf = (
+        "global "
+        + host_name_var_name
+        + ", "
+        + ip_var_name
+        + " ; "
+        + host_name_var_name
+        + ", "
+        + ip_var_name
+        + " = gm.get_host_name_ip('"
+        + host
+        + "')"
+    )
     exec(cmd_buf)
 
 
@@ -181,16 +206,26 @@
     global parm_list
     parm_list = BuiltIn().get_variable_value("${parm_list}")
     # The following subset of parms should be processed as integers.
-    int_list = ['max_num_tests', 'boot_pass', 'boot_fail', 'ffdc_only',
-                'boot_fail_threshold', 'delete_errlogs',
-                'call_post_stack_plug', 'do_pre_boot_plug_in_setup', 'quiet',
-                'test_mode', 'debug']
+    int_list = [
+        "max_num_tests",
+        "boot_pass",
+        "boot_fail",
+        "ffdc_only",
+        "boot_fail_threshold",
+        "delete_errlogs",
+        "call_post_stack_plug",
+        "do_pre_boot_plug_in_setup",
+        "quiet",
+        "test_mode",
+        "debug",
+    ]
     for parm in parm_list:
         if parm in int_list:
-            sub_cmd = "int(BuiltIn().get_variable_value(\"${" + parm +\
-                      "}\", \"0\"))"
+            sub_cmd = (
+                'int(BuiltIn().get_variable_value("${' + parm + '}", "0"))'
+            )
         else:
-            sub_cmd = "BuiltIn().get_variable_value(\"${" + parm + "}\")"
+            sub_cmd = 'BuiltIn().get_variable_value("${' + parm + '}")'
         cmd_buf = "global " + parm + " ; " + parm + " = " + sub_cmd
         gp.dpissuing(cmd_buf)
         exec(cmd_buf)
@@ -217,7 +252,7 @@
     global valid_boot_types
 
     if ffdc_dir_path_style == "":
-        ffdc_dir_path_style = int(os.environ.get('FFDC_DIR_PATH_STYLE', '0'))
+        ffdc_dir_path_style = int(os.environ.get("FFDC_DIR_PATH_STYLE", "0"))
 
     # Convert these program parms to lists for easier processing..
     boot_list = list(filter(None, boot_list.split(":")))
@@ -227,25 +262,29 @@
     valid_boot_types = create_valid_boot_list(boot_table)
 
     cleanup_boot_results_file()
-    boot_results_file_path = create_boot_results_file_path(pgm_name,
-                                                           openbmc_nickname,
-                                                           master_pid)
+    boot_results_file_path = create_boot_results_file_path(
+        pgm_name, openbmc_nickname, master_pid
+    )
 
     if os.path.isfile(boot_results_file_path):
         # We've been called before in this run so we'll load the saved
         # boot_results and boot_history objects.
-        boot_results, boot_history =\
-            pickle.load(open(boot_results_file_path, 'rb'))
+        boot_results, boot_history = pickle.load(
+            open(boot_results_file_path, "rb")
+        )
     else:
         boot_results = boot_results(boot_table, boot_pass, boot_fail)
 
-    ffdc_list_file_path = base_tool_dir_path + openbmc_nickname +\
-        "/FFDC_FILE_LIST"
-    ffdc_report_list_path = base_tool_dir_path + openbmc_nickname +\
-        "/FFDC_REPORT_FILE_LIST"
+    ffdc_list_file_path = (
+        base_tool_dir_path + openbmc_nickname + "/FFDC_FILE_LIST"
+    )
+    ffdc_report_list_path = (
+        base_tool_dir_path + openbmc_nickname + "/FFDC_REPORT_FILE_LIST"
+    )
 
-    ffdc_summary_list_path = base_tool_dir_path + openbmc_nickname +\
-        "/FFDC_SUMMARY_FILE_LIST"
+    ffdc_summary_list_path = (
+        base_tool_dir_path + openbmc_nickname + "/FFDC_SUMMARY_FILE_LIST"
+    )
 
 
 def initial_plug_in_setup():
@@ -262,26 +301,38 @@
     BuiltIn().set_global_variable("${FFDC_DIR_PATH}", ffdc_dir_path)
     BuiltIn().set_global_variable("${STATUS_DIR_PATH}", status_dir_path)
     BuiltIn().set_global_variable("${BASE_TOOL_DIR_PATH}", base_tool_dir_path)
-    BuiltIn().set_global_variable("${FFDC_LIST_FILE_PATH}",
-                                  ffdc_list_file_path)
-    BuiltIn().set_global_variable("${FFDC_REPORT_LIST_PATH}",
-                                  ffdc_report_list_path)
-    BuiltIn().set_global_variable("${FFDC_SUMMARY_LIST_PATH}",
-                                  ffdc_summary_list_path)
+    BuiltIn().set_global_variable(
+        "${FFDC_LIST_FILE_PATH}", ffdc_list_file_path
+    )
+    BuiltIn().set_global_variable(
+        "${FFDC_REPORT_LIST_PATH}", ffdc_report_list_path
+    )
+    BuiltIn().set_global_variable(
+        "${FFDC_SUMMARY_LIST_PATH}", ffdc_summary_list_path
+    )
 
-    BuiltIn().set_global_variable("${FFDC_DIR_PATH_STYLE}",
-                                  ffdc_dir_path_style)
-    BuiltIn().set_global_variable("${FFDC_CHECK}",
-                                  ffdc_check)
+    BuiltIn().set_global_variable(
+        "${FFDC_DIR_PATH_STYLE}", ffdc_dir_path_style
+    )
+    BuiltIn().set_global_variable("${FFDC_CHECK}", ffdc_check)
 
     # For each program parameter, set the corresponding AUTOBOOT_ environment
     # variable value.  Also, set an AUTOBOOT_ environment variable for every
     # element in additional_values.
-    additional_values = ["program_pid", "master_pid", "ffdc_dir_path",
-                         "status_dir_path", "base_tool_dir_path",
-                         "ffdc_list_file_path", "ffdc_report_list_path",
-                         "ffdc_summary_list_path", "execdir", "redfish_supported",
-                         "redfish_rest_supported", "redfish_support_trans_state"]
+    additional_values = [
+        "program_pid",
+        "master_pid",
+        "ffdc_dir_path",
+        "status_dir_path",
+        "base_tool_dir_path",
+        "ffdc_list_file_path",
+        "ffdc_report_list_path",
+        "ffdc_summary_list_path",
+        "execdir",
+        "redfish_supported",
+        "redfish_rest_supported",
+        "redfish_support_trans_state",
+    ]
 
     plug_in_vars = parm_list + additional_values
 
@@ -317,8 +368,9 @@
     else:
         test_really_running = 0
 
-    BuiltIn().set_global_variable("${test_really_running}",
-                                  test_really_running)
+    BuiltIn().set_global_variable(
+        "${test_really_running}", test_really_running
+    )
     BuiltIn().set_global_variable("${boot_type_desc}", next_boot)
     BuiltIn().set_global_variable("${boot_pass}", boot_pass)
     BuiltIn().set_global_variable("${boot_fail}", boot_fail)
@@ -330,9 +382,16 @@
     # For each program parameter, set the corresponding AUTOBOOT_ environment
     # variable value.  Also, set an AUTOBOOT_ environment variable for every
     # element in additional_values.
-    additional_values = ["boot_type_desc", "boot_success", "boot_pass",
-                         "boot_fail", "test_really_running", "ffdc_prefix",
-                         "boot_start_time", "boot_end_time"]
+    additional_values = [
+        "boot_type_desc",
+        "boot_success",
+        "boot_pass",
+        "boot_fail",
+        "test_really_running",
+        "ffdc_prefix",
+        "boot_start_time",
+        "boot_end_time",
+    ]
 
     plug_in_vars = additional_values
 
@@ -344,14 +403,14 @@
         os.environ["AUTOBOOT_" + var_name] = str(var_value)
 
     if debug:
-        shell_rc, out_buf = \
-            gc.cmd_fnc_u("printenv | egrep AUTOBOOT_ | sort -u")
+        shell_rc, out_buf = gc.cmd_fnc_u(
+            "printenv | egrep AUTOBOOT_ | sort -u"
+        )
 
     BuiltIn().set_log_level(LOG_LEVEL)
 
 
 def pre_boot_plug_in_setup():
-
     # Clear the ffdc_list_file_path file.  Plug-ins may now write to it.
     try:
         os.remove(ffdc_list_file_path)
@@ -379,8 +438,7 @@
     ffdc_prefix = openbmc_nickname + "." + time_string
 
 
-def default_sigusr1(signal_number=0,
-                    frame=None):
+def default_sigusr1(signal_number=0, frame=None):
     r"""
     Handle SIGUSR1 by doing nothing.
 
@@ -428,19 +486,22 @@
     repo_bin_path = robot_pgm_dir_path.replace("/lib/", "/bin/")
     # If we can't find process_plug_in_packages.py, ssh_pw or
     # validate_plug_ins.py, then we don't have our repo bin in PATH.
-    shell_rc, out_buf = gc.cmd_fnc_u("which process_plug_in_packages.py"
-                                     + " ssh_pw validate_plug_ins.py", quiet=1,
-                                     print_output=0, show_err=0)
+    shell_rc, out_buf = gc.cmd_fnc_u(
+        "which process_plug_in_packages.py" + " ssh_pw validate_plug_ins.py",
+        quiet=1,
+        print_output=0,
+        show_err=0,
+    )
     if shell_rc != 0:
-        os.environ['PATH'] = repo_bin_path + ":" + os.environ.get('PATH', "")
+        os.environ["PATH"] = repo_bin_path + ":" + os.environ.get("PATH", "")
     # Likewise, our repo lib subdir needs to be in sys.path and PYTHONPATH.
     if robot_pgm_dir_path not in sys.path:
         sys.path.append(robot_pgm_dir_path)
         PYTHONPATH = os.environ.get("PYTHONPATH", "")
         if PYTHONPATH == "":
-            os.environ['PYTHONPATH'] = robot_pgm_dir_path
+            os.environ["PYTHONPATH"] = robot_pgm_dir_path
         else:
-            os.environ['PYTHONPATH'] = robot_pgm_dir_path + ":" + PYTHONPATH
+            os.environ["PYTHONPATH"] = robot_pgm_dir_path + ":" + PYTHONPATH
 
     validate_parms()
 
@@ -452,7 +513,8 @@
 
     plug_in_setup()
     rc, shell_rc, failed_plug_in_name = grpi.rprocess_plug_in_packages(
-        call_point='setup')
+        call_point="setup"
+    )
     if rc != 0:
         error_message = "Plug-in setup failed.\n"
         gp.print_error_report(error_message)
@@ -487,11 +549,10 @@
 
     global openbmc_model
     if openbmc_model == "":
-        status, ret_values =\
-            grk.run_key_u("Get BMC System Model", ignore=1)
+        status, ret_values = grk.run_key_u("Get BMC System Model", ignore=1)
         # Set the model to default "OPENBMC" if getting it from BMC fails.
-        if status == 'FAIL':
-            openbmc_model = 'OPENBMC'
+        if status == "FAIL":
+            openbmc_model = "OPENBMC"
         else:
             openbmc_model = ret_values
         BuiltIn().set_global_variable("${openbmc_model}", openbmc_model)
@@ -517,21 +578,27 @@
     gv.valid_integer(boot_pass)
     gv.valid_integer(boot_fail)
     plug_in_packages_list = grpi.rvalidate_plug_ins(plug_in_dir_paths)
-    BuiltIn().set_global_variable("${plug_in_packages_list}",
-                                  plug_in_packages_list)
-    gv.valid_value(stack_mode, valid_values=['normal', 'skip'])
+    BuiltIn().set_global_variable(
+        "${plug_in_packages_list}", plug_in_packages_list
+    )
+    gv.valid_value(stack_mode, valid_values=["normal", "skip"])
     gv.set_exit_on_error(False)
     if len(boot_list) == 0 and len(boot_stack) == 0 and not ffdc_only:
-        error_message = "You must provide either a value for either the" +\
-            " boot_list or the boot_stack parm.\n"
+        error_message = (
+            "You must provide either a value for either the"
+            + " boot_list or the boot_stack parm.\n"
+        )
         BuiltIn().fail(gp.sprint_error(error_message))
     valid_boot_list(boot_list, valid_boot_types)
     valid_boot_list(boot_stack, valid_boot_types)
-    selected_PDU_boots = list(set(boot_list + boot_stack)
-                              & set(boot_lists['PDU_reboot']))
+    selected_PDU_boots = list(
+        set(boot_list + boot_stack) & set(boot_lists["PDU_reboot"])
+    )
     if len(selected_PDU_boots) > 0 and pdu_host == "":
-        error_message = "You have selected the following boots which" +\
-                        " require a PDU host but no value for pdu_host:\n"
+        error_message = (
+            "You have selected the following boots which"
+            + " require a PDU host but no value for pdu_host:\n"
+        )
         error_message += gp.sprint_var(selected_PDU_boots)
         error_message += gp.sprint_var(pdu_host, fmt=gp.blank())
         BuiltIn().fail(gp.sprint_error(error_message))
@@ -546,11 +613,11 @@
 
     global state
 
-    req_states = ['epoch_seconds'] + st.default_req_states
+    req_states = ["epoch_seconds"] + st.default_req_states
 
     gp.qprint_timen("Getting system state.")
     if test_mode:
-        state['epoch_seconds'] = int(time.time())
+        state["epoch_seconds"] = int(time.time())
     else:
         state = st.get_state(req_states=req_states, quiet=quiet)
     gp.qprint_var(state)
@@ -562,9 +629,12 @@
     valid state data, we cannot continue to work.
     """
 
-    if st.compare_states(state, st.invalid_state_match, 'or'):
-        error_message = "The state dictionary contains blank fields which" +\
-            " is illegal.\n" + gp.sprint_var(state)
+    if st.compare_states(state, st.invalid_state_match, "or"):
+        error_message = (
+            "The state dictionary contains blank fields which"
+            + " is illegal.\n"
+            + gp.sprint_var(state)
+        )
         BuiltIn().fail(gp.sprint_error(error_message))
 
 
@@ -585,12 +655,20 @@
     if transitional_boot_selected and not boot_success:
         prior_boot = next_boot
         boot_candidate = boot_stack.pop()
-        gp.qprint_timen("The prior '" + next_boot + "' was chosen to"
-                        + " transition to a valid state for '" + boot_candidate
-                        + "' which was at the top of the boot_stack.  Since"
-                        + " the '" + next_boot + "' failed, the '"
-                        + boot_candidate + "' has been removed from the stack"
-                        + " to avoid and endless failure loop.")
+        gp.qprint_timen(
+            "The prior '"
+            + next_boot
+            + "' was chosen to"
+            + " transition to a valid state for '"
+            + boot_candidate
+            + "' which was at the top of the boot_stack.  Since"
+            + " the '"
+            + next_boot
+            + "' failed, the '"
+            + boot_candidate
+            + "' has been removed from the stack"
+            + " to avoid and endless failure loop."
+        )
         if len(boot_stack) == 0:
             return ""
 
@@ -607,17 +685,19 @@
         skip_boot_printed = 0
         while len(boot_stack) > 0:
             boot_candidate = boot_stack.pop()
-            if stack_mode == 'normal':
+            if stack_mode == "normal":
                 break
             else:
-                if st.compare_states(state, boot_table[boot_candidate]['end']):
+                if st.compare_states(state, boot_table[boot_candidate]["end"]):
                     if not skip_boot_printed:
                         gp.qprint_var(stack_mode)
                         gp.qprintn()
-                        gp.qprint_timen("Skipping the following boot tests"
-                                        + " which are unnecessary since their"
-                                        + " required end states match the"
-                                        + " current machine state:")
+                        gp.qprint_timen(
+                            "Skipping the following boot tests"
+                            + " which are unnecessary since their"
+                            + " required end states match the"
+                            + " current machine state:"
+                        )
                         skip_boot_printed = 1
                     gp.qprint_var(boot_candidate)
                     boot_candidate = ""
@@ -626,19 +706,26 @@
             gp.qprint_var(boot_stack)
             gp.qprint_dashes()
             return boot_candidate
-        if st.compare_states(state, boot_table[boot_candidate]['start']):
-            gp.qprint_timen("The machine state is valid for a '"
-                            + boot_candidate + "' boot test.")
+        if st.compare_states(state, boot_table[boot_candidate]["start"]):
+            gp.qprint_timen(
+                "The machine state is valid for a '"
+                + boot_candidate
+                + "' boot test."
+            )
             gp.qprint_dashes()
             gp.qprint_var(boot_stack)
             gp.qprint_dashes()
             return boot_candidate
         else:
-            gp.qprint_timen("The machine state does not match the required"
-                            + " starting state for a '" + boot_candidate
-                            + "' boot test:")
-            gp.qprint_varx("boot_table_start_entry",
-                           boot_table[boot_candidate]['start'])
+            gp.qprint_timen(
+                "The machine state does not match the required"
+                + " starting state for a '"
+                + boot_candidate
+                + "' boot test:"
+            )
+            gp.qprint_varx(
+                "boot_table_start_entry", boot_table[boot_candidate]["start"]
+            )
             boot_stack.append(boot_candidate)
             transitional_boot_selected = True
             popped_boot = boot_candidate
@@ -646,23 +733,30 @@
     # Loop through your list selecting a boot_candidates
     boot_candidates = []
     for boot_candidate in boot_list:
-        if st.compare_states(state, boot_table[boot_candidate]['start']):
+        if st.compare_states(state, boot_table[boot_candidate]["start"]):
             if stack_popped:
-                if st.compare_states(boot_table[boot_candidate]['end'],
-                                     boot_table[popped_boot]['start']):
+                if st.compare_states(
+                    boot_table[boot_candidate]["end"],
+                    boot_table[popped_boot]["start"],
+                ):
                     boot_candidates.append(boot_candidate)
             else:
                 boot_candidates.append(boot_candidate)
 
     if len(boot_candidates) == 0:
-        gp.qprint_timen("The user's boot list contained no boot tests"
-                        + " which are valid for the current machine state.")
+        gp.qprint_timen(
+            "The user's boot list contained no boot tests"
+            + " which are valid for the current machine state."
+        )
         boot_candidate = default_power_on
-        if not st.compare_states(state, boot_table[default_power_on]['start']):
+        if not st.compare_states(state, boot_table[default_power_on]["start"]):
             boot_candidate = default_power_off
         boot_candidates.append(boot_candidate)
-        gp.qprint_timen("Using default '" + boot_candidate
-                        + "' boot type to transition to valid state.")
+        gp.qprint_timen(
+            "Using default '"
+            + boot_candidate
+            + "' boot type to transition to valid state."
+        )
 
     gp.dprint_var(boot_candidates)
 
@@ -683,29 +777,41 @@
     # Making deliberate choice to NOT run plug_in_setup().  We don't want
     # ffdc_prefix updated.
     rc, shell_rc, failed_plug_in_name = grpi.rprocess_plug_in_packages(
-        call_point='ffdc_report', stop_on_plug_in_failure=0)
+        call_point="ffdc_report", stop_on_plug_in_failure=0
+    )
 
     # Get additional header data which may have been created by ffdc plug-ins.
     # Also, delete the individual header files to cleanup.
-    cmd_buf = "file_list=$(cat " + ffdc_report_list_path + " 2>/dev/null)" +\
-              " ; [ ! -z \"${file_list}\" ] && cat ${file_list}" +\
-              " 2>/dev/null ; rm -rf ${file_list} 2>/dev/null || :"
-    shell_rc, more_header_info = gc.cmd_fnc_u(cmd_buf, print_output=0,
-                                              show_err=0)
+    cmd_buf = (
+        "file_list=$(cat "
+        + ffdc_report_list_path
+        + " 2>/dev/null)"
+        + ' ; [ ! -z "${file_list}" ] && cat ${file_list}'
+        + " 2>/dev/null ; rm -rf ${file_list} 2>/dev/null || :"
+    )
+    shell_rc, more_header_info = gc.cmd_fnc_u(
+        cmd_buf, print_output=0, show_err=0
+    )
 
     # Get additional summary data which may have been created by ffdc plug-ins.
     # Also, delete the individual header files to cleanup.
-    cmd_buf = "file_list=$(cat " + ffdc_summary_list_path + " 2>/dev/null)" +\
-              " ; [ ! -z \"${file_list}\" ] && cat ${file_list}" +\
-              " 2>/dev/null ; rm -rf ${file_list} 2>/dev/null || :"
-    shell_rc, ffdc_summary_info = gc.cmd_fnc_u(cmd_buf, print_output=0,
-                                               show_err=0)
+    cmd_buf = (
+        "file_list=$(cat "
+        + ffdc_summary_list_path
+        + " 2>/dev/null)"
+        + ' ; [ ! -z "${file_list}" ] && cat ${file_list}'
+        + " 2>/dev/null ; rm -rf ${file_list} 2>/dev/null || :"
+    )
+    shell_rc, ffdc_summary_info = gc.cmd_fnc_u(
+        cmd_buf, print_output=0, show_err=0
+    )
 
     # ffdc_list_file_path contains a list of any ffdc files created by plug-
     # ins, etc.  Read that data into a list.
     try:
-        plug_in_ffdc_list = \
-            open(ffdc_list_file_path, 'r').read().rstrip("\n").split("\n")
+        plug_in_ffdc_list = (
+            open(ffdc_list_file_path, "r").read().rstrip("\n").split("\n")
+        )
         plug_in_ffdc_list = list(filter(None, plug_in_ffdc_list))
     except IOError:
         plug_in_ffdc_list = []
@@ -722,7 +828,7 @@
 
     # Open ffdc_file_list for writing.  We will write a complete list of
     # FFDC files to it for possible use by plug-ins like cp_stop_check.
-    ffdc_list_file = open(ffdc_list_file_path, 'w')
+    ffdc_list_file = open(ffdc_list_file_path, "w")
     ffdc_list_file.write(printable_ffdc_file_list + "\n")
     ffdc_list_file.close()
 
@@ -737,13 +843,35 @@
 
     if len(more_header_info) > 0:
         gp.qprintn(more_header_info)
-    gp.qpvars(host_name, host_ip, openbmc_nickname, openbmc_host,
-              openbmc_host_name, openbmc_ip, openbmc_username,
-              openbmc_password, rest_username, rest_password, ipmi_username,
-              ipmi_password, os_host, os_host_name, os_ip, os_username,
-              os_password, pdu_host, pdu_host_name, pdu_ip, pdu_username,
-              pdu_password, pdu_slot_no, openbmc_serial_host,
-              openbmc_serial_host_name, openbmc_serial_ip, openbmc_serial_port)
+    gp.qpvars(
+        host_name,
+        host_ip,
+        openbmc_nickname,
+        openbmc_host,
+        openbmc_host_name,
+        openbmc_ip,
+        openbmc_username,
+        openbmc_password,
+        rest_username,
+        rest_password,
+        ipmi_username,
+        ipmi_password,
+        os_host,
+        os_host_name,
+        os_ip,
+        os_username,
+        os_password,
+        pdu_host,
+        pdu_host_name,
+        pdu_ip,
+        pdu_username,
+        pdu_password,
+        pdu_slot_no,
+        openbmc_serial_host,
+        openbmc_serial_host_name,
+        openbmc_serial_ip,
+        openbmc_serial_port,
+    )
 
     gp.qprintn()
     print_boot_history(boot_history)
@@ -769,14 +897,18 @@
 
     plug_in_setup()
     rc, shell_rc, failed_plug_in_name = grpi.rprocess_plug_in_packages(
-        call_point='ffdc', stop_on_plug_in_failure=0)
+        call_point="ffdc", stop_on_plug_in_failure=0
+    )
 
-    AUTOBOOT_FFDC_PREFIX = os.environ['AUTOBOOT_FFDC_PREFIX']
-    status, ffdc_file_list = grk.run_key_u("FFDC  ffdc_prefix="
-                                           + AUTOBOOT_FFDC_PREFIX
-                                           + "  ffdc_function_list="
-                                           + ffdc_function_list, ignore=1)
-    if status != 'PASS':
+    AUTOBOOT_FFDC_PREFIX = os.environ["AUTOBOOT_FFDC_PREFIX"]
+    status, ffdc_file_list = grk.run_key_u(
+        "FFDC  ffdc_prefix="
+        + AUTOBOOT_FFDC_PREFIX
+        + "  ffdc_function_list="
+        + ffdc_function_list,
+        ignore=1,
+    )
+    if status != "PASS":
         gp.qprint_error("Call to ffdc failed.\n")
         if type(ffdc_file_list) is not list:
             ffdc_file_list = []
@@ -801,7 +933,7 @@
     global boot_history
     global boot_start_time
 
-    doing_msg = gp.sprint_timen("Doing \"" + boot_keyword + "\".")
+    doing_msg = gp.sprint_timen('Doing "' + boot_keyword + '".')
 
     # Set boot_start_time for use by plug-ins.
     boot_start_time = doing_msg[1:33]
@@ -812,8 +944,7 @@
     update_boot_history(boot_history, doing_msg, max_boot_history)
 
 
-def stop_boot_test(signal_number=0,
-                   frame=None):
+def stop_boot_test(signal_number=0, frame=None):
     r"""
     Handle SIGUSR1 by aborting the boot test that is running.
 
@@ -855,34 +986,40 @@
     print_test_start_message(boot)
 
     plug_in_setup()
-    rc, shell_rc, failed_plug_in_name = \
-        grpi.rprocess_plug_in_packages(call_point="pre_boot")
+    rc, shell_rc, failed_plug_in_name = grpi.rprocess_plug_in_packages(
+        call_point="pre_boot"
+    )
     if rc != 0:
-        error_message = "Plug-in failed with non-zero return code.\n" +\
-            gp.sprint_var(rc, fmt=gp.hexa())
+        error_message = (
+            "Plug-in failed with non-zero return code.\n"
+            + gp.sprint_var(rc, fmt=gp.hexa())
+        )
         set_default_siguser1()
         BuiltIn().fail(gp.sprint_error(error_message))
 
     if test_mode:
         # In test mode, we'll pretend the boot worked by assigning its
         # required end state to the default state value.
-        state = st.strip_anchor_state(boot_table[boot]['end'])
+        state = st.strip_anchor_state(boot_table[boot]["end"])
     else:
         # Assertion:  We trust that the state data was made fresh by the
         # caller.
 
         gp.qprintn()
 
-        if boot_table[boot]['method_type'] == "keyword":
-            rk.my_run_keywords(boot_table[boot].get('lib_file_path', ''),
-                               boot_table[boot]['method'],
-                               quiet=quiet)
+        if boot_table[boot]["method_type"] == "keyword":
+            rk.my_run_keywords(
+                boot_table[boot].get("lib_file_path", ""),
+                boot_table[boot]["method"],
+                quiet=quiet,
+            )
 
-        if boot_table[boot]['bmc_reboot']:
-            st.wait_for_comm_cycle(int(state['epoch_seconds']))
+        if boot_table[boot]["bmc_reboot"]:
+            st.wait_for_comm_cycle(int(state["epoch_seconds"]))
             plug_in_setup()
-            rc, shell_rc, failed_plug_in_name = \
-                grpi.rprocess_plug_in_packages(call_point="post_reboot")
+            rc, shell_rc, failed_plug_in_name = grpi.rprocess_plug_in_packages(
+                call_point="post_reboot"
+            )
             if rc != 0:
                 error_message = "Plug-in failed with non-zero return code.\n"
                 error_message += gp.sprint_var(rc, fmt=gp.hexa())
@@ -890,25 +1027,35 @@
                 BuiltIn().fail(gp.sprint_error(error_message))
         else:
             match_state = st.anchor_state(state)
-            del match_state['epoch_seconds']
+            del match_state["epoch_seconds"]
             # Wait for the state to change in any way.
-            st.wait_state(match_state, wait_time=state_change_timeout,
-                          interval="10 seconds", invert=1)
+            st.wait_state(
+                match_state,
+                wait_time=state_change_timeout,
+                interval="10 seconds",
+                invert=1,
+            )
 
         gp.qprintn()
-        if boot_table[boot]['end']['chassis'] == "Off":
+        if boot_table[boot]["end"]["chassis"] == "Off":
             boot_timeout = power_off_timeout
         else:
             boot_timeout = power_on_timeout
-        st.wait_state(boot_table[boot]['end'], wait_time=boot_timeout,
-                      interval="10 seconds")
+        st.wait_state(
+            boot_table[boot]["end"],
+            wait_time=boot_timeout,
+            interval="10 seconds",
+        )
 
     plug_in_setup()
-    rc, shell_rc, failed_plug_in_name = \
-        grpi.rprocess_plug_in_packages(call_point="post_boot")
+    rc, shell_rc, failed_plug_in_name = grpi.rprocess_plug_in_packages(
+        call_point="post_boot"
+    )
     if rc != 0:
-        error_message = "Plug-in failed with non-zero return code.\n" +\
-            gp.sprint_var(rc, fmt=gp.hexa())
+        error_message = (
+            "Plug-in failed with non-zero return code.\n"
+            + gp.sprint_var(rc, fmt=gp.hexa())
+        )
         set_default_siguser1()
         BuiltIn().fail(gp.sprint_error(error_message))
 
@@ -949,12 +1096,14 @@
     gp.qprintn()
     if boot_status == "PASS":
         boot_success = 1
-        completion_msg = gp.sprint_timen("BOOT_SUCCESS: \"" + next_boot
-                                         + "\" succeeded.")
+        completion_msg = gp.sprint_timen(
+            'BOOT_SUCCESS: "' + next_boot + '" succeeded.'
+        )
     else:
         boot_success = 0
-        completion_msg = gp.sprint_timen("BOOT_FAILED: \"" + next_boot
-                                         + "\" failed.")
+        completion_msg = gp.sprint_timen(
+            'BOOT_FAILED: "' + next_boot + '" failed.'
+        )
 
     # Set boot_end_time for use by plug-ins.
     boot_end_time = completion_msg[1:33]
@@ -968,16 +1117,19 @@
     # NOTE: A post_test_case call point failure is NOT counted as a boot
     # failure.
     rc, shell_rc, failed_plug_in_name = grpi.rprocess_plug_in_packages(
-        call_point='post_test_case', stop_on_plug_in_failure=0)
+        call_point="post_test_case", stop_on_plug_in_failure=0
+    )
 
     plug_in_setup()
     rc, shell_rc, failed_plug_in_name = grpi.rprocess_plug_in_packages(
-        call_point='ffdc_check', shell_rc=dump_ffdc_rc(),
-        stop_on_plug_in_failure=1, stop_on_non_zero_rc=1)
-    if ffdc_check == "All" or\
-       shell_rc == dump_ffdc_rc():
+        call_point="ffdc_check",
+        shell_rc=dump_ffdc_rc(),
+        stop_on_plug_in_failure=1,
+        stop_on_non_zero_rc=1,
+    )
+    if ffdc_check == "All" or shell_rc == dump_ffdc_rc():
         status, ret_values = grk.run_key_u("my_ffdc", ignore=1)
-        if status != 'PASS':
+        if status != "PASS":
             gp.qprint_error("Call to my_ffdc failed.\n")
             # Leave a record for caller that "soft" errors occurred.
             soft_errors = 1
@@ -987,7 +1139,9 @@
         # print error logs before delete
         if redfish_support_trans_state:
             status, error_logs = grk.run_key_u("Get Redfish Event Logs")
-            log.print_error_logs(error_logs, "AdditionalDataURI Message Severity")
+            log.print_error_logs(
+                error_logs, "AdditionalDataURI Message Severity"
+            )
         else:
             status, error_logs = grk.run_key_u("Get Error Logs")
             log.print_error_logs(error_logs, "AdditionalData Message Severity")
@@ -1005,8 +1159,8 @@
 
     plug_in_setup()
     rc, shell_rc, failed_plug_in_name = grpi.rprocess_plug_in_packages(
-        call_point='stop_check', shell_rc=stop_test_rc(),
-        stop_on_non_zero_rc=1)
+        call_point="stop_check", shell_rc=stop_test_rc(), stop_on_non_zero_rc=1
+    )
     if shell_rc == stop_test_rc():
         message = "Stopping as requested by user.\n"
         gp.qprint_time(message)
@@ -1033,16 +1187,19 @@
     if cp_setup_called:
         plug_in_setup()
         rc, shell_rc, failed_plug_in_name = grpi.rprocess_plug_in_packages(
-            call_point='cleanup', stop_on_plug_in_failure=0)
+            call_point="cleanup", stop_on_plug_in_failure=0
+        )
 
-    if 'boot_results_file_path' in globals():
+    if "boot_results_file_path" in globals():
         # Save boot_results and boot_history objects to a file in case they are
         # needed again.
         gp.qprint_timen("Saving boot_results to the following path.")
         gp.qprint_var(boot_results_file_path)
-        pickle.dump((boot_results, boot_history),
-                    open(boot_results_file_path, 'wb'),
-                    pickle.HIGHEST_PROTOCOL)
+        pickle.dump(
+            (boot_results, boot_history),
+            open(boot_results_file_path, "wb"),
+            pickle.HIGHEST_PROTOCOL,
+        )
 
     global save_stack
     # Restore any global values saved on the save_stack.
@@ -1055,8 +1212,9 @@
             continue
 
         # Restore the saved value.
-        cmd_buf = "BuiltIn().set_global_variable(\"${" + parm_name +\
-            "}\", parm_value)"
+        cmd_buf = (
+            'BuiltIn().set_global_variable("${' + parm_name + '}", parm_value)'
+        )
         gp.dpissuing(cmd_buf)
         exec(cmd_buf)
 
@@ -1074,8 +1232,10 @@
     if ga.psutil_imported:
         ga.terminate_descendants()
 
-    cmd_buf = ["Print Error",
-               "A keyword timeout occurred ending this program.\n"]
+    cmd_buf = [
+        "Print Error",
+        "A keyword timeout occurred ending this program.\n",
+    ]
     BuiltIn().run_keyword_if_timeout_occurred(*cmd_buf)
 
     if redfish_supported:
@@ -1100,24 +1260,29 @@
     # For the purposes of the following plug-ins, mark the "boot" as a success.
     boot_success = 1
     plug_in_setup()
-    rc, shell_rc, failed_plug_in_name, history =\
-        grpi.rprocess_plug_in_packages(call_point='post_stack',
-                                       stop_on_plug_in_failure=0,
-                                       return_history=True)
+    (
+        rc,
+        shell_rc,
+        failed_plug_in_name,
+        history,
+    ) = grpi.rprocess_plug_in_packages(
+        call_point="post_stack", stop_on_plug_in_failure=0, return_history=True
+    )
     for doing_msg in history:
         update_boot_history(boot_history, doing_msg, max_boot_history)
     if rc != 0:
         boot_success = 0
 
     plug_in_setup()
-    rc, shell_rc, failed_plug_in_name =\
-        grpi.rprocess_plug_in_packages(call_point='ffdc_check',
-                                       shell_rc=dump_ffdc_rc(),
-                                       stop_on_plug_in_failure=1,
-                                       stop_on_non_zero_rc=1)
+    rc, shell_rc, failed_plug_in_name = grpi.rprocess_plug_in_packages(
+        call_point="ffdc_check",
+        shell_rc=dump_ffdc_rc(),
+        stop_on_plug_in_failure=1,
+        stop_on_non_zero_rc=1,
+    )
     if shell_rc == dump_ffdc_rc():
         status, ret_values = grk.run_key_u("my_ffdc", ignore=1)
-        if status != 'PASS':
+        if status != "PASS":
             gp.qprint_error("Call to my_ffdc failed.\n")
             # Leave a record for caller that "soft" errors occurred.
             soft_errors = 1
@@ -1125,24 +1290,26 @@
 
     plug_in_setup()
     rc, shell_rc, failed_plug_in_name = grpi.rprocess_plug_in_packages(
-        call_point='stop_check', shell_rc=stop_test_rc(),
-        stop_on_non_zero_rc=1)
+        call_point="stop_check", shell_rc=stop_test_rc(), stop_on_non_zero_rc=1
+    )
     if shell_rc == stop_test_rc():
         message = "Stopping as requested by user.\n"
         gp.qprint_time(message)
         BuiltIn().fail(message)
 
 
-def obmc_boot_test_py(loc_boot_stack=None,
-                      loc_stack_mode=None,
-                      loc_quiet=None):
+def obmc_boot_test_py(
+    loc_boot_stack=None, loc_stack_mode=None, loc_quiet=None
+):
     r"""
     Do main program processing.
     """
 
     global save_stack
 
-    ga.set_term_options(term_requests={'pgm_names': ['process_plug_in_packages.py']})
+    ga.set_term_options(
+        term_requests={"pgm_names": ["process_plug_in_packages.py"]}
+    )
 
     gp.dprintn()
     # Process function parms.
@@ -1153,14 +1320,24 @@
 
         if parm_value is not None:
             # Save the global value on a stack.
-            cmd_buf = "save_stack.push(BuiltIn().get_variable_value(\"${" +\
-                parm_name + "}\"), \"" + parm_name + "\")"
+            cmd_buf = (
+                'save_stack.push(BuiltIn().get_variable_value("${'
+                + parm_name
+                + '}"), "'
+                + parm_name
+                + '")'
+            )
             gp.dpissuing(cmd_buf)
             exec(cmd_buf)
 
             # Set the global value to the passed value.
-            cmd_buf = "BuiltIn().set_global_variable(\"${" + parm_name +\
-                "}\", loc_" + parm_name + ")"
+            cmd_buf = (
+                'BuiltIn().set_global_variable("${'
+                + parm_name
+                + '}", loc_'
+                + parm_name
+                + ")"
+            )
             gp.dpissuing(cmd_buf)
             exec(cmd_buf)
 
@@ -1181,7 +1358,9 @@
         # print error logs before delete
         if redfish_support_trans_state:
             status, error_logs = grk.run_key_u("Get Redfish Event Logs")
-            log.print_error_logs(error_logs, "AdditionalDataURI Message Severity")
+            log.print_error_logs(
+                error_logs, "AdditionalDataURI Message Severity"
+            )
         else:
             status, error_logs = grk.run_key_u("Get Error Logs")
             log.print_error_logs(error_logs, "AdditionalData Message Severity")
@@ -1195,7 +1374,7 @@
             grk.run_key(delete_sysdump_cmd, ignore=1)
 
     # Process caller's boot_stack.
-    while (len(boot_stack) > 0):
+    while len(boot_stack) > 0:
         test_loop_body()
 
     gp.qprint_timen("Finished processing stack.")
@@ -1212,8 +1391,10 @@
     boot_pass, boot_fail = boot_results.return_total_pass_fail()
     new_fail = boot_fail - init_boot_fail
     if new_fail > boot_fail_threshold:
-        error_message = "Boot failures exceed the boot failure" +\
-                        " threshold:\n" +\
-                        gp.sprint_var(new_fail) +\
-                        gp.sprint_var(boot_fail_threshold)
+        error_message = (
+            "Boot failures exceed the boot failure"
+            + " threshold:\n"
+            + gp.sprint_var(new_fail)
+            + gp.sprint_var(boot_fail_threshold)
+        )
         BuiltIn().fail(gp.sprint_error(error_message))
diff --git a/lib/openbmc_ffdc.py b/lib/openbmc_ffdc.py
index 78f596c..b5efa7a 100644
--- a/lib/openbmc_ffdc.py
+++ b/lib/openbmc_ffdc.py
@@ -7,20 +7,24 @@
 import os
 
 import gen_print as gp
-import gen_valid as gv
 import gen_robot_keyword as grk
+import gen_valid as gv
 import state as st
-
 from robot.libraries.BuiltIn import BuiltIn
 
-redfish_support_trans_state = int(os.environ.get('REDFISH_SUPPORT_TRANS_STATE', 0)) or \
-    int(BuiltIn().get_variable_value("${REDFISH_SUPPORT_TRANS_STATE}", default=0))
+redfish_support_trans_state = int(
+    os.environ.get("REDFISH_SUPPORT_TRANS_STATE", 0)
+) or int(
+    BuiltIn().get_variable_value("${REDFISH_SUPPORT_TRANS_STATE}", default=0)
+)
 
 
-def ffdc(ffdc_dir_path=None,
-         ffdc_prefix=None,
-         ffdc_function_list="",
-         comm_check=True):
+def ffdc(
+    ffdc_dir_path=None,
+    ffdc_prefix=None,
+    ffdc_function_list="",
+    comm_check=True,
+):
     r"""
     Gather First Failure Data Capture (FFDC).
 
@@ -48,26 +52,31 @@
 
     if comm_check:
         if not redfish_support_trans_state:
-            interface = 'rest'
+            interface = "rest"
         else:
-            interface = 'redfish'
+            interface = "redfish"
 
-        state = st.get_state(req_states=['ping', 'uptime', interface])
+        state = st.get_state(req_states=["ping", "uptime", interface])
         gp.qprint_var(state)
-        if not int(state['ping']):
-            gp.print_error("BMC is not ping-able.  Terminating FFDC collection.\n")
+        if not int(state["ping"]):
+            gp.print_error(
+                "BMC is not ping-able.  Terminating FFDC collection.\n"
+            )
             return ffdc_file_list
 
         if not int(state[interface]):
             gp.print_error("%s commands to the BMC are failing." % interface)
 
-        if state['uptime'] == "":
+        if state["uptime"] == "":
             gp.print_error("BMC is not communicating via ssh.\n")
 
         # If SSH and Redfish connection doesn't works, abort.
-        if not int(state[interface]) and state['uptime'] == "":
-            gp.print_error("BMC is not communicating via ssh or Redfish.  Terminating FFDC"
-                           + " collection.\n")
+        if not int(state[interface]) and state["uptime"] == "":
+            gp.print_error(
+                "BMC is not communicating via ssh or Redfish.  Terminating"
+                " FFDC"
+                + " collection.\n"
+            )
             return ffdc_file_list
 
     gp.qprint_timen("Collecting FFDC.")
@@ -85,9 +94,12 @@
     gp.qprint_issuing(cmd_buf)
     status, output = BuiltIn().run_keyword_and_ignore_error(*cmd_buf)
     if status != "PASS":
-        error_message = gp.sprint_error_report("Create Directory failed"
-                                               + " with the following"
-                                               + " error:\n" + output)
+        error_message = gp.sprint_error_report(
+            "Create Directory failed"
+            + " with the following"
+            + " error:\n"
+            + output
+        )
         BuiltIn().fail(error_message)
 
     # FFDC_FILE_PATH is used by Header Message.
@@ -95,9 +107,9 @@
     BuiltIn().set_global_variable("${FFDC_FILE_PATH}", FFDC_FILE_PATH)
 
     status, ffdc_file_list = grk.run_key_u("Header Message")
-    status, ffdc_file_sub_list = \
-        grk.run_key_u("Call FFDC Methods  ffdc_function_list="
-                      + ffdc_function_list)
+    status, ffdc_file_sub_list = grk.run_key_u(
+        "Call FFDC Methods  ffdc_function_list=" + ffdc_function_list
+    )
 
     # Combine lists, remove duplicates and sort.
     ffdc_file_list = sorted(set(ffdc_file_list + ffdc_file_sub_list))
@@ -107,8 +119,7 @@
     return ffdc_file_list
 
 
-def set_ffdc_defaults(ffdc_dir_path=None,
-                      ffdc_prefix=None):
+def set_ffdc_defaults(ffdc_dir_path=None, ffdc_prefix=None):
     r"""
     Set a default value for ffdc_dir_path and ffdc_prefix if they don't
     already have values.  Return both values.
@@ -130,24 +141,34 @@
     BuiltIn().set_global_variable("${FFDC_TIME}", FFDC_TIME)
 
     ffdc_dir_path_style = BuiltIn().get_variable_value(
-        "${ffdc_dir_path_style}")
+        "${ffdc_dir_path_style}"
+    )
 
     if ffdc_dir_path is None:
         if ffdc_dir_path_style:
             try:
-                ffdc_dir_path = os.environ['FFDC_DIR_PATH']
+                ffdc_dir_path = os.environ["FFDC_DIR_PATH"]
             except KeyError:
-                ffdc_dir_path = os.path.dirname(
-                    BuiltIn().get_variable_value("${LOG_FILE}")) + "/"
+                ffdc_dir_path = (
+                    os.path.dirname(
+                        BuiltIn().get_variable_value("${LOG_FILE}")
+                    )
+                    + "/"
+                )
         else:
             FFDC_LOG_PATH = os.getcwd() + "/logs/"
             if FFDC_LOG_PATH is None:
                 FFDC_LOG_PATH = ""
             if FFDC_LOG_PATH == "":
-                FFDC_LOG_PATH = os.path.dirname(
-                    BuiltIn().get_variable_value("${LOG_FILE}")) + "/"
-            error_message = gv.valid_value(FFDC_LOG_PATH,
-                                           var_name="FFDC_LOG_PATH")
+                FFDC_LOG_PATH = (
+                    os.path.dirname(
+                        BuiltIn().get_variable_value("${LOG_FILE}")
+                    )
+                    + "/"
+                )
+            error_message = gv.valid_value(
+                FFDC_LOG_PATH, var_name="FFDC_LOG_PATH"
+            )
             if error_message != "":
                 error_message = gp.sprint_error_report(error_message)
                 BuiltIn().fail(error_message)
@@ -168,9 +189,16 @@
             if ffdc_dir_path_style:
                 OPENBMC_HOST = BuiltIn().get_variable_value("${OPENBMC_HOST}")
                 OPENBMC_NICKNAME = BuiltIn().get_variable_value(
-                    "${OPENBMC_NICKNAME}", default=OPENBMC_HOST)
-                ffdc_prefix = OPENBMC_NICKNAME + "." + FFDC_TIME[2:8] + "." +\
-                    FFDC_TIME[8:14] + "."
+                    "${OPENBMC_NICKNAME}", default=OPENBMC_HOST
+                )
+                ffdc_prefix = (
+                    OPENBMC_NICKNAME
+                    + "."
+                    + FFDC_TIME[2:8]
+                    + "."
+                    + FFDC_TIME[8:14]
+                    + "."
+                )
             else:
                 ffdc_prefix = FFDC_TIME + "_"
 
diff --git a/lib/openbmc_ffdc_list.py b/lib/openbmc_ffdc_list.py
index 9fb882a..ea79a81 100755
--- a/lib/openbmc_ffdc_list.py
+++ b/lib/openbmc_ffdc_list.py
@@ -17,159 +17,203 @@
 # -----------------------------------------------------------------
 # Add cmd's needed to be part of the ffdc report manifest file
 FFDC_BMC_CMD = {
-    'DRIVER INFO':
-    {
+    "DRIVER INFO": {
         # String Name         Command
-        'FW Level': 'cat /etc/os-release',
-        'FW Timestamp': 'cat /etc/timestamp',
+        "FW Level": "cat /etc/os-release",
+        "FW Timestamp": "cat /etc/timestamp",
     },
-    'BMC DATA':
-    {
-        'BMC OS': 'uname -a',
-        'BMC Uptime': 'uptime;cat /proc/uptime',
-        'BMC File System Disk Space Usage': 'df -hT',
-        'BMC Date Time': 'date;/sbin/hwclock --show;/usr/bin/timedatectl'
+    "BMC DATA": {
+        "BMC OS": "uname -a",
+        "BMC Uptime": "uptime;cat /proc/uptime",
+        "BMC File System Disk Space Usage": "df -hT",
+        "BMC Date Time": "date;/sbin/hwclock --show;/usr/bin/timedatectl",
     },
-    'APPLICATION DATA':
-    {
-        'BMC state': '/usr/bin/obmcutil state',
+    "APPLICATION DATA": {
+        "BMC state": "/usr/bin/obmcutil state",
     },
 }
 # Add file name and corresponding command needed for BMC
 FFDC_BMC_FILE = {
-    'BMC FILES':
-    {
+    "BMC FILES": {
         # File Name         Command
-        'BMC_flash_side.txt': 'cat /sys/class/watchdog/watchdog1/bootstatus >/tmp/BMC_flash_side.txt 2>&1',
-        'BMC_hwmon.txt': 'grep -r . /sys/class/hwmon/* >/tmp/BMC_hwmon.txt 2>&1',
-        'BMC_proc_list.txt': 'top -n 1 -b >/tmp/BMC_proc_list.txt 2>&1',
-        'BMC_proc_fd_active_list.txt': 'ls -Al /proc/*/fd/ >/tmp/BMC_proc_fd_active_list.txt 2>&1',
-        'BMC_journalctl_nopager.txt': 'journalctl --no-pager >/tmp/BMC_journalctl_nopager.txt 2>&1',
-        'BMC_journalctl_pretty.json': 'journalctl -o json-pretty >/tmp/BMC_journalctl_pretty.json 2>&1',
-        'BMC_dmesg.txt': 'dmesg >/tmp/BMC_dmesg.txt 2>&1',
-        'BMC_procinfo.txt': 'cat /proc/cpuinfo >/tmp/BMC_procinfo.txt 2>&1',
-        'BMC_meminfo.txt': 'cat /proc/meminfo >/tmp/BMC_meminfo.txt 2>&1',
-        'BMC_systemd.txt': 'systemctl status --all >/tmp/BMC_systemd.txt 2>&1',
-        'BMC_failed_service.txt': 'systemctl list-units --failed >/tmp/BMC_failed_service.txt 2>&1',
-        'BMC_list_service.txt': 'systemctl list-jobs >/tmp/BMC_list_service.txt 2>&1',
-        'BMC_obmc_console.txt': 'cat /var/log/obmc-console.log >/tmp/BMC_obmc_console.txt 2>&1',
-        'BMC_obmc_console1.txt': 'cat /var/log/obmc-console1.log >/tmp/BMC_obmc_console1.txt 2>&1',
-        'PEL_logs_list.json': 'peltool -l >/tmp/PEL_logs_list.json 2>&1',
-        'PEL_logs_complete_list.json': 'peltool -l -a -f >/tmp/PEL_logs_complete_list.json 2>&1',
-        'PEL_logs_display.json': 'peltool -a >/tmp/PEL_logs_display.json 2>&1',
-        'PEL_logs_complete_display.json': 'peltool -a -f -h>/tmp/PEL_logs_complete_display.json 2>&1',
-        'PEL_logs_badPEL.txt': 'hexdump -C'
-        + ' /var/lib/phosphor-logging/extensions/pels/badPEL>/tmp/PEL_logs_badPEL.txt 2>&1',
-        'PLDM_fru_record.txt': 'pldmtool fru getfrurecordtable>/tmp/PLDM_fru_record.txt 2>&1',
-        'BMC_pldm_flight_recorder.txt': 'rm -rf /tmp/pldm_flight_recorder; killall -s SIGUSR1 pldmd;'
-        + ' sleep 5; cat /tmp/pldm_flight_recorder > /tmp/BMC_pldm_flight_recorder.txt 2>&1;',
-        'OCC_state.txt': 'echo "OCC state check";for i in {0..3};'
-        + ' do (echo /org/open_power/control/occ$i;'
-        + ' busctl get-property org.open_power.OCC.Control /org/open_power/control/occ$i'
-        + ' org.open_power.OCC.Status OccActive) done > /tmp/OCC_state.txt 2>&1',
-        'bmcweb_persistent_data.json': 'cat /home/root/bmcweb_persistent_data.json'
-        + ' > /tmp/bmcweb_persistent_data.json',
-        'GUARD_list.txt': 'guard -l > /tmp/GUARD_list.txt 2>&1',
-        'fan_control_dump.json': 'fanctl dump; sleep 5',
-        'DEVTREE': 'cat /var/lib/phosphor-software-manager/pnor/rw/DEVTREE > /tmp/DEVTREE 2>&1',
+        "BMC_flash_side.txt": (
+            "cat /sys/class/watchdog/watchdog1/bootstatus"
+            " >/tmp/BMC_flash_side.txt 2>&1"
+        ),
+        "BMC_hwmon.txt": (
+            "grep -r . /sys/class/hwmon/* >/tmp/BMC_hwmon.txt 2>&1"
+        ),
+        "BMC_proc_list.txt": "top -n 1 -b >/tmp/BMC_proc_list.txt 2>&1",
+        "BMC_proc_fd_active_list.txt": (
+            "ls -Al /proc/*/fd/ >/tmp/BMC_proc_fd_active_list.txt 2>&1"
+        ),
+        "BMC_journalctl_nopager.txt": (
+            "journalctl --no-pager >/tmp/BMC_journalctl_nopager.txt 2>&1"
+        ),
+        "BMC_journalctl_pretty.json": (
+            "journalctl -o json-pretty >/tmp/BMC_journalctl_pretty.json 2>&1"
+        ),
+        "BMC_dmesg.txt": "dmesg >/tmp/BMC_dmesg.txt 2>&1",
+        "BMC_procinfo.txt": "cat /proc/cpuinfo >/tmp/BMC_procinfo.txt 2>&1",
+        "BMC_meminfo.txt": "cat /proc/meminfo >/tmp/BMC_meminfo.txt 2>&1",
+        "BMC_systemd.txt": "systemctl status --all >/tmp/BMC_systemd.txt 2>&1",
+        "BMC_failed_service.txt": (
+            "systemctl list-units --failed >/tmp/BMC_failed_service.txt 2>&1"
+        ),
+        "BMC_list_service.txt": (
+            "systemctl list-jobs >/tmp/BMC_list_service.txt 2>&1"
+        ),
+        "BMC_obmc_console.txt": (
+            "cat /var/log/obmc-console.log >/tmp/BMC_obmc_console.txt 2>&1"
+        ),
+        "BMC_obmc_console1.txt": (
+            "cat /var/log/obmc-console1.log >/tmp/BMC_obmc_console1.txt 2>&1"
+        ),
+        "PEL_logs_list.json": "peltool -l >/tmp/PEL_logs_list.json 2>&1",
+        "PEL_logs_complete_list.json": (
+            "peltool -l -a -f >/tmp/PEL_logs_complete_list.json 2>&1"
+        ),
+        "PEL_logs_display.json": "peltool -a >/tmp/PEL_logs_display.json 2>&1",
+        "PEL_logs_complete_display.json": (
+            "peltool -a -f -h>/tmp/PEL_logs_complete_display.json 2>&1"
+        ),
+        "PEL_logs_badPEL.txt": "hexdump -C"
+        + " /var/lib/phosphor-logging/extensions/pels/badPEL>/tmp/PEL_logs_badPEL.txt"
+        " 2>&1",
+        "PLDM_fru_record.txt": (
+            "pldmtool fru getfrurecordtable>/tmp/PLDM_fru_record.txt 2>&1"
+        ),
+        "BMC_pldm_flight_recorder.txt": (
+            "rm -rf /tmp/pldm_flight_recorder; killall -s SIGUSR1 pldmd;"
+        )
+        + " sleep 5; cat /tmp/pldm_flight_recorder >"
+        " /tmp/BMC_pldm_flight_recorder.txt 2>&1;",
+        "OCC_state.txt": 'echo "OCC state check";for i in {0..3};'
+        + " do (echo /org/open_power/control/occ$i;"
+        + " busctl get-property org.open_power.OCC.Control"
+        " /org/open_power/control/occ$i"
+        + " org.open_power.OCC.Status OccActive) done > /tmp/OCC_state.txt"
+        " 2>&1",
+        "bmcweb_persistent_data.json": (
+            "cat /home/root/bmcweb_persistent_data.json"
+        )
+        + " > /tmp/bmcweb_persistent_data.json",
+        "GUARD_list.txt": "guard -l > /tmp/GUARD_list.txt 2>&1",
+        "fan_control_dump.json": "fanctl dump; sleep 5",
+        "DEVTREE": (
+            "cat /var/lib/phosphor-software-manager/pnor/rw/DEVTREE >"
+            " /tmp/DEVTREE 2>&1"
+        ),
     },
 }
 # Add file name and corresponding command needed for all Linux distributions
 FFDC_OS_ALL_DISTROS_FILE = {
-    'OS FILES':
-    {
+    "OS FILES": {
         # File Name         Command
-        'OS_msglog.txt': 'cat /sys/firmware/opal/msglog >/tmp/OS_msglog.txt 2>&1',
-        'OS_cpufrequency.txt': 'ppc64_cpu --frequency '
-        + '>/tmp/OS_cpufrequency.txt 2>&1',
-        'OS_dmesg.txt': 'dmesg >/tmp/OS_dmesg.txt 2>&1',
-        'OS_opal_prd.txt': 'cat /var/log/opal-prd* >/tmp/OS_opal_prd.txt 2>&1',
-        'OS_boot.txt': 'cat /var/log/boot.log >/tmp/OS_boot.txt 2>&1',
-        'OS_procinfo.txt': 'cat /proc/cpuinfo >/tmp/OS_procinfo.txt 2>&1',
-        'OS_meminfo.txt': 'cat /proc/meminfo >/tmp/OS_meminfo.txt 2>&1',
-        'OS_netstat.txt': 'netstat -a >/tmp/OS_netstat.txt 2>&1',
-        'OS_lspci.txt': 'lspci >/tmp/OS_lspci.txt 2>&1',
-        'OS_lscpu.txt': 'lscpu >/tmp/OS_lscpu.txt 2>&1',
-        'OS_lscfg.txt': 'lscfg >/tmp/OS_lscfg.txt 2>&1',
-        'OS_journalctl_nopager.txt': 'journalctl --no-pager -b '
-        + '> /tmp/OS_journalctl_nopager.txt  2>&1',
+        "OS_msglog.txt": (
+            "cat /sys/firmware/opal/msglog >/tmp/OS_msglog.txt 2>&1"
+        ),
+        "OS_cpufrequency.txt": "ppc64_cpu --frequency "
+        + ">/tmp/OS_cpufrequency.txt 2>&1",
+        "OS_dmesg.txt": "dmesg >/tmp/OS_dmesg.txt 2>&1",
+        "OS_opal_prd.txt": "cat /var/log/opal-prd* >/tmp/OS_opal_prd.txt 2>&1",
+        "OS_boot.txt": "cat /var/log/boot.log >/tmp/OS_boot.txt 2>&1",
+        "OS_procinfo.txt": "cat /proc/cpuinfo >/tmp/OS_procinfo.txt 2>&1",
+        "OS_meminfo.txt": "cat /proc/meminfo >/tmp/OS_meminfo.txt 2>&1",
+        "OS_netstat.txt": "netstat -a >/tmp/OS_netstat.txt 2>&1",
+        "OS_lspci.txt": "lspci >/tmp/OS_lspci.txt 2>&1",
+        "OS_lscpu.txt": "lscpu >/tmp/OS_lscpu.txt 2>&1",
+        "OS_lscfg.txt": "lscfg >/tmp/OS_lscfg.txt 2>&1",
+        "OS_journalctl_nopager.txt": "journalctl --no-pager -b "
+        + "> /tmp/OS_journalctl_nopager.txt  2>&1",
     },
 }
 # Add file name and corresponding command needed for Ubuntu Linux
 FFDC_OS_UBUNTU_FILE = {
-    'OS FILES':
-    {
+    "OS FILES": {
         # File Name         Command
-        'OS_isusb.txt': '{ lsusb -t ; lsusb -v ; } >/tmp/OS_isusb.txt 2>&1',
-        'OS_kern.txt': 'tail -n 50000 /var/log/kern.log >/tmp/OS_kern.txt 2>&1',
-        'OS_authlog.txt': '{ cat /var/log/auth.log; cat /var/log/auth.log.1 ; } '
-        + '>/tmp/OS_authlog.txt 2>&1',
-        'OS_syslog.txt': 'tail -n 200000 /var/log/syslog >/tmp/OS_syslog.txt 2>&1',
-        'OS_info.txt': '{ uname -a; dpkg -s opal-prd; dpkg -s ipmitool ; } '
-        + '>/tmp/OS_info.txt 2>&1',
-        'OS_sosreport.txt': '{ rm -rf /tmp/sosreport*FFDC* ; sosreport --batch --tmp-dir '
-        + '/tmp --ticket-number FFDC ; } >/tmp/OS_sosreport.txt 2>&1',
+        "OS_isusb.txt": "{ lsusb -t ; lsusb -v ; } >/tmp/OS_isusb.txt 2>&1",
+        "OS_kern.txt": (
+            "tail -n 50000 /var/log/kern.log >/tmp/OS_kern.txt 2>&1"
+        ),
+        "OS_authlog.txt": (
+            "{ cat /var/log/auth.log; cat /var/log/auth.log.1 ; } "
+        )
+        + ">/tmp/OS_authlog.txt 2>&1",
+        "OS_syslog.txt": (
+            "tail -n 200000 /var/log/syslog >/tmp/OS_syslog.txt 2>&1"
+        ),
+        "OS_info.txt": "{ uname -a; dpkg -s opal-prd; dpkg -s ipmitool ; } "
+        + ">/tmp/OS_info.txt 2>&1",
+        "OS_sosreport.txt": (
+            "{ rm -rf /tmp/sosreport*FFDC* ; sosreport --batch --tmp-dir "
+        )
+        + "/tmp --ticket-number FFDC ; } >/tmp/OS_sosreport.txt 2>&1",
     },
 }
 # Add file name and corresponding command needed for RHEL Linux
 FFDC_OS_RHEL_FILE = {
-    'OS FILES':
-    {
+    "OS FILES": {
         # File Name         Command
-        'OS_rsct.txt': '/usr/bin/ctversion -bv >/tmp/OS_rsct.txt 2>&1',
-        'OS_secure.txt': 'cat /var/log/secure >/tmp/OS_secure.txt 2>&1',
-        'OS_syslog.txt': 'tail -n 200000 /var/log/messages '
-        + '>/tmp/OS_syslog.txt 2>&1',
-        'OS_info.txt': '{ lsb_release -a; cat /etc/redhat-release; '
-        + 'uname -a; rpm -qa ; } >/tmp/OS_info.txt 2>&1',
-        'OS_sosreport.txt': '{ rm -rf /tmp/sosreport*FFDC* ; sosreport --batch --tmp-dir '
-        + '/tmp --label FFDC ; } >/tmp/OS_sosreport.txt 2>&1',
+        "OS_rsct.txt": "/usr/bin/ctversion -bv >/tmp/OS_rsct.txt 2>&1",
+        "OS_secure.txt": "cat /var/log/secure >/tmp/OS_secure.txt 2>&1",
+        "OS_syslog.txt": "tail -n 200000 /var/log/messages "
+        + ">/tmp/OS_syslog.txt 2>&1",
+        "OS_info.txt": "{ lsb_release -a; cat /etc/redhat-release; "
+        + "uname -a; rpm -qa ; } >/tmp/OS_info.txt 2>&1",
+        "OS_sosreport.txt": (
+            "{ rm -rf /tmp/sosreport*FFDC* ; sosreport --batch --tmp-dir "
+        )
+        + "/tmp --label FFDC ; } >/tmp/OS_sosreport.txt 2>&1",
     },
 }
 # Add file name and corresponding command needed for AIX.
 FFDC_OS_AIX_FILE = {
-    'OS FILES':
-    {
+    "OS FILES": {
         # File Name         Command
-        'OS_errpt.txt': 'errpt >/tmp/OS_errpt.txt 2>&1 ; errclear 0;',
-        'OS_processors.txt': 'bindprocessor -q >/tmp/OS_processors.txt 2>&1',
+        "OS_errpt.txt": "errpt >/tmp/OS_errpt.txt 2>&1 ; errclear 0;",
+        "OS_processors.txt": "bindprocessor -q >/tmp/OS_processors.txt 2>&1",
     },
 }
 
 try:
-    redfish_support_trans_state = os.environ.get('REDFISH_SUPPORT_TRANS_STATE', 0) or \
-        int(BuiltIn().get_variable_value("${REDFISH_SUPPORT_TRANS_STATE}", default=0))
+    redfish_support_trans_state = os.environ.get(
+        "REDFISH_SUPPORT_TRANS_STATE", 0
+    ) or int(
+        BuiltIn().get_variable_value(
+            "${REDFISH_SUPPORT_TRANS_STATE}", default=0
+        )
+    )
 except RobotNotRunningError:
     pass
 
-OPENBMC_BASE = '/xyz/openbmc_project/'
-OPENPOWER_BASE = '/org/open_power/'
-ENUMERATE_SENSORS = OPENBMC_BASE + 'sensors/enumerate'
-ENUMERATE_INVENTORY = OPENBMC_BASE + 'inventory/enumerate'
-ENUMERATE_ELOG = OPENBMC_BASE + 'logging/entry/enumerate'
-ENUMERATE_LED = OPENBMC_BASE + 'led/enumerate'
-ENUMERATE_SW = OPENBMC_BASE + 'software/enumerate'
-ENUMERATE_CONTROL = OPENBMC_BASE + 'control/enumerate'
-ENUMERATE_STATE = OPENBMC_BASE + 'state/enumerate'
-ENUMERATE_OCC = OPENPOWER_BASE + '/enumerate'
-ENUMERATE_DUMPS = OPENBMC_BASE + 'dumps/enumerate'
-ENUMERATE_USER = OPENBMC_BASE + 'user/enumerate'
+OPENBMC_BASE = "/xyz/openbmc_project/"
+OPENPOWER_BASE = "/org/open_power/"
+ENUMERATE_SENSORS = OPENBMC_BASE + "sensors/enumerate"
+ENUMERATE_INVENTORY = OPENBMC_BASE + "inventory/enumerate"
+ENUMERATE_ELOG = OPENBMC_BASE + "logging/entry/enumerate"
+ENUMERATE_LED = OPENBMC_BASE + "led/enumerate"
+ENUMERATE_SW = OPENBMC_BASE + "software/enumerate"
+ENUMERATE_CONTROL = OPENBMC_BASE + "control/enumerate"
+ENUMERATE_STATE = OPENBMC_BASE + "state/enumerate"
+ENUMERATE_OCC = OPENPOWER_BASE + "/enumerate"
+ENUMERATE_DUMPS = OPENBMC_BASE + "dumps/enumerate"
+ENUMERATE_USER = OPENBMC_BASE + "user/enumerate"
 
 # Add file name and corresponding Get Request
 FFDC_GET_REQUEST = {
-    'GET REQUESTS':
-    {
+    "GET REQUESTS": {
         # File Name         Command
-        'FIRMWARE_list.txt': ENUMERATE_SW,
-        'BMC_sensor_list.txt': ENUMERATE_SENSORS,
-        'BMC_control_list.txt': ENUMERATE_CONTROL,
-        'BMC_inventory.txt': ENUMERATE_INVENTORY,
-        'BMC_elog.txt': ENUMERATE_ELOG,
-        'BMC_led.txt': ENUMERATE_LED,
-        'BMC_state.txt': ENUMERATE_STATE,
-        'OCC_state.txt': ENUMERATE_OCC,
-        'BMC_dumps.txt': ENUMERATE_DUMPS,
-        'BMC_USER.txt': ENUMERATE_USER,
+        "FIRMWARE_list.txt": ENUMERATE_SW,
+        "BMC_sensor_list.txt": ENUMERATE_SENSORS,
+        "BMC_control_list.txt": ENUMERATE_CONTROL,
+        "BMC_inventory.txt": ENUMERATE_INVENTORY,
+        "BMC_elog.txt": ENUMERATE_ELOG,
+        "BMC_led.txt": ENUMERATE_LED,
+        "BMC_state.txt": ENUMERATE_STATE,
+        "OCC_state.txt": ENUMERATE_OCC,
+        "BMC_dumps.txt": ENUMERATE_DUMPS,
+        "BMC_USER.txt": ENUMERATE_USER,
     },
 }
 
@@ -178,61 +222,60 @@
     for key in list(FFDC_GET_REQUEST):
         del FFDC_GET_REQUEST[key]
 
-REDFISH_BASE = '/redfish/v1/'
-REDFISH_ELOG = REDFISH_BASE + 'Systems/system/LogServices/EventLog/Entries'
-REDFISH_FIRMWARE = REDFISH_BASE + 'UpdateService/FirmwareInventory'
+REDFISH_BASE = "/redfish/v1/"
+REDFISH_ELOG = REDFISH_BASE + "Systems/system/LogServices/EventLog/Entries"
+REDFISH_FIRMWARE = REDFISH_BASE + "UpdateService/FirmwareInventory"
 
 # Add file name and corresponding Get Request
 FFDC_GET_REDFISH_REQUEST = {
-    'GET REQUESTS':
-    {
+    "GET REQUESTS": {
         # File Name         Command
-        'BMC_redfish_elog.txt': REDFISH_ELOG,
+        "BMC_redfish_elog.txt": REDFISH_ELOG,
     },
 }
 
 # Define your keywords in method/utils and call here
 FFDC_METHOD_CALL = {
-    'BMC LOGS':
-    {
+    "BMC LOGS": {
         # Description               Keyword name
-        'Start ffdc cleanup': 'BMC FFDC Cleanup',
-        'FFDC Generic Report': 'BMC FFDC Manifest',
-        'BMC Specific Files': 'BMC FFDC Files',
-        'Get Request FFDC': 'BMC FFDC Get Requests',
-        'Get Redfish Request FFDC': 'BMC FFDC Get Redfish Requests',
-        'OS FFDC': 'OS FFDC Files',
-        'Core Files': 'SCP Coredump Files',
-        'SEL Log': 'Collect eSEL Log',
-        'Sys Inventory Files': 'System Inventory Files',
-        'Dump Files': 'SCP Dump Files',
-        'PEL Files': 'Collect PEL Log',
-        'Redfish Log': 'Enumerate Redfish Resources',
-        'Firmware Log': 'Enumerate Redfish Resources  '
-        + ' enum_uri=/redfish/v1/UpdateService/FirmwareInventory  '
-        + ' file_enum_name=redfish_FIRMWARE_list.txt',
-        'Redfish OEM Log': 'Enumerate Redfish OEM Resources',
-        'End ffdc cleanup': 'BMC FFDC Cleanup',
+        "Start ffdc cleanup": "BMC FFDC Cleanup",
+        "FFDC Generic Report": "BMC FFDC Manifest",
+        "BMC Specific Files": "BMC FFDC Files",
+        "Get Request FFDC": "BMC FFDC Get Requests",
+        "Get Redfish Request FFDC": "BMC FFDC Get Redfish Requests",
+        "OS FFDC": "OS FFDC Files",
+        "Core Files": "SCP Coredump Files",
+        "SEL Log": "Collect eSEL Log",
+        "Sys Inventory Files": "System Inventory Files",
+        "Dump Files": "SCP Dump Files",
+        "PEL Files": "Collect PEL Log",
+        "Redfish Log": "Enumerate Redfish Resources",
+        "Firmware Log": "Enumerate Redfish Resources  "
+        + " enum_uri=/redfish/v1/UpdateService/FirmwareInventory  "
+        + " file_enum_name=redfish_FIRMWARE_list.txt",
+        "Redfish OEM Log": "Enumerate Redfish OEM Resources",
+        "End ffdc cleanup": "BMC FFDC Cleanup",
     },
 }
 
 try:
-    platform_arch_type = os.environ.get('PLATFORM_ARCH_TYPE', '') or \
-        BuiltIn().get_variable_value("${PLATFORM_ARCH_TYPE}", default="power")
+    platform_arch_type = os.environ.get(
+        "PLATFORM_ARCH_TYPE", ""
+    ) or BuiltIn().get_variable_value("${PLATFORM_ARCH_TYPE}", default="power")
 except RobotNotRunningError:
     pass
 
 # Filter the logs based on platform type.
 if platform_arch_type == "x86":
-    del FFDC_BMC_FILE['BMC FILES']['PEL_logs_list.json']
-    del FFDC_BMC_FILE['BMC FILES']['PEL_logs_display.json']
-    del FFDC_METHOD_CALL['BMC LOGS']['PEL Files']
+    del FFDC_BMC_FILE["BMC FILES"]["PEL_logs_list.json"]
+    del FFDC_BMC_FILE["BMC FILES"]["PEL_logs_display.json"]
+    del FFDC_METHOD_CALL["BMC LOGS"]["PEL Files"]
 
 # -----------------------------------------------------------------
 # base class for FFDC default list
 
 
-class openbmc_ffdc_list():
+class openbmc_ffdc_list:
     def get_ffdc_bmc_cmd(self, i_type):
         r"""
         #######################################################################
@@ -318,8 +361,7 @@
         """
         return FFDC_METHOD_CALL.keys()
 
-    def get_ffdc_method_desc(self,
-                             index):
+    def get_ffdc_method_desc(self, index):
         r"""
         #######################################################################
         #   @brief   This method returns the just the keys from the dictionary.
@@ -383,7 +425,7 @@
         #   @return   Remove all special chars and return the string
         #######################################################################
         """
-        return ''.join(e for e in i_str if e.isalnum())
+        return "".join(e for e in i_str if e.isalnum())
 
     def get_esel_index(self, esel_list):
         r"""
@@ -393,7 +435,7 @@
         #   @return   Index of "ESEL=" in the list.
         #######################################################################
         """
-        index = [i for i, str in enumerate(esel_list) if 'ESEL=' in str]
+        index = [i for i, str in enumerate(esel_list) if "ESEL=" in str]
         return index[0]
 
     def get_dump_index(self, dump_list):
@@ -404,5 +446,5 @@
         #   @return   Index of "ESEL=" in the list.
         #######################################################################
         """
-        index = [i for i, str in enumerate(dump_list) if 'DUMP=' in str]
+        index = [i for i, str in enumerate(dump_list) if "DUMP=" in str]
         return index[0]
diff --git a/lib/openbmctool_utils.py b/lib/openbmctool_utils.py
index a6c94e9..dfe84e7 100755
--- a/lib/openbmctool_utils.py
+++ b/lib/openbmctool_utils.py
@@ -5,22 +5,21 @@
 openbmctool_execute_command.
 """
 
-import gen_print as gp
-import gen_cmd as gc
-import gen_valid as gv
-import gen_misc as gm
-import var_funcs as vf
-import utils as utils
-from robot.libraries.BuiltIn import BuiltIn
-import re
-import tempfile
 import collections
 import json
+import re
+import tempfile
+
+import gen_cmd as gc
+import gen_misc as gm
+import gen_print as gp
+import gen_valid as gv
+import utils as utils
+import var_funcs as vf
+from robot.libraries.BuiltIn import BuiltIn
 
 
-def openbmctool_execute_command(command_string,
-                                *args,
-                                **kwargs):
+def openbmctool_execute_command(command_string, *args, **kwargs):
     r"""
     Run the command string as an argument to the openbmctool.py program and
     return the stdout and the return code.
@@ -64,10 +63,12 @@
     # Get global BMC variable values.
     openbmc_host = BuiltIn().get_variable_value("${OPENBMC_HOST}", default="")
     https_port = BuiltIn().get_variable_value("${HTTPS_PORT}", default="443")
-    openbmc_username = BuiltIn().get_variable_value("${OPENBMC_USERNAME}",
-                                                    default="")
-    openbmc_password = BuiltIn().get_variable_value("${OPENBMC_PASSWORD}",
-                                                    default="")
+    openbmc_username = BuiltIn().get_variable_value(
+        "${OPENBMC_USERNAME}", default=""
+    )
+    openbmc_password = BuiltIn().get_variable_value(
+        "${OPENBMC_PASSWORD}", default=""
+    )
     if not gv.valid_value(openbmc_host):
         return "", "", 1
     if not gv.valid_value(openbmc_username):
@@ -81,24 +82,35 @@
     # example, the user may have specified "fru status | head -n 2" which
     # would be broken into 2 list elements.  We will also break on ">"
     # (re-direct).
-    pipeline = list(map(str.strip, re.split(r' ([\|>]) ',
-                        str(command_string))))
+    pipeline = list(
+        map(str.strip, re.split(r" ([\|>]) ", str(command_string)))
+    )
     # The "tail" command below prevents a "egrep: write error: Broken pipe"
     # error if the user is piping the output to a sub-process.
     # Use "egrep -v" to get rid of editorial output from openbmctool.py.
-    pipeline.insert(1, "| tail -n +1 | egrep -v 'Attempting login|User [^ ]+"
-                    " has been logged out'")
+    pipeline.insert(
+        1,
+        "| tail -n +1 | egrep -v 'Attempting login|User [^ ]+"
+        " has been logged out'",
+    )
 
-    command_string = "set -o pipefail ; python3 $(which openbmctool.py) -H "\
-        + openbmc_host + ":" + https_port + " -U " + openbmc_username + " -P " + openbmc_password\
-        + " " + " ".join(pipeline)
+    command_string = (
+        "set -o pipefail ; python3 $(which openbmctool.py) -H "
+        + openbmc_host
+        + ":"
+        + https_port
+        + " -U "
+        + openbmc_username
+        + " -P "
+        + openbmc_password
+        + " "
+        + " ".join(pipeline)
+    )
 
     return gc.shell_cmd(command_string, *args, **kwargs)
 
 
-def openbmctool_execute_command_json(command_string,
-                                     *args,
-                                     **kwargs):
+def openbmctool_execute_command_json(command_string, *args, **kwargs):
     r"""
     Run the command string as an argument to the openbmctool.py program, parse
     the JSON output into a dictionary and return the dictionary.
@@ -112,21 +124,19 @@
     See openbmctool_execute_command (above) for all field descriptions.
     """
 
-    rc, output = openbmctool_execute_command(command_string,
-                                             *args,
-                                             **kwargs)
+    rc, output = openbmctool_execute_command(command_string, *args, **kwargs)
     try:
         json_object = utils.to_json_ordered(output)
     except json.JSONDecodeError:
         BuiltIn().fail(gp.sprint_error(output))
 
-    if json_object['status'] != "ok":
+    if json_object["status"] != "ok":
         err_msg = "Error found in JSON data returned by the openbmctool.py "
         err_msg += "command. Expected a 'status' field value of \"ok\":\n"
         err_msg += gp.sprint_var(json_object, 1)
         BuiltIn().fail(gp.sprint_error(err_msg))
 
-    return json_object['data']
+    return json_object["data"]
 
 
 def get_fru_status():
@@ -155,8 +165,9 @@
         [functional]:            No
     ...
     """
-    rc, output = openbmctool_execute_command("fru status", print_output=False,
-                                             ignore_err=False)
+    rc, output = openbmctool_execute_command(
+        "fru status", print_output=False, ignore_err=False
+    )
     # Example value for output (partial):
     # Component     | Is a FRU  | Present  | Functional  | Has Logs
     # cpu0          | Yes       | Yes      | Yes         | No
@@ -234,8 +245,9 @@
                                     parsed into a list of dictionaries.
     """
 
-    rc, output = openbmctool_execute_command("fru print", print_output=False,
-                                             ignore_err=False)
+    rc, output = openbmctool_execute_command(
+        "fru print", print_output=False, ignore_err=False
+    )
     if parse_json:
         return gm.json_loads_multiple(output)
     else:
@@ -305,8 +317,9 @@
                                     parsed into a list of dictionaries.
     """
 
-    rc, output = openbmctool_execute_command("fru list", print_output=False,
-                                             ignore_err=False)
+    rc, output = openbmctool_execute_command(
+        "fru list", print_output=False, ignore_err=False
+    )
     if parse_json:
         return gm.json_loads_multiple(output)
     else:
@@ -314,7 +327,6 @@
 
 
 def get_sensors_print():
-
     r"""
     Get the output of the sensors print command and return as a list of
     dictionaries.
@@ -341,9 +353,9 @@
         [target]:                Active
     ...
     """
-    rc, output = openbmctool_execute_command("sensors print",
-                                             print_output=False,
-                                             ignore_err=False)
+    rc, output = openbmctool_execute_command(
+        "sensors print", print_output=False, ignore_err=False
+    )
     # Example value for output (partial):
     # sensor                 | type         | units     | value    | target
     # OCC0                   | Discrete     | N/A       | Active   | Active
@@ -353,7 +365,6 @@
 
 
 def get_sensors_list():
-
     r"""
     Get the output of the sensors list command and return as a list of
     dictionaries.
@@ -380,9 +391,9 @@
         [target]:                Active
     ...
     """
-    rc, output = openbmctool_execute_command("sensors list",
-                                             print_output=False,
-                                             ignore_err=False)
+    rc, output = openbmctool_execute_command(
+        "sensors list", print_output=False, ignore_err=False
+    )
     # Example value for output (partial):
     # sensor                 | type         | units     | value    | target
     # OCC0                   | Discrete     | N/A       | Active   | Active
@@ -402,9 +413,9 @@
     Example result (excerpt):
     openbmctool_version:         1.06
     """
-    rc, output = openbmctool_execute_command("-V | cut -f 2 -d ' '",
-                                             print_output=False,
-                                             ignore_err=False)
+    rc, output = openbmctool_execute_command(
+        "-V | cut -f 2 -d ' '", print_output=False, ignore_err=False
+    )
     return output
 
 
@@ -414,15 +425,14 @@
     the collect_service_data command.
     """
 
-    return\
-        [
-            "inventory.txt",
-            "sensorReadings.txt",
-            "ledStatus.txt",
-            "SELshortlist.txt",
-            "parsedSELs.txt",
-            "bmcFullRaw.txt"
-        ]
+    return [
+        "inventory.txt",
+        "sensorReadings.txt",
+        "ledStatus.txt",
+        "SELshortlist.txt",
+        "parsedSELs.txt",
+        "bmcFullRaw.txt",
+    ]
 
 
 def collect_service_data(verify=False):
@@ -439,32 +449,41 @@
     # Route the output of collect_service_data to a file for easier parsing.
     temp = tempfile.NamedTemporaryFile()
     temp_file_path = temp.name
-    openbmctool_execute_command("collect_service_data > " + temp_file_path,
-                                ignore_err=False)
+    openbmctool_execute_command(
+        "collect_service_data > " + temp_file_path, ignore_err=False
+    )
     # Isolate the file paths in the collect_service_data output.  We're
     # looking for output lines like this from which to extract the file paths:
     # Inventory collected and stored in /tmp/dummy--2018-09-26_17.59.18/inventory.txt
-    rc, file_paths = gc.shell_cmd("egrep 'collected and' " + temp_file_path
-                                  # + " | sed -re 's#.*/tmp#/tmp#g'",
-                                  + " | sed -re 's#[^/]*/#/#'",
-                                  quiet=1, print_output=0)
+    rc, file_paths = gc.shell_cmd(
+        "egrep 'collected and' " + temp_file_path
+        # + " | sed -re 's#.*/tmp#/tmp#g'",
+        + " | sed -re 's#[^/]*/#/#'",
+        quiet=1,
+        print_output=0,
+    )
     # Example file_paths value:
     # /tmp/dummy--2018-09-26_17.59.18/inventory.txt
     # /tmp/dummy--2018-09-26_17.59.18/sensorReadings.txt
     # etc.
     # Convert from output to list.
-    collect_service_data_file_paths =\
-        list(filter(None, file_paths.split("\n")))
+    collect_service_data_file_paths = list(
+        filter(None, file_paths.split("\n"))
+    )
     if int(verify):
         # Create a list of files by stripping the dir names from the elements
         # of collect_service_data_file_paths.
-        files_obtained = [re.sub(r".*/", "", file_path)
-                          for file_path in collect_service_data_file_paths]
+        files_obtained = [
+            re.sub(r".*/", "", file_path)
+            for file_path in collect_service_data_file_paths
+        ]
         files_expected = service_data_files()
         files_missing = list(set(files_expected) - set(files_obtained))
         if len(files_missing) > 0:
-            gp.printn("collect_service_data output:\n"
-                      + gm.file_to_str(temp_file_path))
+            gp.printn(
+                "collect_service_data output:\n"
+                + gm.file_to_str(temp_file_path)
+            )
             err_msg = "The following files are missing from the list of files"
             err_msg += " returned by collect_service_data:\n"
             err_msg += gp.sprint_var(files_missing)
@@ -479,11 +498,7 @@
     Return a complete list of field names returned by the health_check command.
     """
 
-    return\
-        [
-            "hardware_status",
-            "performance"
-        ]
+    return ["hardware_status", "performance"]
 
 
 def get_health_check(verify=False):
@@ -507,9 +522,9 @@
                                     health_check command.
     """
 
-    rc, output = openbmctool_execute_command("health_check",
-                                             print_output=False,
-                                             ignore_err=False)
+    rc, output = openbmctool_execute_command(
+        "health_check", print_output=False, ignore_err=False
+    )
     health_check = vf.key_value_outbuf_to_dict(output, delim=":")
     if int(verify):
         err_msg = gv.valid_dict(health_check, health_check_fields())
@@ -525,11 +540,7 @@
     remote_logging view command.
     """
 
-    return\
-        [
-            "Address",
-            "Port"
-        ]
+    return ["Address", "Port"]
 
 
 def get_remote_logging_view(verify=False):
@@ -554,14 +565,14 @@
                                     remote_logging view' command.
     """
 
-    remote_logging_view =\
-        openbmctool_execute_command_json("logging remote_logging view",
-                                         print_output=False,
-                                         ignore_err=False)
+    remote_logging_view = openbmctool_execute_command_json(
+        "logging remote_logging view", print_output=False, ignore_err=False
+    )
 
     if int(verify):
-        err_msg = gv.valid_dict(remote_logging_view,
-                                remote_logging_view_fields())
+        err_msg = gv.valid_dict(
+            remote_logging_view, remote_logging_view_fields()
+        )
         if err_msg != "":
             BuiltIn().fail(gp.sprint_error(err_msg))
 
@@ -604,8 +615,9 @@
     else:
         new_options = options
 
-    command_string = gc.create_command_string('network ' + sub_command,
-                                              new_options)
-    return openbmctool_execute_command_json(command_string,
-                                            print_output=False,
-                                            ignore_err=False)
+    command_string = gc.create_command_string(
+        "network " + sub_command, new_options
+    )
+    return openbmctool_execute_command_json(
+        command_string, print_output=False, ignore_err=False
+    )
diff --git a/lib/pel_utils.py b/lib/pel_utils.py
index b06124c..50eefd3 100644
--- a/lib/pel_utils.py
+++ b/lib/pel_utils.py
@@ -4,13 +4,13 @@
 PEL functions.
 """
 
-import func_args as fa
-import bmc_ssh_utils as bsu
-import pel_variables
-
 import json
 import os
 import sys
+
+import bmc_ssh_utils as bsu
+import func_args as fa
+import pel_variables
 from robot.libraries.BuiltIn import BuiltIn
 
 base_path = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
@@ -56,7 +56,9 @@
     """
 
     bsu_options = fa.args_to_objects(bsu_options)
-    out_buf, stderr, rc = bsu.bmc_execute_command('peltool ' + option_string, **bsu_options)
+    out_buf, stderr, rc = bsu.bmc_execute_command(
+        "peltool " + option_string, **bsu_options
+    )
     if parse_json:
         try:
             return json.loads(out_buf)
@@ -65,8 +67,9 @@
     return out_buf
 
 
-def get_pel_data_from_bmc(include_hidden_pels=False,
-                          include_informational_pels=False):
+def get_pel_data_from_bmc(
+    include_hidden_pels=False, include_informational_pels=False
+):
     r"""
     Returns PEL data from BMC else throws exception.
 
@@ -109,13 +112,19 @@
         pel_id_list = pel_data.keys()
         for pel_id in pel_id_list:
             # Check if required SRC ID with severity is present
-            if ((pel_data[pel_id]["SRC"] == src_id) and (pel_data[pel_id]["Sev"] == severity)):
+            if (pel_data[pel_id]["SRC"] == src_id) and (
+                pel_data[pel_id]["Sev"] == severity
+            ):
                 src_pel_ids.append(pel_id)
 
         if not src_pel_ids:
-            raise peltool_exception(src_id + " with severity " + severity + " not present")
+            raise peltool_exception(
+                src_id + " with severity " + severity + " not present"
+            )
     except Exception as e:
-        raise peltool_exception("Failed to fetch PEL ID for required SRC : " + str(e))
+        raise peltool_exception(
+            "Failed to fetch PEL ID for required SRC : " + str(e)
+        )
     return src_pel_ids
 
 
@@ -139,7 +148,9 @@
     return src_id
 
 
-def check_for_unexpected_src(unexpected_src_list=[], include_hidden_pels=False):
+def check_for_unexpected_src(
+    unexpected_src_list=[], include_hidden_pels=False
+):
     r"""
     From the given unexpected SRC list, check if any unexpected SRC created
     on the BMC. Returns 0 if no SRC found else throws exception.
@@ -160,11 +171,13 @@
             if src in src_data:
                 print("Found an unexpected SRC : " + src)
                 unexpected_src_count = unexpected_src_count + 1
-        if (unexpected_src_count >= 1):
+        if unexpected_src_count >= 1:
             raise peltool_exception("Unexpected SRC found.")
 
     except Exception as e:
-        raise peltool_exception("Failed to verify unexpected SRC list : " + str(e))
+        raise peltool_exception(
+            "Failed to verify unexpected SRC list : " + str(e)
+        )
     return unexpected_src_count
 
 
diff --git a/lib/pldm_utils.py b/lib/pldm_utils.py
index 35fe929..81e53fe 100755
--- a/lib/pldm_utils.py
+++ b/lib/pldm_utils.py
@@ -4,18 +4,18 @@
 PLDM functions.
 """
 
-import re
-import var_funcs as vf
-import func_args as fa
-import bmc_ssh_utils as bsu
 import json
 import random
+import re
 import string
+
+import bmc_ssh_utils as bsu
+import func_args as fa
+import var_funcs as vf
 from robot.api import logger
 
 
 def pldmtool(option_string, **bsu_options):
-
     r"""
     Run pldmtool on the BMC with the caller's option string and return the result.
 
@@ -41,7 +41,9 @@
     # This allows callers to specify arguments in python style (e.g. print_out=1 vs. print_out=${1}).
     bsu_options = fa.args_to_objects(bsu_options)
 
-    stdout, stderr, rc = bsu.bmc_execute_command('pldmtool ' + option_string, **bsu_options)
+    stdout, stderr, rc = bsu.bmc_execute_command(
+        "pldmtool " + option_string, **bsu_options
+    )
     if stderr:
         return stderr
     try:
@@ -51,7 +53,6 @@
 
 
 def GetBIOSEnumAttributeOptionalValues(attr_val_table_data):
-
     """
     From pldmtool GetBIOSTable of type AttributeValueTable get the dict of
     attribute handle and its optional values for BIOS Enumeration type.
@@ -77,27 +78,30 @@
     attr_val_data_dict = {}
     for item in attr_val_table_data:
         for attr in item:
-            if (attr == "NumberOfPossibleValues"):
+            if attr == "NumberOfPossibleValues":
                 value_list = []
                 for i in range(0, int(item[attr])):
-                    attr_values = item["PossibleValueStringHandle[" + str(i) + "]"]
-                    value = re.search(r'\((.*?)\)', attr_values).group(1)
+                    attr_values = item[
+                        "PossibleValueStringHandle[" + str(i) + "]"
+                    ]
+                    value = re.search(r"\((.*?)\)", attr_values).group(1)
                     if value:
                         # Example:
                         # value = '"Power Off"'
-                        if ' ' in value:
+                        if " " in value:
                             value = '"' + value + '"'
                         value_list.append(value)
                     else:
-                        value_list.append('')
+                        value_list.append("")
 
-                attr_handle = re.findall(r'\(.*?\)', item["AttributeNameHandle"])
+                attr_handle = re.findall(
+                    r"\(.*?\)", item["AttributeNameHandle"]
+                )
                 attr_val_data_dict[attr_handle[0][1:-1]] = value_list
     return attr_val_data_dict
 
 
 def GetBIOSStrAndIntAttributeHandles(attr_type, attr_val_table_data):
-
     """
     From pldmtool GetBIOSTable of type AttributeValueTable get the dict of
     attribute handle and its values based on the attribute type.
@@ -113,28 +117,27 @@
     attr_val_str_dict = {}
     for item in attr_val_table_data:
         value_dict = {}
-        attr_handle = re.findall(r'\(.*?\)', item["AttributeNameHandle"])
+        attr_handle = re.findall(r"\(.*?\)", item["AttributeNameHandle"])
         # Example:
         # {'vmi_if0_ipv4_prefix_length': {'UpperBound': 32, 'LowerBound': 0}
-        if (item["AttributeType"] == "BIOSInteger"):
+        if item["AttributeType"] == "BIOSInteger":
             value_dict["LowerBound"] = item["LowerBound"]
             value_dict["UpperBound"] = item["UpperBound"]
             attr_val_int_dict[attr_handle[0][1:-1]] = value_dict
         # Example:
         # {'vmi_if1_ipv4_ipaddr': {'MaximumStringLength': 15, 'MinimumStringLength': 7}}
-        elif (item["AttributeType"] == "BIOSString"):
+        elif item["AttributeType"] == "BIOSString":
             value_dict["MinimumStringLength"] = item["MinimumStringLength"]
             value_dict["MaximumStringLength"] = item["MaximumStringLength"]
             attr_val_str_dict[attr_handle[0][1:-1]] = value_dict
 
-    if (attr_type == "BIOSInteger"):
+    if attr_type == "BIOSInteger":
         return attr_val_int_dict
-    elif (attr_type == "BIOSString"):
+    elif attr_type == "BIOSString":
         return attr_val_str_dict
 
 
 def GetRandomBIOSIntAndStrValues(attr_name, count):
-
     """
     Get random integer or string values for BIOS attribute values based on the count.
 
@@ -146,27 +149,35 @@
                             or string.
 
     """
-    attr_random_value = ''
+    attr_random_value = ""
 
     # Example
     # 12.13.14.15
-    if 'gateway' in attr_name:
-        attr_random_value = ".".join(map(str, (random.randint(0, 255) for _ in range(4))))
+    if "gateway" in attr_name:
+        attr_random_value = ".".join(
+            map(str, (random.randint(0, 255) for _ in range(4)))
+        )
     # Example
     # 11.11.11.11
-    elif 'ipaddr' in attr_name:
-        attr_random_value = ".".join(map(str, (random.randint(0, 255) for _ in range(4))))
+    elif "ipaddr" in attr_name:
+        attr_random_value = ".".join(
+            map(str, (random.randint(0, 255) for _ in range(4)))
+        )
     # Example
     # E5YWEDWJJ
-    elif 'name' in attr_name:
+    elif "name" in attr_name:
         data = string.ascii_uppercase + string.digits
-        attr_random_value = ''.join(random.choice(data) for _ in range(int(count)))
+        attr_random_value = "".join(
+            random.choice(data) for _ in range(int(count))
+        )
 
-    elif 'mfg_flags' in attr_name:
+    elif "mfg_flags" in attr_name:
         data = string.ascii_uppercase + string.digits
-        attr_random_value = ''.join(random.choice(data) for _ in range(int(count)))
+        attr_random_value = "".join(
+            random.choice(data) for _ in range(int(count))
+        )
 
-    elif 'hb_lid_ids' in attr_name:
+    elif "hb_lid_ids" in attr_name:
         attr_random_value = str(random.randint(0, int(count)))
 
     else:
@@ -175,7 +186,6 @@
 
 
 def GetBIOSAttrOriginalValues(attr_val_table_data):
-
     """
     From pldmtool GetBIOSTable of type AttributeValueTable get the dict of
     attribute handle and its values.
@@ -188,23 +198,22 @@
     """
     attr_val_data_dict = {}
     for item in attr_val_table_data:
-        attr_handle = re.findall(r'\(.*?\)', item["AttributeNameHandle"])
+        attr_handle = re.findall(r"\(.*?\)", item["AttributeNameHandle"])
         attr_name = attr_handle[0][1:-1]
 
         command = "bios GetBIOSAttributeCurrentValueByHandle -a " + attr_name
         value = pldmtool(command)
         attr_val_data_dict[attr_name] = value["CurrentValue"]
         if not value["CurrentValue"]:
-            if 'name' in attr_name:
+            if "name" in attr_name:
                 attr_val_data_dict[attr_name] = '""'
-            elif 'hb_lid_ids' in attr_name:
+            elif "hb_lid_ids" in attr_name:
                 attr_val_data_dict[attr_name] = '""'
 
     return attr_val_data_dict
 
 
 def GetBIOSAttrDefaultValues(attr_val_table_data):
-
     """
     From pldmtool GetBIOSTable of type AttributeValueTable get the dict of
     attribute handle and its default attribute values.
@@ -217,27 +226,26 @@
     """
     attr_val_data_dict = {}
     for item in attr_val_table_data:
-        attr_handle = re.findall(r'\(.*?\)', item["AttributeNameHandle"])
+        attr_handle = re.findall(r"\(.*?\)", item["AttributeNameHandle"])
         attr_name = attr_handle[0][1:-1]
 
         if "DefaultString" in item:
             attr_val_data_dict[attr_name] = item["DefaultString"]
             if not item["DefaultString"]:
-                if 'name' in attr_name:
+                if "name" in attr_name:
                     attr_val_data_dict[attr_name] = '""'
-                elif 'hb_lid_ids' in attr_name:
+                elif "hb_lid_ids" in attr_name:
                     attr_val_data_dict[attr_name] = '""'
         elif "DefaultValue" in item:
             attr_val_data_dict[attr_name] = item["DefaultValue"]
         elif "StringHandle" in item:
-            attr_default_value = re.findall(r'\(.*?\)', item["StringHandle"])
+            attr_default_value = re.findall(r"\(.*?\)", item["StringHandle"])
             attr_val_data_dict[attr_name] = attr_default_value[0][1:-1]
 
     return attr_val_data_dict
 
 
 def GetNewValuesForAllBIOSAttrs(attr_table_data):
-
     """
     Get a new set of values for all attributes in Attribute Table.
 
@@ -249,9 +257,13 @@
     """
     existing_data = GetBIOSAttrOriginalValues(attr_table_data)
     logger.info(existing_data)
-    string_attr_data = GetBIOSStrAndIntAttributeHandles("BIOSString", attr_table_data)
+    string_attr_data = GetBIOSStrAndIntAttributeHandles(
+        "BIOSString", attr_table_data
+    )
     logger.info(string_attr_data)
-    int_attr_data = GetBIOSStrAndIntAttributeHandles("BIOSInteger", attr_table_data)
+    int_attr_data = GetBIOSStrAndIntAttributeHandles(
+        "BIOSInteger", attr_table_data
+    )
     logger.info(int_attr_data)
     enum_attr_data = GetBIOSEnumAttributeOptionalValues(attr_table_data)
     logger.info(enum_attr_data)
@@ -268,8 +280,12 @@
                 data = '"' + str(existing_data[attr]) + '"'
                 temp_list[attr].remove(data)
             except ValueError:
-                logger.info("Unable to remove the existing value "
-                            + str(data) + " from list " + str(temp_list[attr]))
+                logger.info(
+                    "Unable to remove the existing value "
+                    + str(data)
+                    + " from list "
+                    + str(temp_list[attr])
+                )
         valid_values = temp_list[attr][:]
         value = random.choice(valid_values)
         attr_random_data[attr] = value.strip('"')
@@ -279,7 +295,9 @@
         # Iterating to make sure we have a different value
         # other than the existing value.
         for iter in range(5):
-            random_val = GetRandomBIOSIntAndStrValues(attr, string_attr_data[attr]["MaximumStringLength"])
+            random_val = GetRandomBIOSIntAndStrValues(
+                attr, string_attr_data[attr]["MaximumStringLength"]
+            )
             if random_val != existing_data[attr]:
                 break
         attr_random_data[attr] = random_val.strip('"')
@@ -287,7 +305,9 @@
 
     for attr in int_attr_data:
         for iter in range(5):
-            random_val = GetRandomBIOSIntAndStrValues(attr, int_attr_data[attr]["UpperBound"])
+            random_val = GetRandomBIOSIntAndStrValues(
+                attr, int_attr_data[attr]["UpperBound"]
+            )
             if random_val != existing_data[attr]:
                 break
         attr_random_data[attr] = random_val
diff --git a/lib/pythonutil.py b/lib/pythonutil.py
index 3fd6ffb..bf5e1a4 100644
--- a/lib/pythonutil.py
+++ b/lib/pythonutil.py
@@ -5,7 +5,7 @@
 def calcDottedNetmask(mask):
     bits = 0
     for i in xrange(32 - mask, 32):
-        bits |= (1 << i)
-    packed_value = pack('!I', bits)
+        bits |= 1 << i
+    packed_value = pack("!I", bits)
     addr = inet_ntoa(packed_value)
     return addr
diff --git a/lib/ras/variables.py b/lib/ras/variables.py
index 4525ef3..e0369e7 100644
--- a/lib/ras/variables.py
+++ b/lib/ras/variables.py
@@ -1,4 +1,3 @@
-
 r"""
 Signature description in error log corresponding to error injection.
 """
@@ -48,41 +47,39 @@
 #     - field2: chip address.
 #     - field3: Error log signature description.
 
-ERROR_INJECT_DICT = {'MCACALIFIR_RECV1': ['07010900', '8000000000000000',
-                                          DES_MCA_RECV1],
-                     'MCACALIFIR_RECV32': ['07010900', '2000000000000000',
-                                           DES_MCA_RECV32],
-                     'MCACALIFIR_UE': ['07010900', '0020000000000000', DES_MCA_UE],
-                     'MCI_RECV1': ['05010800', '8000000000000000', DES_MCI_RECV1],
-                     'MCI_UE': ['05010800', '4000000000000000', DES_MCI_UE],
-                     'NX_RECV1': ['02011100', '0004000000000000', DES_NX_RECV1],
-                     'NX_UE': ['02011100', '0400000000000000', DES_NX_UE],
-                     'NX_RECV32': ['02011100', '0800000000000000', DES_NX_RECV32],
-                     'CXA_RECV5': ['02010800', '0000000020000000', DES_CXA_RECV5],
-                     'CXA_RECV32': ['02010800', '2000000000000000', DES_CXA_RECV32],
-                     'CXA_UE': ['02010800', '4000000000000000', DES_CXA_UE],
-                     'OBUS_RECV32': ['0904000a', '8000000000000000', DES_OBUS_RECV32],
-                     'NPU0_RECV32': ['05013C00', '0004000000000000', DES_NPU0_RECV32],
-                     'L2FIR_RECV1': ['10010800', '0080000000000000', DES_L2_RECV1],
-                     'L2FIR_RECV32': ['10010800', '0200000000000000', DES_L2_RECV32],
-                     'L2FIR_UE': ['10010800', '0040000000000000', DES_L2_UE],
-                     'L3FIR_RECV1': ['10011800', '0000400000000000', DES_L3_RECV1],
-                     'L3FIR_RECV32': ['10011800', '0100000000000000', DES_L3_RECV32],
-                     'L3FIR_UE': ['10011800', '0000800000000000', DES_L3_UE],
-                     'OCCFIR_RECV1': ['01010800', '0000000000040000', DES_OCC_RECV1],
-                     'CMEFIR_RECV1': ['10012000', '0100000000000000', DES_CME_RECV1],
-                     'EQFIR_RECV32': ['1004000A', '8000000000000000', DES_EQ_RECV32],
-                     'NCUFIR_RECV1': ['10011400', '0080000000000000', DES_NCU_RECV1],
-                     'NCUFIR_UE': ['10011400', '8000000000000000', DES_NCU_UE],
-                     'COREFIR_RECV5': ['20010A40', '8000000000000000', DES_CORE_RECV5],
-                     'COREFIR_RECV1': ['20010A40', '0000000200000000', DES_CORE_RECV1],
-                     'COREFIR_UE': ['20010A40', '4000000000000000', DES_CORE_UE],
-
-                     }
+ERROR_INJECT_DICT = {
+    "MCACALIFIR_RECV1": ["07010900", "8000000000000000", DES_MCA_RECV1],
+    "MCACALIFIR_RECV32": ["07010900", "2000000000000000", DES_MCA_RECV32],
+    "MCACALIFIR_UE": ["07010900", "0020000000000000", DES_MCA_UE],
+    "MCI_RECV1": ["05010800", "8000000000000000", DES_MCI_RECV1],
+    "MCI_UE": ["05010800", "4000000000000000", DES_MCI_UE],
+    "NX_RECV1": ["02011100", "0004000000000000", DES_NX_RECV1],
+    "NX_UE": ["02011100", "0400000000000000", DES_NX_UE],
+    "NX_RECV32": ["02011100", "0800000000000000", DES_NX_RECV32],
+    "CXA_RECV5": ["02010800", "0000000020000000", DES_CXA_RECV5],
+    "CXA_RECV32": ["02010800", "2000000000000000", DES_CXA_RECV32],
+    "CXA_UE": ["02010800", "4000000000000000", DES_CXA_UE],
+    "OBUS_RECV32": ["0904000a", "8000000000000000", DES_OBUS_RECV32],
+    "NPU0_RECV32": ["05013C00", "0004000000000000", DES_NPU0_RECV32],
+    "L2FIR_RECV1": ["10010800", "0080000000000000", DES_L2_RECV1],
+    "L2FIR_RECV32": ["10010800", "0200000000000000", DES_L2_RECV32],
+    "L2FIR_UE": ["10010800", "0040000000000000", DES_L2_UE],
+    "L3FIR_RECV1": ["10011800", "0000400000000000", DES_L3_RECV1],
+    "L3FIR_RECV32": ["10011800", "0100000000000000", DES_L3_RECV32],
+    "L3FIR_UE": ["10011800", "0000800000000000", DES_L3_UE],
+    "OCCFIR_RECV1": ["01010800", "0000000000040000", DES_OCC_RECV1],
+    "CMEFIR_RECV1": ["10012000", "0100000000000000", DES_CME_RECV1],
+    "EQFIR_RECV32": ["1004000A", "8000000000000000", DES_EQ_RECV32],
+    "NCUFIR_RECV1": ["10011400", "0080000000000000", DES_NCU_RECV1],
+    "NCUFIR_UE": ["10011400", "8000000000000000", DES_NCU_UE],
+    "COREFIR_RECV5": ["20010A40", "8000000000000000", DES_CORE_RECV5],
+    "COREFIR_RECV1": ["20010A40", "0000000200000000", DES_CORE_RECV1],
+    "COREFIR_UE": ["20010A40", "4000000000000000", DES_CORE_UE],
+}
 
 # Address translation files
-probe_cpu_file_path = '/root/probe_cpus.sh'
-addr_translation_file_path = '/root/scom_addr_p9.sh'
+probe_cpu_file_path = "/root/probe_cpus.sh"
+addr_translation_file_path = "/root/scom_addr_p9.sh"
 
 cfam_address = "2801"
 mem_address = "8208000"
diff --git a/lib/redfish_plus.py b/lib/redfish_plus.py
index e2125ca..2cc7531 100755
--- a/lib/redfish_plus.py
+++ b/lib/redfish_plus.py
@@ -4,13 +4,13 @@
 See redfish_plus class prolog below for details.
 """
 
-from redfish.rest.v1 import HttpClient
-import gen_print as gp
-import func_args as fa
-import requests
 import json
-from robot.libraries.BuiltIn import BuiltIn
 
+import func_args as fa
+import gen_print as gp
+import requests
+from redfish.rest.v1 import HttpClient
+from robot.libraries.BuiltIn import BuiltIn
 
 host = BuiltIn().get_variable_value("${OPENBMC_HOST}")
 MTLS_ENABLED = BuiltIn().get_variable_value("${MTLS_ENABLED}")
@@ -55,7 +55,7 @@
         - Easily used from robot programs.
     """
 
-    ROBOT_LIBRARY_SCOPE = 'TEST SUITE'
+    ROBOT_LIBRARY_SCOPE = "TEST SUITE"
 
     def rest_request(self, func, *args, **kwargs):
         r"""
@@ -115,74 +115,75 @@
         # Convert python string object definitions to objects (mostly useful for robot callers).
         args = fa.args_to_objects(args)
         kwargs = fa.args_to_objects(kwargs)
-        timeout = kwargs.pop('timeout', 30)
+        timeout = kwargs.pop("timeout", 30)
         self._timeout = timeout
-        max_retry = kwargs.pop('max_retry', 10)
+        max_retry = kwargs.pop("max_retry", 10)
         self._max_retry = max_retry
-        valid_status_codes = kwargs.pop('valid_status_codes', [200])
+        valid_status_codes = kwargs.pop("valid_status_codes", [200])
         response = func(*args, **kwargs)
         valid_http_status_code(response.status, valid_status_codes)
         return response
 
     # Define rest function wrappers.
     def get(self, *args, **kwargs):
-
-        if MTLS_ENABLED == 'True':
+        if MTLS_ENABLED == "True":
             return self.rest_request(self.get_with_mtls, *args, **kwargs)
         else:
-            return self.rest_request(super(redfish_plus, self).get, *args,
-                                     **kwargs)
+            return self.rest_request(
+                super(redfish_plus, self).get, *args, **kwargs
+            )
 
     def head(self, *args, **kwargs):
-
-        if MTLS_ENABLED == 'True':
+        if MTLS_ENABLED == "True":
             return self.rest_request(self.head_with_mtls, *args, **kwargs)
         else:
-            return self.rest_request(super(redfish_plus, self).head, *args,
-                                     **kwargs)
+            return self.rest_request(
+                super(redfish_plus, self).head, *args, **kwargs
+            )
 
     def post(self, *args, **kwargs):
-
-        if MTLS_ENABLED == 'True':
+        if MTLS_ENABLED == "True":
             return self.rest_request(self.post_with_mtls, *args, **kwargs)
         else:
-            return self.rest_request(super(redfish_plus, self).post, *args,
-                                     **kwargs)
+            return self.rest_request(
+                super(redfish_plus, self).post, *args, **kwargs
+            )
 
     def put(self, *args, **kwargs):
-
-        if MTLS_ENABLED == 'True':
+        if MTLS_ENABLED == "True":
             return self.rest_request(self.put_with_mtls, *args, **kwargs)
         else:
-            return self.rest_request(super(redfish_plus, self).put, *args,
-                                     **kwargs)
+            return self.rest_request(
+                super(redfish_plus, self).put, *args, **kwargs
+            )
 
     def patch(self, *args, **kwargs):
-
-        if MTLS_ENABLED == 'True':
+        if MTLS_ENABLED == "True":
             return self.rest_request(self.patch_with_mtls, *args, **kwargs)
         else:
-            return self.rest_request(super(redfish_plus, self).patch, *args,
-                                     **kwargs)
+            return self.rest_request(
+                super(redfish_plus, self).patch, *args, **kwargs
+            )
 
     def delete(self, *args, **kwargs):
-
-        if MTLS_ENABLED == 'True':
+        if MTLS_ENABLED == "True":
             return self.rest_request(self.delete_with_mtls, *args, **kwargs)
         else:
-            return self.rest_request(super(redfish_plus, self).delete, *args,
-                                     **kwargs)
+            return self.rest_request(
+                super(redfish_plus, self).delete, *args, **kwargs
+            )
 
     def __del__(self):
         del self
 
     def get_with_mtls(self, *args, **kwargs):
-
-        cert_dict = kwargs.pop('certificate', {"certificate_name": VALID_CERT})
-        response = requests.get(url='https://' + host + args[0],
-                                cert=CERT_DIR_PATH + '/' + cert_dict['certificate_name'],
-                                verify=False,
-                                headers={"Cache-Control": "no-cache"})
+        cert_dict = kwargs.pop("certificate", {"certificate_name": VALID_CERT})
+        response = requests.get(
+            url="https://" + host + args[0],
+            cert=CERT_DIR_PATH + "/" + cert_dict["certificate_name"],
+            verify=False,
+            headers={"Cache-Control": "no-cache"},
+        )
 
         response.status = response.status_code
         if response.status == 200:
@@ -191,68 +192,73 @@
         return response
 
     def post_with_mtls(self, *args, **kwargs):
-
-        cert_dict = kwargs.pop('certificate', {"certificate_name": VALID_CERT})
-        body = kwargs.pop('body', {})
-        response = requests.post(url='https://' + host + args[0],
-                                 json=body,
-                                 cert=CERT_DIR_PATH + '/' + cert_dict['certificate_name'],
-                                 verify=False,
-                                 headers={"Content-Type": "application/json"})
+        cert_dict = kwargs.pop("certificate", {"certificate_name": VALID_CERT})
+        body = kwargs.pop("body", {})
+        response = requests.post(
+            url="https://" + host + args[0],
+            json=body,
+            cert=CERT_DIR_PATH + "/" + cert_dict["certificate_name"],
+            verify=False,
+            headers={"Content-Type": "application/json"},
+        )
 
         response.status = response.status_code
 
         return response
 
     def patch_with_mtls(self, *args, **kwargs):
-
-        cert_dict = kwargs.pop('certificate', {"certificate_name": VALID_CERT})
-        body = kwargs.pop('body', {})
-        response = requests.patch(url='https://' + host + args[0],
-                                  json=body,
-                                  cert=CERT_DIR_PATH + '/' + cert_dict['certificate_name'],
-                                  verify=False,
-                                  headers={"Content-Type": "application/json"})
+        cert_dict = kwargs.pop("certificate", {"certificate_name": VALID_CERT})
+        body = kwargs.pop("body", {})
+        response = requests.patch(
+            url="https://" + host + args[0],
+            json=body,
+            cert=CERT_DIR_PATH + "/" + cert_dict["certificate_name"],
+            verify=False,
+            headers={"Content-Type": "application/json"},
+        )
 
         response.status = response.status_code
 
         return response
 
     def delete_with_mtls(self, *args, **kwargs):
-
-        cert_dict = kwargs.pop('certificate', {"certificate_name": VALID_CERT})
-        response = requests.delete(url='https://' + host + args[0],
-                                   cert=CERT_DIR_PATH + '/' + cert_dict['certificate_name'],
-                                   verify=False,
-                                   headers={"Content-Type": "application/json"})
+        cert_dict = kwargs.pop("certificate", {"certificate_name": VALID_CERT})
+        response = requests.delete(
+            url="https://" + host + args[0],
+            cert=CERT_DIR_PATH + "/" + cert_dict["certificate_name"],
+            verify=False,
+            headers={"Content-Type": "application/json"},
+        )
 
         response.status = response.status_code
 
         return response
 
     def put_with_mtls(self, *args, **kwargs):
-
-        cert_dict = kwargs.pop('certificate', {"certificate_name": VALID_CERT})
-        body = kwargs.pop('body', {})
-        response = requests.put(url='https://' + host + args[0],
-                                json=body,
-                                cert=CERT_DIR_PATH + '/' + cert_dict['certificate_name'],
-                                verify=False,
-                                headers={"Content-Type": "application/json"})
+        cert_dict = kwargs.pop("certificate", {"certificate_name": VALID_CERT})
+        body = kwargs.pop("body", {})
+        response = requests.put(
+            url="https://" + host + args[0],
+            json=body,
+            cert=CERT_DIR_PATH + "/" + cert_dict["certificate_name"],
+            verify=False,
+            headers={"Content-Type": "application/json"},
+        )
 
         response.status = response.status_code
 
         return response
 
     def head_with_mtls(self, *args, **kwargs):
-
-        cert_dict = kwargs.pop('certificate', {"certificate_name": VALID_CERT})
-        body = kwargs.pop('body', {})
-        response = requests.head(url='https://' + host + args[0],
-                                 json=body,
-                                 cert=CERT_DIR_PATH + '/' + cert_dict['certificate_name'],
-                                 verify=False,
-                                 headers={"Content-Type": "application/json"})
+        cert_dict = kwargs.pop("certificate", {"certificate_name": VALID_CERT})
+        body = kwargs.pop("body", {})
+        response = requests.head(
+            url="https://" + host + args[0],
+            json=body,
+            cert=CERT_DIR_PATH + "/" + cert_dict["certificate_name"],
+            verify=False,
+            headers={"Content-Type": "application/json"},
+        )
 
         response.status = response.status_code
 
diff --git a/lib/redfish_request.py b/lib/redfish_request.py
index 6add29f..da455a3 100644
--- a/lib/redfish_request.py
+++ b/lib/redfish_request.py
@@ -1,19 +1,18 @@
 #!/usr/bin/env python3
 
-import requests
-import urllib.request
-from urllib3.exceptions import InsecureRequestWarning
 import json
 import secrets
 import string
+import urllib.request
 
+import requests
 from robot.api import logger
-from robot.libraries.BuiltIn import BuiltIn
 from robot.api.deco import keyword
+from robot.libraries.BuiltIn import BuiltIn
+from urllib3.exceptions import InsecureRequestWarning
 
 
 class redfish_request(object):
-
     @staticmethod
     def generate_clientid():
         r"""
@@ -23,9 +22,11 @@
 
         """
 
-        clientid = ''.join(secrets.choice(
-            string.ascii_letters + string.digits) for i in range(10))
-        clientid = ''.join(str(i) for i in clientid)
+        clientid = "".join(
+            secrets.choice(string.ascii_letters + string.digits)
+            for i in range(10)
+        )
+        clientid = "".join(str(i) for i in clientid)
 
         return clientid
 
@@ -38,11 +39,13 @@
         url        Url passed by user e.g. /redfish/v1/Systems/system.
         """
 
-        openbmc_host = \
-            BuiltIn().get_variable_value("${OPENBMC_HOST}", default="")
+        openbmc_host = BuiltIn().get_variable_value(
+            "${OPENBMC_HOST}", default=""
+        )
         https_port = BuiltIn().get_variable_value("${HTTPS_PORT}", default="")
-        form_url = \
+        form_url = (
             "https://" + str(openbmc_host) + ":" + str(https_port) + str(url)
+        )
 
         return form_url
 
@@ -55,10 +58,11 @@
         response        Response from requests.
         """
 
-        logger.console(msg='', newline=True)
-        logger.info("Response : [%s]" % response.status_code,
-                    also_console=True)
-        logger.console(msg='', newline=True)
+        logger.console(msg="", newline=True)
+        logger.info(
+            "Response : [%s]" % response.status_code, also_console=True
+        )
+        logger.console(msg="", newline=True)
 
     def request_login(self, headers, url, credential, timeout=10):
         r"""
@@ -81,19 +85,21 @@
 
         if headers == "None":
             headers = dict()
-            headers['Content-Type'] = 'application/json'
+            headers["Content-Type"] = "application/json"
 
-        client_id = credential['Oem']['OpenBMC'].get('ClientID', "None")
+        client_id = credential["Oem"]["OpenBMC"].get("ClientID", "None")
 
         if "None" == client_id:
             self.clientid = redfish_request.generate_clientid()
-            credential['Oem']['OpenBMC']['ClientID'] = self.clientid
+            credential["Oem"]["OpenBMC"]["ClientID"] = self.clientid
 
-        logger.console(msg='', newline=True)
-        requests.packages.urllib3.\
-            disable_warnings(category=InsecureRequestWarning)
-        response = redfish_request.request_post(self, headers=headers,
-                                                url=url, data=credential)
+        logger.console(msg="", newline=True)
+        requests.packages.urllib3.disable_warnings(
+            category=InsecureRequestWarning
+        )
+        response = redfish_request.request_post(
+            self, headers=headers, url=url, data=credential
+        )
 
         return response
 
@@ -116,19 +122,27 @@
                        is not considered.
         """
 
-        if headers.get('Content-Type', None) is None:
-            headers['Content-Type'] = 'application/json'
+        if headers.get("Content-Type", None) is None:
+            headers["Content-Type"] = "application/json"
 
         url = redfish_request.form_url(url)
 
-        logger.console(msg='', newline=True)
-        msg = "Request Method : GET  ,headers = " + \
-              json.dumps(headers) + " ,uri = " + str(url) + " ,timeout = " + \
-              str(timeout) + " ,verify = " + str(verify)
+        logger.console(msg="", newline=True)
+        msg = (
+            "Request Method : GET  ,headers = "
+            + json.dumps(headers)
+            + " ,uri = "
+            + str(url)
+            + " ,timeout = "
+            + str(timeout)
+            + " ,verify = "
+            + str(verify)
+        )
         logger.info(msg, also_console=True)
 
-        response = requests.get(url, headers=headers,
-                                timeout=timeout, verify=verify)
+        response = requests.get(
+            url, headers=headers, timeout=timeout, verify=verify
+        )
         redfish_request.log_console(response)
 
         return response
@@ -155,20 +169,29 @@
                        is not considered.
         """
 
-        if headers.get('Content-Type', None) is None:
-            headers['Content-Type'] = 'application/json'
+        if headers.get("Content-Type", None) is None:
+            headers["Content-Type"] = "application/json"
 
         url = redfish_request.form_url(url)
 
-        logger.console(msg='', newline=True)
-        msg = "Request Method : PATCH  ,headers = " + \
-              json.dumps(headers) + " ,uri = " + str(url) + " ,data = " + \
-              json.dumps(data) + " ,timeout = " + str(timeout) + \
-              " ,verify = " + str(verify)
+        logger.console(msg="", newline=True)
+        msg = (
+            "Request Method : PATCH  ,headers = "
+            + json.dumps(headers)
+            + " ,uri = "
+            + str(url)
+            + " ,data = "
+            + json.dumps(data)
+            + " ,timeout = "
+            + str(timeout)
+            + " ,verify = "
+            + str(verify)
+        )
         logger.info(msg, also_console=True)
 
-        response = requests.patch(url, headers=headers, data=data,
-                                  timeout=timeout, verify=verify)
+        response = requests.patch(
+            url, headers=headers, data=data, timeout=timeout, verify=verify
+        )
         redfish_request.log_console(response)
 
         return response
@@ -195,26 +218,40 @@
                        is not considered.
         """
 
-        if headers.get('Content-Type', None) is None:
-            headers['Content-Type'] = 'application/json'
+        if headers.get("Content-Type", None) is None:
+            headers["Content-Type"] = "application/json"
 
         url = redfish_request.form_url(url)
 
-        logger.console(msg='', newline=True)
-        msg = "Request Method : POST  ,headers = " + \
-              json.dumps(headers) + " ,uri = " + str(url) + " ,data = " + \
-              json.dumps(data) + " ,timeout = " + str(timeout) + \
-              " ,verify = " + str(verify)
+        logger.console(msg="", newline=True)
+        msg = (
+            "Request Method : POST  ,headers = "
+            + json.dumps(headers)
+            + " ,uri = "
+            + str(url)
+            + " ,data = "
+            + json.dumps(data)
+            + " ,timeout = "
+            + str(timeout)
+            + " ,verify = "
+            + str(verify)
+        )
         logger.info(msg, also_console=True)
 
-        response = requests.post(url, headers=headers, data=json.dumps(data),
-                                 timeout=timeout, verify=verify)
+        response = requests.post(
+            url,
+            headers=headers,
+            data=json.dumps(data),
+            timeout=timeout,
+            verify=verify,
+        )
         redfish_request.log_console(response)
 
         return response
 
-    def request_put(self, headers, url, files=None, data=None,
-                    timeout=10, verify=False):
+    def request_put(
+        self, headers, url, files=None, data=None, timeout=10, verify=False
+    ):
         r"""
         Redfish put request.
 
@@ -239,25 +276,41 @@
                        is not considered.
         """
 
-        if headers.get('Content-Type', None) is None:
-            headers['Content-Type'] = 'application/json'
+        if headers.get("Content-Type", None) is None:
+            headers["Content-Type"] = "application/json"
 
         url = redfish_request.form_url(url)
 
-        logger.console(msg='', newline=True)
-        msg = "Request Method : PUT  ,headers = " + \
-              json.dumps(headers) + " ,uri = " + str(url) + " ,data = " + \
-              json.dumps(data) + " ,timeout = " + str(timeout) + \
-              " ,verify = " + str(verify)
+        logger.console(msg="", newline=True)
+        msg = (
+            "Request Method : PUT  ,headers = "
+            + json.dumps(headers)
+            + " ,uri = "
+            + str(url)
+            + " ,data = "
+            + json.dumps(data)
+            + " ,timeout = "
+            + str(timeout)
+            + " ,verify = "
+            + str(verify)
+        )
         logger.info(msg, also_console=True)
 
-        response = requests.put(url, headers=headers, files=files, data=data,
-                                timeout=timeout, verify=verify)
+        response = requests.put(
+            url,
+            headers=headers,
+            files=files,
+            data=data,
+            timeout=timeout,
+            verify=verify,
+        )
         redfish_request.log_console(response)
 
         return response
 
-    def request_delete(self, headers, url, data=None, timeout=10, verify=False):
+    def request_delete(
+        self, headers, url, data=None, timeout=10, verify=False
+    ):
         r"""
         Redfish delete request.
 
@@ -279,20 +332,29 @@
                        is not considered.
         """
 
-        if headers.get('Content-Type', None) is None:
-            headers['Content-Type'] = 'application/json'
+        if headers.get("Content-Type", None) is None:
+            headers["Content-Type"] = "application/json"
 
         url = redfish_request.form_url(url)
 
-        logger.console(msg='', newline=True)
-        msg = "Request Method : DELETE  ,headers = " + \
-              json.dumps(headers) + " ,uri = " + str(url) + " ,data = " + \
-              json.dumps(data) + " ,timeout = " + str(timeout) + \
-              " ,verify = " + str(verify)
-        logger.console(msg='', newline=True)
+        logger.console(msg="", newline=True)
+        msg = (
+            "Request Method : DELETE  ,headers = "
+            + json.dumps(headers)
+            + " ,uri = "
+            + str(url)
+            + " ,data = "
+            + json.dumps(data)
+            + " ,timeout = "
+            + str(timeout)
+            + " ,verify = "
+            + str(verify)
+        )
+        logger.console(msg="", newline=True)
 
-        response = requests.delete(url, headers=headers, data=data,
-                                   timeout=timeout, verify=verify)
+        response = requests.delete(
+            url, headers=headers, data=data, timeout=timeout, verify=verify
+        )
         redfish_request.log_console(response)
 
         return response
diff --git a/lib/secureboot/secureboot.py b/lib/secureboot/secureboot.py
index 1aa5f06..f38458e 100644
--- a/lib/secureboot/secureboot.py
+++ b/lib/secureboot/secureboot.py
@@ -11,17 +11,14 @@
 
 # Define 'constant' functions.
 def secure_boot_mask():
-
     return 0x08000000
 
 
 def jumper_mask():
-
     return 0x04000000
 
 
 class secureboot(object):
-
     def get_secure_boot_info(self, quiet=None):
         r"""
         Get secure-boot information and return it as a tuple consisting of
diff --git a/lib/state.py b/lib/state.py
index 26c3f79..00fa124 100755
--- a/lib/state.py
+++ b/lib/state.py
@@ -27,27 +27,27 @@
 compared with the expected state.
 """
 
-import gen_print as gp
-import gen_valid as gv
-import gen_robot_utils as gru
-import gen_cmd as gc
-import bmc_ssh_utils as bsu
+import imp
+import os
+import re
+import sys
 
+import bmc_ssh_utils as bsu
+import gen_cmd as gc
+import gen_print as gp
+import gen_robot_utils as gru
+import gen_valid as gv
 from robot.libraries.BuiltIn import BuiltIn
 from robot.utils import DotDict
 
-import re
-import os
-import sys
-import imp
-
-
 # NOTE: Avoid importing utils.robot because utils.robot imports state.py
 # (indirectly) which will cause failures.
 gru.my_import_resource("rest_client.robot")
 
-base_path = os.path.dirname(os.path.dirname(
-                            imp.find_module("gen_robot_print")[1])) + os.sep
+base_path = (
+    os.path.dirname(os.path.dirname(imp.find_module("gen_robot_print")[1]))
+    + os.sep
+)
 sys.path.append(base_path + "data/")
 
 # Previously, I had this coded:
@@ -76,192 +76,243 @@
 # is being removed but the OBMC_STATES_VERSION value will stay for now in the
 # event that it is needed in the future.
 
-OBMC_STATES_VERSION = int(os.environ.get('OBMC_STATES_VERSION', 1))
+OBMC_STATES_VERSION = int(os.environ.get("OBMC_STATES_VERSION", 1))
 
-redfish_support_trans_state = int(os.environ.get('REDFISH_SUPPORT_TRANS_STATE', 0)) or \
-    int(BuiltIn().get_variable_value("${REDFISH_SUPPORT_TRANS_STATE}", default=0))
+redfish_support_trans_state = int(
+    os.environ.get("REDFISH_SUPPORT_TRANS_STATE", 0)
+) or int(
+    BuiltIn().get_variable_value("${REDFISH_SUPPORT_TRANS_STATE}", default=0)
+)
 
-platform_arch_type = os.environ.get('PLATFORM_ARCH_TYPE', '') or \
-    BuiltIn().get_variable_value("${PLATFORM_ARCH_TYPE}", default="power")
+platform_arch_type = os.environ.get(
+    "PLATFORM_ARCH_TYPE", ""
+) or BuiltIn().get_variable_value("${PLATFORM_ARCH_TYPE}", default="power")
 
 # valid_os_req_states and default_os_req_states are used by the os_get_state
 # function.
 # valid_os_req_states is a list of state information supported by the
 # get_os_state function.
-valid_os_req_states = ['os_ping',
-                       'os_login',
-                       'os_run_cmd']
+valid_os_req_states = ["os_ping", "os_login", "os_run_cmd"]
 
 # When a user calls get_os_state w/o specifying req_states,
 # default_os_req_states is used as its value.
-default_os_req_states = ['os_ping',
-                         'os_login',
-                         'os_run_cmd']
+default_os_req_states = ["os_ping", "os_login", "os_run_cmd"]
 
 # Presently, some BMCs appear to not keep time very well.  This environment
 # variable directs the get_state function to use either the BMC's epoch time
 # or the local epoch time.
-USE_BMC_EPOCH_TIME = int(os.environ.get('USE_BMC_EPOCH_TIME', 0))
+USE_BMC_EPOCH_TIME = int(os.environ.get("USE_BMC_EPOCH_TIME", 0))
 
 # Useful state constant definition(s).
 if not redfish_support_trans_state:
     # When a user calls get_state w/o specifying req_states, default_req_states
     # is used as its value.
-    default_req_states = ['rest',
-                          'chassis',
-                          'bmc',
-                          'boot_progress',
-                          'operating_system',
-                          'host',
-                          'os_ping',
-                          'os_login',
-                          'os_run_cmd']
+    default_req_states = [
+        "rest",
+        "chassis",
+        "bmc",
+        "boot_progress",
+        "operating_system",
+        "host",
+        "os_ping",
+        "os_login",
+        "os_run_cmd",
+    ]
 
     # valid_req_states is a list of sub states supported by the get_state function.
     # valid_req_states, default_req_states and master_os_up_match are used by the
     # get_state function.
 
-    valid_req_states = ['ping',
-                        'packet_loss',
-                        'uptime',
-                        'epoch_seconds',
-                        'elapsed_boot_time',
-                        'rest',
-                        'chassis',
-                        'requested_chassis',
-                        'bmc',
-                        'requested_bmc',
-                        'boot_progress',
-                        'operating_system',
-                        'host',
-                        'requested_host',
-                        'attempts_left',
-                        'os_ping',
-                        'os_login',
-                        'os_run_cmd']
+    valid_req_states = [
+        "ping",
+        "packet_loss",
+        "uptime",
+        "epoch_seconds",
+        "elapsed_boot_time",
+        "rest",
+        "chassis",
+        "requested_chassis",
+        "bmc",
+        "requested_bmc",
+        "boot_progress",
+        "operating_system",
+        "host",
+        "requested_host",
+        "attempts_left",
+        "os_ping",
+        "os_login",
+        "os_run_cmd",
+    ]
 
     # default_state is an initial value which may be of use to callers.
-    default_state = DotDict([('rest', '1'),
-                             ('chassis', 'On'),
-                             ('bmc', 'Ready'),
-                             ('boot_progress', 'OSStart'),
-                             ('operating_system', 'BootComplete'),
-                             ('host', 'Running'),
-                             ('os_ping', '1'),
-                             ('os_login', '1'),
-                             ('os_run_cmd', '1')])
+    default_state = DotDict(
+        [
+            ("rest", "1"),
+            ("chassis", "On"),
+            ("bmc", "Ready"),
+            ("boot_progress", "OSStart"),
+            ("operating_system", "BootComplete"),
+            ("host", "Running"),
+            ("os_ping", "1"),
+            ("os_login", "1"),
+            ("os_run_cmd", "1"),
+        ]
+    )
 
     # A match state for checking that the system is at "standby".
-    standby_match_state = DotDict([('rest', '^1$'),
-                                   ('chassis', '^Off$'),
-                                   ('bmc', '^Ready$'),
-                                   ('boot_progress', '^Off|Unspecified$'),
-                                   ('operating_system', '^Inactive$'),
-                                   ('host', '^Off$')])
+    standby_match_state = DotDict(
+        [
+            ("rest", "^1$"),
+            ("chassis", "^Off$"),
+            ("bmc", "^Ready$"),
+            ("boot_progress", "^Off|Unspecified$"),
+            ("operating_system", "^Inactive$"),
+            ("host", "^Off$"),
+        ]
+    )
 
     # A match state for checking that the system is at "os running".
-    os_running_match_state = DotDict([('chassis', '^On$'),
-                                      ('bmc', '^Ready$'),
-                                      ('boot_progress',
-                                       'FW Progress, Starting OS|OSStart'),
-                                      ('operating_system', 'BootComplete'),
-                                      ('host', '^Running$'),
-                                      ('os_ping', '^1$'),
-                                      ('os_login', '^1$'),
-                                      ('os_run_cmd', '^1$')])
+    os_running_match_state = DotDict(
+        [
+            ("chassis", "^On$"),
+            ("bmc", "^Ready$"),
+            ("boot_progress", "FW Progress, Starting OS|OSStart"),
+            ("operating_system", "BootComplete"),
+            ("host", "^Running$"),
+            ("os_ping", "^1$"),
+            ("os_login", "^1$"),
+            ("os_run_cmd", "^1$"),
+        ]
+    )
 
     # A master dictionary to determine whether the os may be up.
-    master_os_up_match = DotDict([('chassis', '^On$'),
-                                  ('bmc', '^Ready$'),
-                                  ('boot_progress',
-                                   'FW Progress, Starting OS|OSStart'),
-                                  ('operating_system', 'BootComplete'),
-                                  ('host', '^Running|Quiesced$')])
+    master_os_up_match = DotDict(
+        [
+            ("chassis", "^On$"),
+            ("bmc", "^Ready$"),
+            ("boot_progress", "FW Progress, Starting OS|OSStart"),
+            ("operating_system", "BootComplete"),
+            ("host", "^Running|Quiesced$"),
+        ]
+    )
 
-    invalid_state_match = DotDict([('rest', '^$'),
-                                   ('chassis', '^$'),
-                                   ('bmc', '^$'),
-                                   ('boot_progress', '^$'),
-                                   ('operating_system', '^$'),
-                                   ('host', '^$')])
+    invalid_state_match = DotDict(
+        [
+            ("rest", "^$"),
+            ("chassis", "^$"),
+            ("bmc", "^$"),
+            ("boot_progress", "^$"),
+            ("operating_system", "^$"),
+            ("host", "^$"),
+        ]
+    )
 else:
     # When a user calls get_state w/o specifying req_states, default_req_states
     # is used as its value.
-    default_req_states = ['redfish',
-                          'chassis',
-                          'bmc',
-                          'boot_progress',
-                          'host',
-                          'os_ping',
-                          'os_login',
-                          'os_run_cmd']
+    default_req_states = [
+        "redfish",
+        "chassis",
+        "bmc",
+        "boot_progress",
+        "host",
+        "os_ping",
+        "os_login",
+        "os_run_cmd",
+    ]
 
     # valid_req_states is a list of sub states supported by the get_state function.
     # valid_req_states, default_req_states and master_os_up_match are used by the
     # get_state function.
 
-    valid_req_states = ['ping',
-                        'packet_loss',
-                        'uptime',
-                        'epoch_seconds',
-                        'elapsed_boot_time',
-                        'redfish',
-                        'chassis',
-                        'requested_chassis',
-                        'bmc',
-                        'requested_bmc',
-                        'boot_progress',
-                        'host',
-                        'requested_host',
-                        'attempts_left',
-                        'os_ping',
-                        'os_login',
-                        'os_run_cmd']
+    valid_req_states = [
+        "ping",
+        "packet_loss",
+        "uptime",
+        "epoch_seconds",
+        "elapsed_boot_time",
+        "redfish",
+        "chassis",
+        "requested_chassis",
+        "bmc",
+        "requested_bmc",
+        "boot_progress",
+        "host",
+        "requested_host",
+        "attempts_left",
+        "os_ping",
+        "os_login",
+        "os_run_cmd",
+    ]
 
     # default_state is an initial value which may be of use to callers.
-    default_state = DotDict([('redfish', '1'),
-                             ('chassis', 'On'),
-                             ('bmc', 'Enabled'),
-                             ('boot_progress',
-                              'SystemHardwareInitializationComplete|OSBootStarted|OSRunning'),
-                             ('host', 'Enabled'),
-                             ('os_ping', '1'),
-                             ('os_login', '1'),
-                             ('os_run_cmd', '1')])
+    default_state = DotDict(
+        [
+            ("redfish", "1"),
+            ("chassis", "On"),
+            ("bmc", "Enabled"),
+            (
+                "boot_progress",
+                "SystemHardwareInitializationComplete|OSBootStarted|OSRunning",
+            ),
+            ("host", "Enabled"),
+            ("os_ping", "1"),
+            ("os_login", "1"),
+            ("os_run_cmd", "1"),
+        ]
+    )
 
     # A match state for checking that the system is at "standby".
-    standby_match_state = DotDict([('redfish', '^1$'),
-                                   ('chassis', '^Off$'),
-                                   ('bmc', '^Enabled$'),
-                                   ('boot_progress', '^None$'),
-                                   ('host', '^Disabled$')])
+    standby_match_state = DotDict(
+        [
+            ("redfish", "^1$"),
+            ("chassis", "^Off$"),
+            ("bmc", "^Enabled$"),
+            ("boot_progress", "^None$"),
+            ("host", "^Disabled$"),
+        ]
+    )
 
     # A match state for checking that the system is at "os running".
-    os_running_match_state = DotDict([('chassis', '^On$'),
-                                      ('bmc', '^Enabled$'),
-                                      ('boot_progress',
-                                       'SystemHardwareInitializationComplete|OSBootStarted|OSRunning'),
-                                      ('host', '^Enabled$'),
-                                      ('os_ping', '^1$'),
-                                      ('os_login', '^1$'),
-                                      ('os_run_cmd', '^1$')])
+    os_running_match_state = DotDict(
+        [
+            ("chassis", "^On$"),
+            ("bmc", "^Enabled$"),
+            (
+                "boot_progress",
+                "SystemHardwareInitializationComplete|OSBootStarted|OSRunning",
+            ),
+            ("host", "^Enabled$"),
+            ("os_ping", "^1$"),
+            ("os_login", "^1$"),
+            ("os_run_cmd", "^1$"),
+        ]
+    )
 
     # A master dictionary to determine whether the os may be up.
-    master_os_up_match = DotDict([('chassis', '^On$'),
-                                  ('bmc', '^Enabled$'),
-                                  ('boot_progress',
-                                   'SystemHardwareInitializationComplete|OSBootStarted|OSRunning'),
-                                  ('host', '^Enabled$')])
+    master_os_up_match = DotDict(
+        [
+            ("chassis", "^On$"),
+            ("bmc", "^Enabled$"),
+            (
+                "boot_progress",
+                "SystemHardwareInitializationComplete|OSBootStarted|OSRunning",
+            ),
+            ("host", "^Enabled$"),
+        ]
+    )
 
-    invalid_state_match = DotDict([('redfish', '^$'),
-                                   ('chassis', '^$'),
-                                   ('bmc', '^$'),
-                                   ('boot_progress', '^$'),
-                                   ('host', '^$')])
+    invalid_state_match = DotDict(
+        [
+            ("redfish", "^$"),
+            ("chassis", "^$"),
+            ("bmc", "^$"),
+            ("boot_progress", "^$"),
+            ("host", "^$"),
+        ]
+    )
 
 # Filter the states based on platform type.
 if platform_arch_type == "x86":
-
     if not redfish_support_trans_state:
         default_req_states.remove("operating_system")
         valid_req_states.remove("operating_system")
@@ -280,7 +331,7 @@
     del invalid_state_match["boot_progress"]
 
 
-def return_state_constant(state_name='default_state'):
+def return_state_constant(state_name="default_state"):
     r"""
     Return the named state dictionary constant.
     """
@@ -328,12 +379,10 @@
     r"""
     Return expressions key constant.
     """
-    return '<expressions>'
+    return "<expressions>"
 
 
-def compare_states(state,
-                   match_state,
-                   match_type='and'):
+def compare_states(state, match_state, match_type="and"):
     r"""
     Compare 2 state dictionaries.  Return True if they match and False if they
     don't.  Note that the match_state dictionary does not need to have an entry
@@ -373,7 +422,7 @@
     match_type      This may be 'and' or 'or'.
     """
 
-    error_message = gv.valid_value(match_type, valid_values=['and', 'or'])
+    error_message = gv.valid_value(match_type, valid_values=["and", "or"])
     if error_message != "":
         BuiltIn().fail(gp.sprint_error(error_message))
 
@@ -382,7 +431,7 @@
     except TypeError:
         pass
 
-    default_match = (match_type == 'and')
+    default_match = match_type == "and"
     for key, match_state_value in match_state.items():
         # Blank match_state_value means "don't care".
         if match_state_value == "":
@@ -395,7 +444,9 @@
                     return match
         else:
             try:
-                match = (re.match(match_state_value, str(state[key])) is not None)
+                match = (
+                    re.match(match_state_value, str(state[key])) is not None
+                )
             except KeyError:
                 match = False
             if match != default_match:
@@ -404,12 +455,14 @@
     return default_match
 
 
-def get_os_state(os_host="",
-                 os_username="",
-                 os_password="",
-                 req_states=default_os_req_states,
-                 os_up=True,
-                 quiet=None):
+def get_os_state(
+    os_host="",
+    os_username="",
+    os_password="",
+    req_states=default_os_req_states,
+    os_up=True,
+    quiet=None,
+):
     r"""
     Get component states for the operating system such as ping, login,
     etc, put them into a dictionary and return them to the caller.
@@ -455,11 +508,16 @@
     if error_message != "":
         BuiltIn().fail(gp.sprint_error(error_message))
 
-    invalid_req_states = [sub_state for sub_state in req_states
-                          if sub_state not in valid_os_req_states]
+    invalid_req_states = [
+        sub_state
+        for sub_state in req_states
+        if sub_state not in valid_os_req_states
+    ]
     if len(invalid_req_states) > 0:
-        error_message = "The following req_states are not supported:\n" +\
-            gp.sprint_var(invalid_req_states)
+        error_message = (
+            "The following req_states are not supported:\n"
+            + gp.sprint_var(invalid_req_states)
+        )
         BuiltIn().fail(gp.sprint_error(error_message))
 
     # Initialize all substate values supported by this function.
@@ -468,28 +526,37 @@
     os_run_cmd = 0
 
     if os_up:
-        if 'os_ping' in req_states:
+        if "os_ping" in req_states:
             # See if the OS pings.
-            rc, out_buf = gc.shell_cmd("ping -c 1 -w 2 " + os_host,
-                                       print_output=0, show_err=0,
-                                       ignore_err=1)
+            rc, out_buf = gc.shell_cmd(
+                "ping -c 1 -w 2 " + os_host,
+                print_output=0,
+                show_err=0,
+                ignore_err=1,
+            )
             if rc == 0:
                 os_ping = 1
 
         # Programming note: All attributes which do not require an ssh login
         # should have been processed by this point.
-        master_req_login = ['os_login', 'os_run_cmd']
-        req_login = [sub_state for sub_state in req_states if sub_state in
-                     master_req_login]
-        must_login = (len(req_login) > 0)
+        master_req_login = ["os_login", "os_run_cmd"]
+        req_login = [
+            sub_state
+            for sub_state in req_states
+            if sub_state in master_req_login
+        ]
+        must_login = len(req_login) > 0
 
         if must_login:
-            output, stderr, rc = bsu.os_execute_command("uptime", quiet=quiet,
-                                                        ignore_err=1,
-                                                        time_out=20,
-                                                        os_host=os_host,
-                                                        os_username=os_username,
-                                                        os_password=os_password)
+            output, stderr, rc = bsu.os_execute_command(
+                "uptime",
+                quiet=quiet,
+                ignore_err=1,
+                time_out=20,
+                os_host=os_host,
+                os_username=os_username,
+                os_password=os_password,
+            )
             if rc == 0:
                 os_login = 1
                 os_run_cmd = 1
@@ -505,14 +572,16 @@
     return os_state
 
 
-def get_state(openbmc_host="",
-              openbmc_username="",
-              openbmc_password="",
-              os_host="",
-              os_username="",
-              os_password="",
-              req_states=default_req_states,
-              quiet=None):
+def get_state(
+    openbmc_host="",
+    openbmc_username="",
+    openbmc_password="",
+    os_host="",
+    os_username="",
+    os_password="",
+    req_states=default_req_states,
+    quiet=None,
+):
     r"""
     Get component states such as chassis state, bmc state, etc, put them into a
     dictionary and return them to the caller.
@@ -581,116 +650,149 @@
         if os_password is None:
             os_password = ""
 
-    invalid_req_states = [sub_state for sub_state in req_states
-                          if sub_state not in valid_req_states]
+    invalid_req_states = [
+        sub_state
+        for sub_state in req_states
+        if sub_state not in valid_req_states
+    ]
     if len(invalid_req_states) > 0:
-        error_message = "The following req_states are not supported:\n" +\
-            gp.sprint_var(invalid_req_states)
+        error_message = (
+            "The following req_states are not supported:\n"
+            + gp.sprint_var(invalid_req_states)
+        )
         BuiltIn().fail(gp.sprint_error(error_message))
 
     # Initialize all substate values supported by this function.
     ping = 0
-    packet_loss = ''
-    uptime = ''
-    epoch_seconds = ''
-    elapsed_boot_time = ''
-    rest = ''
-    redfish = ''
-    chassis = ''
-    requested_chassis = ''
-    bmc = ''
-    requested_bmc = ''
+    packet_loss = ""
+    uptime = ""
+    epoch_seconds = ""
+    elapsed_boot_time = ""
+    rest = ""
+    redfish = ""
+    chassis = ""
+    requested_chassis = ""
+    bmc = ""
+    requested_bmc = ""
     # BootProgress state will get populated when state logic enumerates the
     # state URI. This is to prevent state dictionary  boot_progress value
     # getting empty when the BootProgress is NOT found, making it optional.
-    boot_progress = 'NA'
-    operating_system = ''
-    host = ''
-    requested_host = ''
-    attempts_left = ''
+    boot_progress = "NA"
+    operating_system = ""
+    host = ""
+    requested_host = ""
+    attempts_left = ""
 
     # Get the component states.
-    if 'ping' in req_states:
+    if "ping" in req_states:
         # See if the OS pings.
-        rc, out_buf = gc.shell_cmd("ping -c 1 -w 2 " + openbmc_host,
-                                   print_output=0, show_err=0,
-                                   ignore_err=1)
+        rc, out_buf = gc.shell_cmd(
+            "ping -c 1 -w 2 " + openbmc_host,
+            print_output=0,
+            show_err=0,
+            ignore_err=1,
+        )
         if rc == 0:
             ping = 1
 
-    if 'packet_loss' in req_states:
+    if "packet_loss" in req_states:
         # See if the OS pings.
-        cmd_buf = "ping -c 5 -w 5 " + openbmc_host +\
-            " | egrep 'packet loss' | sed -re 's/.* ([0-9]+)%.*/\\1/g'"
-        rc, out_buf = gc.shell_cmd(cmd_buf,
-                                   print_output=0, show_err=0,
-                                   ignore_err=1)
+        cmd_buf = (
+            "ping -c 5 -w 5 "
+            + openbmc_host
+            + " | egrep 'packet loss' | sed -re 's/.* ([0-9]+)%.*/\\1/g'"
+        )
+        rc, out_buf = gc.shell_cmd(
+            cmd_buf, print_output=0, show_err=0, ignore_err=1
+        )
         if rc == 0:
             packet_loss = out_buf.rstrip("\n")
 
-    if 'uptime' in req_states:
+    if "uptime" in req_states:
         # Sometimes reading uptime results in a blank value. Call with
         # wait_until_keyword_succeeds to ensure a non-blank value is obtained.
-        remote_cmd_buf = "bash -c 'read uptime filler 2>/dev/null < /proc/uptime" +\
-            " && [ ! -z \"${uptime}\" ] && echo ${uptime}'"
-        cmd_buf = ["BMC Execute Command",
-                   re.sub('\\$', '\\$', remote_cmd_buf), 'quiet=1',
-                   'test_mode=0', 'time_out=5']
+        remote_cmd_buf = (
+            "bash -c 'read uptime filler 2>/dev/null < /proc/uptime"
+            + ' && [ ! -z "${uptime}" ] && echo ${uptime}\''
+        )
+        cmd_buf = [
+            "BMC Execute Command",
+            re.sub("\\$", "\\$", remote_cmd_buf),
+            "quiet=1",
+            "test_mode=0",
+            "time_out=5",
+        ]
         gp.qprint_issuing(cmd_buf, 0)
         gp.qprint_issuing(remote_cmd_buf, 0)
         try:
-            stdout, stderr, rc =\
-                BuiltIn().wait_until_keyword_succeeds("10 sec", "5 sec",
-                                                      *cmd_buf)
+            stdout, stderr, rc = BuiltIn().wait_until_keyword_succeeds(
+                "10 sec", "5 sec", *cmd_buf
+            )
             if rc == 0 and stderr == "":
                 uptime = stdout
         except AssertionError as my_assertion_error:
             pass
 
-    if 'epoch_seconds' in req_states or 'elapsed_boot_time' in req_states:
+    if "epoch_seconds" in req_states or "elapsed_boot_time" in req_states:
         date_cmd_buf = "date -u +%s"
         if USE_BMC_EPOCH_TIME:
-            cmd_buf = ["BMC Execute Command", date_cmd_buf, 'quiet=${1}']
+            cmd_buf = ["BMC Execute Command", date_cmd_buf, "quiet=${1}"]
             if not quiet:
                 gp.print_issuing(cmd_buf)
-            status, ret_values = \
-                BuiltIn().run_keyword_and_ignore_error(*cmd_buf)
+            status, ret_values = BuiltIn().run_keyword_and_ignore_error(
+                *cmd_buf
+            )
             if status == "PASS":
                 stdout, stderr, rc = ret_values
                 if rc == 0 and stderr == "":
                     epoch_seconds = stdout.rstrip("\n")
         else:
-            shell_rc, out_buf = gc.cmd_fnc_u(date_cmd_buf,
-                                             quiet=quiet,
-                                             print_output=0)
+            shell_rc, out_buf = gc.cmd_fnc_u(
+                date_cmd_buf, quiet=quiet, print_output=0
+            )
             if shell_rc == 0:
                 epoch_seconds = out_buf.rstrip("\n")
 
-    if 'elapsed_boot_time' in req_states:
+    if "elapsed_boot_time" in req_states:
         global start_boot_seconds
         elapsed_boot_time = int(epoch_seconds) - start_boot_seconds
 
     if not redfish_support_trans_state:
-        master_req_rest = ['rest', 'host', 'requested_host', 'operating_system',
-                           'attempts_left', 'boot_progress', 'chassis',
-                           'requested_chassis' 'bmc' 'requested_bmc']
+        master_req_rest = [
+            "rest",
+            "host",
+            "requested_host",
+            "operating_system",
+            "attempts_left",
+            "boot_progress",
+            "chassis",
+            "requested_chassisbmcrequested_bmc",
+        ]
 
-        req_rest = [sub_state for sub_state in req_states if sub_state in
-                    master_req_rest]
-        need_rest = (len(req_rest) > 0)
+        req_rest = [
+            sub_state
+            for sub_state in req_states
+            if sub_state in master_req_rest
+        ]
+        need_rest = len(req_rest) > 0
         state = DotDict()
         if need_rest:
-            cmd_buf = ["Read Properties", SYSTEM_STATE_URI + "enumerate",
-                       "quiet=${" + str(quiet) + "}", "timeout=30"]
+            cmd_buf = [
+                "Read Properties",
+                SYSTEM_STATE_URI + "enumerate",
+                "quiet=${" + str(quiet) + "}",
+                "timeout=30",
+            ]
             gp.dprint_issuing(cmd_buf)
-            status, ret_values = \
-                BuiltIn().run_keyword_and_ignore_error(*cmd_buf)
+            status, ret_values = BuiltIn().run_keyword_and_ignore_error(
+                *cmd_buf
+            )
             if status == "PASS":
-                state['rest'] = '1'
+                state["rest"] = "1"
             else:
-                state['rest'] = '0'
+                state["rest"] = "0"
 
-            if int(state['rest']):
+            if int(state["rest"]):
                 for url_path in ret_values:
                     # Skip conflicting "CurrentHostState" URL from the enum
                     # /xyz/openbmc_project/state/hypervisor0
@@ -706,54 +808,69 @@
                     for attr_name in ret_values[url_path]:
                         # Create a state key value based on the attr_name.
                         try:
-                            ret_values[url_path][attr_name] = \
-                                re.sub(r'.*\.', "",
-                                       ret_values[url_path][attr_name])
+                            ret_values[url_path][attr_name] = re.sub(
+                                r".*\.", "", ret_values[url_path][attr_name]
+                            )
                         except TypeError:
                             pass
                         # Do some key name manipulations.
-                        new_attr_name = re.sub(r'^Current|(State|Transition)$',
-                                               "", attr_name)
-                        new_attr_name = re.sub(r'BMC', r'Bmc', new_attr_name)
-                        new_attr_name = re.sub(r'([A-Z][a-z])', r'_\1',
-                                               new_attr_name)
+                        new_attr_name = re.sub(
+                            r"^Current|(State|Transition)$", "", attr_name
+                        )
+                        new_attr_name = re.sub(r"BMC", r"Bmc", new_attr_name)
+                        new_attr_name = re.sub(
+                            r"([A-Z][a-z])", r"_\1", new_attr_name
+                        )
                         new_attr_name = new_attr_name.lower().lstrip("_")
-                        new_attr_name = re.sub(r'power', r'chassis', new_attr_name)
+                        new_attr_name = re.sub(
+                            r"power", r"chassis", new_attr_name
+                        )
                         if new_attr_name in req_states:
-                            state[new_attr_name] = ret_values[url_path][attr_name]
+                            state[new_attr_name] = ret_values[url_path][
+                                attr_name
+                            ]
     else:
-        master_req_rf = ['redfish', 'host', 'requested_host',
-                         'attempts_left', 'boot_progress', 'chassis',
-                         'requested_chassis' 'bmc' 'requested_bmc']
+        master_req_rf = [
+            "redfish",
+            "host",
+            "requested_host",
+            "attempts_left",
+            "boot_progress",
+            "chassis",
+            "requested_chassisbmcrequested_bmc",
+        ]
 
-        req_rf = [sub_state for sub_state in req_states if sub_state in
-                  master_req_rf]
-        need_rf = (len(req_rf) > 0)
+        req_rf = [
+            sub_state for sub_state in req_states if sub_state in master_req_rf
+        ]
+        need_rf = len(req_rf) > 0
         state = DotDict()
         if need_rf:
             cmd_buf = ["Redfish Get States"]
             gp.dprint_issuing(cmd_buf)
             try:
-                status, ret_values = \
-                    BuiltIn().run_keyword_and_ignore_error(*cmd_buf)
+                status, ret_values = BuiltIn().run_keyword_and_ignore_error(
+                    *cmd_buf
+                )
             except Exception as ex:
                 # Robot raised UserKeywordExecutionFailed error exception.
                 gp.dprint_issuing("Retrying Redfish Get States")
-                status, ret_values = \
-                    BuiltIn().run_keyword_and_ignore_error(*cmd_buf)
+                status, ret_values = BuiltIn().run_keyword_and_ignore_error(
+                    *cmd_buf
+                )
 
             gp.dprint_vars(status, ret_values)
             if status == "PASS":
-                state['redfish'] = '1'
+                state["redfish"] = "1"
             else:
-                state['redfish'] = '0'
+                state["redfish"] = "0"
 
-            if int(state['redfish']):
-                state['chassis'] = ret_values['chassis']
-                state['host'] = ret_values['host']
-                state['bmc'] = ret_values['bmc']
+            if int(state["redfish"]):
+                state["chassis"] = ret_values["chassis"]
+                state["host"] = ret_values["host"]
+                state["bmc"] = ret_values["bmc"]
                 if platform_arch_type != "x86":
-                    state['boot_progress'] = ret_values['boot_progress']
+                    state["boot_progress"] = ret_values["boot_progress"]
 
     for sub_state in req_states:
         if sub_state in state:
@@ -769,8 +886,9 @@
         # it doesn't exist.
         return state
 
-    os_req_states = [sub_state for sub_state in req_states
-                     if sub_state.startswith('os_')]
+    os_req_states = [
+        sub_state for sub_state in req_states if sub_state.startswith("os_")
+    ]
 
     if len(os_req_states) > 0:
         # The caller has specified an os_host and they have requested
@@ -784,12 +902,14 @@
             if sub_state in req_states:
                 os_up_match[sub_state] = master_os_up_match[sub_state]
         os_up = compare_states(state, os_up_match)
-        os_state = get_os_state(os_host=os_host,
-                                os_username=os_username,
-                                os_password=os_password,
-                                req_states=os_req_states,
-                                os_up=os_up,
-                                quiet=quiet)
+        os_state = get_os_state(
+            os_host=os_host,
+            os_username=os_username,
+            os_password=os_password,
+            req_states=os_req_states,
+            os_up=os_up,
+            quiet=quiet,
+        )
         # Append os_state dictionary to ours.
         state.update(os_state)
 
@@ -815,16 +935,18 @@
     exit_wait_early_message = value
 
 
-def check_state(match_state,
-                invert=0,
-                print_string="",
-                openbmc_host="",
-                openbmc_username="",
-                openbmc_password="",
-                os_host="",
-                os_username="",
-                os_password="",
-                quiet=None):
+def check_state(
+    match_state,
+    invert=0,
+    print_string="",
+    openbmc_host="",
+    openbmc_username="",
+    openbmc_password="",
+    os_host="",
+    os_username="",
+    os_password="",
+    quiet=None,
+):
     r"""
     Check that the Open BMC machine's composite state matches the specified
     state.  On success, this keyword returns the machine's composite state as a
@@ -873,14 +995,16 @@
     if expressions_key() in req_states:
         req_states.remove(expressions_key())
     # Initialize state.
-    state = get_state(openbmc_host=openbmc_host,
-                      openbmc_username=openbmc_username,
-                      openbmc_password=openbmc_password,
-                      os_host=os_host,
-                      os_username=os_username,
-                      os_password=os_password,
-                      req_states=req_states,
-                      quiet=quiet)
+    state = get_state(
+        openbmc_host=openbmc_host,
+        openbmc_username=openbmc_username,
+        openbmc_password=openbmc_password,
+        os_host=os_host,
+        os_username=os_username,
+        os_password=os_password,
+        req_states=req_states,
+        quiet=quiet,
+    )
     if not quiet:
         gp.print_var(state)
 
@@ -894,29 +1018,36 @@
     match = compare_states(state, match_state)
 
     if invert and match:
-        fail_msg = "The current state of the machine matches the match" +\
-                   " state:\n" + gp.sprint_varx("state", state)
+        fail_msg = (
+            "The current state of the machine matches the match"
+            + " state:\n"
+            + gp.sprint_varx("state", state)
+        )
         BuiltIn().fail("\n" + gp.sprint_error(fail_msg))
     elif not invert and not match:
-        fail_msg = "The current state of the machine does NOT match the" +\
-                   " match state:\n" +\
-                   gp.sprint_varx("state", state)
+        fail_msg = (
+            "The current state of the machine does NOT match the"
+            + " match state:\n"
+            + gp.sprint_varx("state", state)
+        )
         BuiltIn().fail("\n" + gp.sprint_error(fail_msg))
 
     return state
 
 
-def wait_state(match_state=(),
-               wait_time="1 min",
-               interval="1 second",
-               invert=0,
-               openbmc_host="",
-               openbmc_username="",
-               openbmc_password="",
-               os_host="",
-               os_username="",
-               os_password="",
-               quiet=None):
+def wait_state(
+    match_state=(),
+    wait_time="1 min",
+    interval="1 second",
+    invert=0,
+    openbmc_host="",
+    openbmc_username="",
+    openbmc_password="",
+    os_host="",
+    os_username="",
+    os_password="",
+    quiet=None,
+):
     r"""
     Wait for the Open BMC machine's composite state to match the specified
     state.  On success, this keyword returns the machine's composite state as
@@ -967,9 +1098,15 @@
             alt_text = "cease to "
         else:
             alt_text = ""
-        gp.print_timen("Checking every " + str(interval) + " for up to "
-                       + str(wait_time) + " for the state of the machine to "
-                       + alt_text + "match the state shown below.")
+        gp.print_timen(
+            "Checking every "
+            + str(interval)
+            + " for up to "
+            + str(wait_time)
+            + " for the state of the machine to "
+            + alt_text
+            + "match the state shown below."
+        )
         gp.print_var(match_state)
 
     if quiet:
@@ -982,16 +1119,24 @@
         # In debug we print state so no need to print the "#".
         print_string = ""
     check_state_quiet = 1 - debug
-    cmd_buf = ["Check State", match_state, "invert=${" + str(invert) + "}",
-               "print_string=" + print_string, "openbmc_host=" + openbmc_host,
-               "openbmc_username=" + openbmc_username,
-               "openbmc_password=" + openbmc_password, "os_host=" + os_host,
-               "os_username=" + os_username, "os_password=" + os_password,
-               "quiet=${" + str(check_state_quiet) + "}"]
+    cmd_buf = [
+        "Check State",
+        match_state,
+        "invert=${" + str(invert) + "}",
+        "print_string=" + print_string,
+        "openbmc_host=" + openbmc_host,
+        "openbmc_username=" + openbmc_username,
+        "openbmc_password=" + openbmc_password,
+        "os_host=" + os_host,
+        "os_username=" + os_username,
+        "os_password=" + os_password,
+        "quiet=${" + str(check_state_quiet) + "}",
+    ]
     gp.dprint_issuing(cmd_buf)
     try:
-        state = BuiltIn().wait_until_keyword_succeeds(wait_time, interval,
-                                                      *cmd_buf)
+        state = BuiltIn().wait_until_keyword_succeeds(
+            wait_time, interval, *cmd_buf
+        )
     except AssertionError as my_assertion_error:
         gp.printn()
         message = my_assertion_error.args[0]
@@ -1024,8 +1169,7 @@
 set_start_boot_seconds(0)
 
 
-def wait_for_comm_cycle(start_boot_seconds,
-                        quiet=None):
+def wait_for_comm_cycle(start_boot_seconds, quiet=None):
     r"""
     Wait for the BMC uptime to be less than elapsed_boot_time.
 
@@ -1055,15 +1199,19 @@
 
     # Wait for uptime to be less than elapsed_boot_time.
     set_start_boot_seconds(start_boot_seconds)
-    expr = 'int(float(state[\'uptime\'])) < int(state[\'elapsed_boot_time\'])'
-    match_state = DotDict([('uptime', '^[0-9\\.]+$'),
-                           ('elapsed_boot_time', '^[0-9]+$'),
-                           (expressions_key(), [expr])])
+    expr = "int(float(state['uptime'])) < int(state['elapsed_boot_time'])"
+    match_state = DotDict(
+        [
+            ("uptime", "^[0-9\\.]+$"),
+            ("elapsed_boot_time", "^[0-9]+$"),
+            (expressions_key(), [expr]),
+        ]
+    )
     wait_state(match_state, wait_time="12 mins", interval="5 seconds")
 
     gp.qprint_timen("Verifying that REST/Redfish API interface is working.")
     if not redfish_support_trans_state:
-        match_state = DotDict([('rest', '^1$')])
+        match_state = DotDict([("rest", "^1$")])
     else:
-        match_state = DotDict([('redfish', '^1$')])
+        match_state = DotDict([("redfish", "^1$")])
     state = wait_state(match_state, wait_time="5 mins", interval="2 seconds")
diff --git a/lib/state_map.py b/lib/state_map.py
index f8353de..cdd1014 100644
--- a/lib/state_map.py
+++ b/lib/state_map.py
@@ -7,101 +7,94 @@
 
 """
 
-import gen_robot_keyword as keyword
-import variables as var
-
 import os
 import re
 import sys
 
+import gen_robot_keyword as keyword
+import variables as var
 from robot.libraries.BuiltIn import BuiltIn
 
 robot_pgm_dir_path = os.path.dirname(__file__) + os.sep
-repo_data_dir_path = re.sub('/lib', '/data', robot_pgm_dir_path)
+repo_data_dir_path = re.sub("/lib", "/data", robot_pgm_dir_path)
 sys.path.append(repo_data_dir_path)
 
 
 BuiltIn().import_resource("state_manager.robot")
 BuiltIn().import_resource("rest_client.robot")
 
-platform_arch_type = os.environ.get('PLATFORM_ARCH_TYPE', '') or \
-    BuiltIn().get_variable_value("${PLATFORM_ARCH_TYPE}", default="power")
+platform_arch_type = os.environ.get(
+    "PLATFORM_ARCH_TYPE", ""
+) or BuiltIn().get_variable_value("${PLATFORM_ARCH_TYPE}", default="power")
 
 # We will build eventually the mapping for warm, cold reset as well.
 VALID_STATES = {
-    'reboot':
-    {
+    "reboot": {
         # (Power Policy, BMC state, Chassis State, Host State)
-        ('LEAVE_OFF', 'Ready', 'Off', 'Off'),
-        ('ALWAYS_POWER_ON', 'Ready', 'On', 'Running'),
-        ('ALWAYS_POWER_ON', 'Ready', 'On', 'Off'),
-        ('RESTORE_LAST_STATE', 'Ready', 'On', 'Running'),
-        ('RESTORE_LAST_STATE', 'Ready', 'On', 'Off'),
-        ('ALWAYS_POWER_OFF', 'Ready', 'On', 'Running'),
-        ('ALWAYS_POWER_OFF', 'Ready', 'Off', 'Off'),
+        ("LEAVE_OFF", "Ready", "Off", "Off"),
+        ("ALWAYS_POWER_ON", "Ready", "On", "Running"),
+        ("ALWAYS_POWER_ON", "Ready", "On", "Off"),
+        ("RESTORE_LAST_STATE", "Ready", "On", "Running"),
+        ("RESTORE_LAST_STATE", "Ready", "On", "Off"),
+        ("ALWAYS_POWER_OFF", "Ready", "On", "Running"),
+        ("ALWAYS_POWER_OFF", "Ready", "Off", "Off"),
     },
 }
 
 VALID_BOOT_STATES = {
-    'Off':  # Valid states when Host is Off.
-    {
+    "Off": {  # Valid states when Host is Off.
         # (BMC , Chassis , Host , BootProgress, OperatingSystemState)
         (
             "xyz.openbmc_project.State.BMC.BMCState.Ready",
             "xyz.openbmc_project.State.Chassis.PowerState.Off",
             "xyz.openbmc_project.State.Host.HostState.Off",
             "xyz.openbmc_project.State.Boot.Progress.ProgressStages.Unspecified",
-            "xyz.openbmc_project.State.OperatingSystem.Status.OSStatus.Inactive"
+            "xyz.openbmc_project.State.OperatingSystem.Status.OSStatus.Inactive",
         ),
     },
-    'Reboot':  # Valid states when BMC reset to standby.
-    {
+    "Reboot": {  # Valid states when BMC reset to standby.
         # (BMC , Chassis , Host , BootProgress, OperatingSystemState)
         (
             "xyz.openbmc_project.State.BMC.BMCState.Ready",
             "xyz.openbmc_project.State.Chassis.PowerState.Off",
             "xyz.openbmc_project.State.Host.HostState.Off",
             "xyz.openbmc_project.State.Boot.Progress.ProgressStages.Unspecified",
-            "xyz.openbmc_project.State.OperatingSystem.Status.OSStatus.Inactive"
+            "xyz.openbmc_project.State.OperatingSystem.Status.OSStatus.Inactive",
         ),
     },
-    'Running':  # Valid states when Host is powering on.
-    {
+    "Running": {  # Valid states when Host is powering on.
         # (BMC , Chassis , Host , BootProgress, OperatingSystemState)
         (
             "xyz.openbmc_project.State.BMC.BMCState.Ready",
             "xyz.openbmc_project.State.Chassis.PowerState.On",
             "xyz.openbmc_project.State.Host.HostState.Running",
             "xyz.openbmc_project.State.Boot.Progress.ProgressStages.MotherboardInit",
-            "xyz.openbmc_project.State.OperatingSystem.Status.OSStatus.Inactive"
+            "xyz.openbmc_project.State.OperatingSystem.Status.OSStatus.Inactive",
         ),
     },
-    'Booted':  # Valid state when Host is booted.
-    {
+    "Booted": {  # Valid state when Host is booted.
         # (BMC , Chassis , Host , BootProgress, OperatingSystemState)
         (
             "xyz.openbmc_project.State.BMC.BMCState.Ready",
             "xyz.openbmc_project.State.Chassis.PowerState.On",
             "xyz.openbmc_project.State.Host.HostState.Running",
             "xyz.openbmc_project.State.Boot.Progress.ProgressStages.OSStart",
-            "xyz.openbmc_project.State.OperatingSystem.Status.OSStatus.BootComplete"
+            "xyz.openbmc_project.State.OperatingSystem.Status.OSStatus.BootComplete",
         ),
     },
-    'ResetReload':  # Valid state BMC reset reload when host is booted.
-    {
+    "ResetReload": {  # Valid state BMC reset reload when host is booted.
         # (BMC , Chassis , Host , BootProgress, OperatingSystemState)
         (
             "xyz.openbmc_project.State.BMC.BMCState.Ready",
             "xyz.openbmc_project.State.Chassis.PowerState.On",
             "xyz.openbmc_project.State.Host.HostState.Running",
             "xyz.openbmc_project.State.Boot.Progress.ProgressStages.OSStart",
-            "xyz.openbmc_project.State.OperatingSystem.Status.OSStatus.BootComplete"
+            "xyz.openbmc_project.State.OperatingSystem.Status.OSStatus.BootComplete",
         ),
     },
 }
 REDFISH_VALID_BOOT_STATES = {
-    'Off':  # Valid states when Host is Off.
-    {
+    "Off": {  # Valid states when Host is Off.
         # (BMC , Chassis , Host , BootProgress)
         (
             "Enabled",
@@ -110,8 +103,7 @@
             "None",
         ),
     },
-    'Reboot':  # Valid states when BMC reset to standby.
-    {
+    "Reboot": {  # Valid states when BMC reset to standby.
         # (BMC , Chassis , Host , BootProgress)
         (
             "Enabled",
@@ -120,8 +112,7 @@
             "None",
         ),
     },
-    'Running':  # Valid states when Host is powering on.
-    {
+    "Running": {  # Valid states when Host is powering on.
         # (BMC , Chassis , Host , BootProgress)
         (
             "Enabled",
@@ -130,8 +121,7 @@
             "OSRunning",
         ),
     },
-    'Booted':  # Valid state when Host is booted.
-    {
+    "Booted": {  # Valid state when Host is booted.
         # (BMC , Chassis , Host , BootProgress)
         (
             "Enabled",
@@ -140,8 +130,7 @@
             "OSRunning",
         ),
     },
-    'ResetReload':  # Valid state BMC reset reload when host is booted.
-    {
+    "ResetReload": {  # Valid state BMC reset reload when host is booted.
         # (BMC , Chassis , Host , BootProgress)
         (
             "Enabled",
@@ -162,41 +151,45 @@
                 for x in state_tuple
                 if not (
                     x.startswith("xyz.openbmc_project.State.Boot.Progress")
-                    or x.startswith("xyz.openbmc_project.State.OperatingSystem")
+                    or x.startswith(
+                        "xyz.openbmc_project.State.OperatingSystem"
+                    )
                 )
             )
             VALID_BOOT_STATES_X86[state_name].add(state_tuple_new)
     VALID_BOOT_STATES = VALID_BOOT_STATES_X86
 
 
-class state_map():
-
+class state_map:
     def get_boot_state(self):
         r"""
         Return the system state as a tuple of bmc, chassis, host state,
         BootProgress and OperatingSystemState.
         """
 
-        status, state = keyword.run_key("Read Properties  "
-                                        + var.SYSTEM_STATE_URI + "enumerate")
-        bmc_state = state[var.SYSTEM_STATE_URI + 'bmc0']['CurrentBMCState']
-        chassis_state = \
-            state[var.SYSTEM_STATE_URI + 'chassis0']['CurrentPowerState']
-        host_state = state[var.SYSTEM_STATE_URI + 'host0']['CurrentHostState']
+        status, state = keyword.run_key(
+            "Read Properties  " + var.SYSTEM_STATE_URI + "enumerate"
+        )
+        bmc_state = state[var.SYSTEM_STATE_URI + "bmc0"]["CurrentBMCState"]
+        chassis_state = state[var.SYSTEM_STATE_URI + "chassis0"][
+            "CurrentPowerState"
+        ]
+        host_state = state[var.SYSTEM_STATE_URI + "host0"]["CurrentHostState"]
         if platform_arch_type == "x86":
-            return (str(bmc_state),
-                    str(chassis_state),
-                    str(host_state))
+            return (str(bmc_state), str(chassis_state), str(host_state))
         else:
-            boot_state = state[var.SYSTEM_STATE_URI + 'host0']['BootProgress']
-            os_state = \
-                state[var.SYSTEM_STATE_URI + 'host0']['OperatingSystemState']
+            boot_state = state[var.SYSTEM_STATE_URI + "host0"]["BootProgress"]
+            os_state = state[var.SYSTEM_STATE_URI + "host0"][
+                "OperatingSystemState"
+            ]
 
-            return (str(bmc_state),
-                    str(chassis_state),
-                    str(host_state),
-                    str(boot_state),
-                    str(os_state))
+            return (
+                str(bmc_state),
+                str(chassis_state),
+                str(host_state),
+                str(boot_state),
+                str(os_state),
+            )
 
     def valid_boot_state(self, boot_type, state_set):
         r"""
@@ -224,7 +217,9 @@
         state_dict                  State dictionary.
         """
 
-        if set(state_dict.values()) in set(REDFISH_VALID_BOOT_STATES[boot_type]):
+        if set(state_dict.values()) in set(
+            REDFISH_VALID_BOOT_STATES[boot_type]
+        ):
             return True
         else:
             return False
diff --git a/lib/tally_sheet.py b/lib/tally_sheet.py
index 03162af..52ed279 100755
--- a/lib/tally_sheet.py
+++ b/lib/tally_sheet.py
@@ -4,10 +4,10 @@
 Define the tally_sheet class.
 """
 
-import sys
 import collections
 import copy
 import re
+import sys
 
 try:
     from robot.utils import DotDict
@@ -18,7 +18,6 @@
 
 
 class tally_sheet:
-
     r"""
     This class is the implementation of a tally sheet.  The sheet can be viewed as rows and columns.  Each
     row has a unique key field.
@@ -63,10 +62,12 @@
 
     """
 
-    def __init__(self,
-                 row_key_field_name='Description',
-                 init_fields_dict=dict(),
-                 obj_name='tally_sheet'):
+    def __init__(
+        self,
+        row_key_field_name="Description",
+        init_fields_dict=dict(),
+        obj_name="tally_sheet",
+    ):
         r"""
         Create a tally sheet object.
 
@@ -92,13 +93,12 @@
         self.__sum_fields = []
         self.__calc_fields = []
 
-    def init(self,
-             row_key_field_name,
-             init_fields_dict,
-             obj_name='tally_sheet'):
-        self.__init__(row_key_field_name,
-                      init_fields_dict,
-                      obj_name='tally_sheet')
+    def init(
+        self, row_key_field_name, init_fields_dict, obj_name="tally_sheet"
+    ):
+        self.__init__(
+            row_key_field_name, init_fields_dict, obj_name="tally_sheet"
+        )
 
     def set_sum_fields(self, sum_fields):
         r"""
@@ -137,7 +137,7 @@
 
         if row_key in self.__table:
             # If we allow this, the row values get re-initialized.
-            message = "An entry for \"" + row_key + "\" already exists in"
+            message = 'An entry for "' + row_key + '" already exists in'
             message += " tally sheet."
             raise ValueError(message)
         if init_fields_dict is None:
@@ -193,7 +193,7 @@
         for row_key, value in self.__table.items():
             # Walk through the calc fields and process them.
             for calc_field in self.__calc_fields:
-                tokens = [i for i in re.split(r'(\d+|\W+)', calc_field) if i]
+                tokens = [i for i in re.split(r"(\d+|\W+)", calc_field) if i]
                 cmd_buf = ""
                 for token in tokens:
                     if token in ("=", "+", "-", "*", "/"):
@@ -201,9 +201,15 @@
                     else:
                         # Note: Using "mangled" name for the sake of the exec
                         # statement (below).
-                        cmd_buf += "self._" + self.__class__.__name__ +\
-                                   "__table['" + row_key + "']['" +\
-                                   token + "'] "
+                        cmd_buf += (
+                            "self._"
+                            + self.__class__.__name__
+                            + "__table['"
+                            + row_key
+                            + "']['"
+                            + token
+                            + "'] "
+                        )
                 exec(cmd_buf)
 
             for field_key, sub_value in value.items():
@@ -248,8 +254,8 @@
         col_names = [self.__row_key_field_name.title()]
         report_width = 40
         key_width = 40
-        format_string = '{0:<' + str(key_width) + '}'
-        dash_format_string = '{0:-<' + str(key_width) + '}'
+        format_string = "{0:<" + str(key_width) + "}"
+        dash_format_string = "{0:-<" + str(key_width) + "}"
         field_num = 0
 
         try:
@@ -257,28 +263,31 @@
             for row_key, value in first_rec[1].items():
                 field_num += 1
                 if isinstance(value, int):
-                    align = ':>'
+                    align = ":>"
                 else:
-                    align = ':<'
-                format_string += ' {' + str(field_num) + align +\
-                                 str(len(row_key)) + '}'
-                dash_format_string += ' {' + str(field_num) + ':->' +\
-                                      str(len(row_key)) + '}'
+                    align = ":<"
+                format_string += (
+                    " {" + str(field_num) + align + str(len(row_key)) + "}"
+                )
+                dash_format_string += (
+                    " {" + str(field_num) + ":->" + str(len(row_key)) + "}"
+                )
                 report_width += 1 + len(row_key)
                 col_names.append(row_key.title())
         except StopIteration:
             pass
         num_fields = field_num + 1
-        totals_line_fmt = '{0:=<' + str(report_width) + '}'
+        totals_line_fmt = "{0:=<" + str(report_width) + "}"
 
         buffer += format_string.format(*col_names) + "\n"
-        buffer += dash_format_string.format(*([''] * num_fields)) + "\n"
+        buffer += dash_format_string.format(*([""] * num_fields)) + "\n"
         for row_key, value in self.__table.items():
             buffer += format_string.format(row_key, *value.values()) + "\n"
 
-        buffer += totals_line_fmt.format('') + "\n"
-        buffer += format_string.format('Totals',
-                                       *self.__totals_line.values()) + "\n"
+        buffer += totals_line_fmt.format("") + "\n"
+        buffer += (
+            format_string.format("Totals", *self.__totals_line.values()) + "\n"
+        )
 
         return buffer
 
diff --git a/lib/tftp_update_utils.py b/lib/tftp_update_utils.py
index 266e774..8e389f8 100644
--- a/lib/tftp_update_utils.py
+++ b/lib/tftp_update_utils.py
@@ -4,10 +4,9 @@
 This module contains functions for tftp update.
 """
 
-from robot.libraries.BuiltIn import BuiltIn
-
-import state as st
 import gen_print as gp
+import state as st
+from robot.libraries.BuiltIn import BuiltIn
 
 
 def get_pre_reboot_state():
@@ -18,7 +17,7 @@
 
     global state
 
-    req_states = ['epoch_seconds'] + st.default_req_states
+    req_states = ["epoch_seconds"] + st.default_req_states
 
     gp.qprint_timen("Get system state.")
     state = st.get_state(req_states=req_states, quiet=0)
@@ -49,4 +48,6 @@
 
     gp.qprintn()
     if wait_state_check:
-        st.wait_state(st.standby_match_state, wait_time="10 mins", interval="10 seconds")
+        st.wait_state(
+            st.standby_match_state, wait_time="10 mins", interval="10 seconds"
+        )
diff --git a/lib/utilities.py b/lib/utilities.py
index 1599ffb..96421e8 100755
--- a/lib/utilities.py
+++ b/lib/utilities.py
@@ -4,9 +4,10 @@
 Generic utility functions.
 """
 import imp
-import string
 import random
+import string
 import subprocess
+
 from robot.libraries.BuiltIn import BuiltIn
 from robot.utils import DotDict
 
@@ -16,8 +17,12 @@
     Return random mac address in the following format.
     Example: 00:01:6C:80:02:78
     """
-    return ":".join(map(lambda x: "%02x" % x, (random.randint(0x00, 0xff)
-                                               for _ in range(6))))
+    return ":".join(
+        map(
+            lambda x: "%02x" % x,
+            (random.randint(0x00, 0xFF) for _ in range(6)),
+        )
+    )
 
 
 def random_ip():
@@ -25,19 +30,17 @@
     Return random ip address in the following format.
     Example: 9.3.128.100
     """
-    return ".".join(map(str, (random.randint(0, 255)
-                              for _ in range(4))))
+    return ".".join(map(str, (random.randint(0, 255) for _ in range(4))))
 
 
 def get_sensor(module_name, value):
     r"""
     Return sensor matched ID name.
     """
-    m = imp.load_source('module.name', module_name)
+    m = imp.load_source("module.name", module_name)
 
-    for i in m.ID_LOOKUP['SENSOR']:
-
-        if m.ID_LOOKUP['SENSOR'][i] == value:
+    for i in m.ID_LOOKUP["SENSOR"]:
+        if m.ID_LOOKUP["SENSOR"][i] == value:
             return i
 
     return 0xFF
@@ -47,13 +50,12 @@
     r"""
     Return sensor matched ID name from inventory.
     """
-    m = imp.load_source('module.name', module_name)
+    m = imp.load_source("module.name", module_name)
 
-    value = string.replace(value, m.INVENTORY_ROOT, '<inventory_root>')
+    value = string.replace(value, m.INVENTORY_ROOT, "<inventory_root>")
 
-    for i in m.ID_LOOKUP['SENSOR']:
-
-        if m.ID_LOOKUP['SENSOR'][i] == value:
+    for i in m.ID_LOOKUP["SENSOR"]:
+        if m.ID_LOOKUP["SENSOR"][i] == value:
             return i
 
     return 0xFF
@@ -73,11 +75,11 @@
     """
 
     inventory_list = []
-    m = imp.load_source('module.name', module_name)
+    m = imp.load_source("module.name", module_name)
 
-    for i in m.ID_LOOKUP['FRU']:
-        s = m.ID_LOOKUP['FRU'][i]
-        s = s.replace('<inventory_root>', m.INVENTORY_ROOT)
+    for i in m.ID_LOOKUP["FRU"]:
+        s = m.ID_LOOKUP["FRU"][i]
+        s = s.replace("<inventory_root>", m.INVENTORY_ROOT)
         inventory_list.append(s)
 
     return inventory_list
@@ -96,11 +98,11 @@
     Return FRU URI(s) list of a given type from inventory.
     """
     inventory_list = []
-    m = imp.load_source('module.name', module_name)
+    m = imp.load_source("module.name", module_name)
 
     for i in m.FRU_INSTANCES.keys():
-        if m.FRU_INSTANCES[i]['fru_type'] == fru:
-            s = i.replace('<inventory_root>', m.INVENTORY_ROOT)
+        if m.FRU_INSTANCES[i]["fru_type"] == fru:
+            s = i.replace("<inventory_root>", m.INVENTORY_ROOT)
             inventory_list.append(s)
 
     return inventory_list
@@ -119,13 +121,13 @@
     Return VPD URI(s) list of a FRU type from inventory.
     """
     inventory_list = []
-    m = imp.load_source('module.name', module_name)
+    m = imp.load_source("module.name", module_name)
 
-    for i in m.ID_LOOKUP['FRU_STR']:
-        x = m.ID_LOOKUP['FRU_STR'][i]
+    for i in m.ID_LOOKUP["FRU_STR"]:
+        x = m.ID_LOOKUP["FRU_STR"][i]
 
-        if m.FRU_INSTANCES[x]['fru_type'] == fru:
-            s = x.replace('<inventory_root>', m.INVENTORY_ROOT)
+        if m.FRU_INSTANCES[x]["fru_type"] == fru:
+            s = x.replace("<inventory_root>", m.INVENTORY_ROOT)
             inventory_list.append(s)
 
     return inventory_list
@@ -142,7 +144,7 @@
     r"""
     Python main func call.
     """
-    print(get_vpd_inventory_list('../data/Palmetto.py', 'DIMM'))
+    print(get_vpd_inventory_list("../data/Palmetto.py", "DIMM"))
 
 
 if __name__ == "__main__":
@@ -187,15 +189,19 @@
 
     # Run the mtr command.  Exclude the header line.  Trim leading space from
     # each line.  Change all multiple spaces delims to single space delims.
-    cmd_buf = "mtr --report " + host +\
-        " | tail -n +2 | sed -r -e 's/^[ ]+//g' -e 's/[ ]+/ /g'"
-    sub_proc = subprocess.Popen(cmd_buf, shell=True, stdout=subprocess.PIPE,
-                                stderr=subprocess.STDOUT)
+    cmd_buf = (
+        "mtr --report "
+        + host
+        + " | tail -n +2 | sed -r -e 's/^[ ]+//g' -e 's/[ ]+/ /g'"
+    )
+    sub_proc = subprocess.Popen(
+        cmd_buf, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT
+    )
     out_buf, err_buf = sub_proc.communicate()
     shell_rc = sub_proc.returncode
 
     # Split the output by line.
-    rows = out_buf.rstrip('\n').split("\n")
+    rows = out_buf.rstrip("\n").split("\n")
 
     # Initialize report dictionary.
     report = DotDict()
@@ -205,16 +211,16 @@
         row_list = row.split(" ")
         # Create dictionary for the row.
         row = DotDict()
-        row['row_num'] = row_list[0].rstrip('.')
-        row['host'] = row_list[1]
-        row['loss'] = row_list[2].rstrip('%')
-        row['snt'] = row_list[3]
-        row['last'] = row_list[4]
-        row['avg'] = row_list[5]
-        row['best'] = row_list[6]
-        row['wrst'] = row_list[7]
-        row['stdev'] = row_list[8]
-        report[row['host']] = row
+        row["row_num"] = row_list[0].rstrip(".")
+        row["host"] = row_list[1]
+        row["loss"] = row_list[2].rstrip("%")
+        row["snt"] = row_list[3]
+        row["last"] = row_list[4]
+        row["avg"] = row_list[5]
+        row["best"] = row_list[6]
+        row["wrst"] = row_list[7]
+        row["stdev"] = row_list[8]
+        report[row["host"]] = row
 
     # Return the full report as dictionary of dictionaries.
     return report
@@ -296,8 +302,8 @@
     Input string      0a 01
     Return string     0x0a 0x01
     """
-    prefix_string = ''
+    prefix_string = ""
     data_list = string.strip().split(" ")
     for item in data_list:
-        prefix_string += prefix + item + ' '
+        prefix_string += prefix + item + " "
     return prefix_string.strip()
diff --git a/lib/utils.py b/lib/utils.py
index 59d63e3..c8971b1 100644
--- a/lib/utils.py
+++ b/lib/utils.py
@@ -4,15 +4,17 @@
 Companion file to utils.robot.
 """
 
-import os
-import json
 import collections
+import json
+import os
+
+import bmc_ssh_utils as bsu
 import gen_print as gp
 import gen_robot_keyword as grk
-import bmc_ssh_utils as bsu
 import var_funcs as vf
-from robot.libraries.BuiltIn import BuiltIn
 from robot.libraries import DateTime
+from robot.libraries.BuiltIn import BuiltIn
+
 try:
     from robot.utils import DotDict
 except ImportError:
@@ -47,12 +49,12 @@
     """
 
     # Retrieve global variables.
-    power_policy_setup = \
-        int(BuiltIn().get_variable_value("${power_policy_setup}",
-                                         default=0))
-    bmc_power_policy_method = \
-        BuiltIn().get_variable_value("${bmc_power_policy_method}",
-                                     default=0)
+    power_policy_setup = int(
+        BuiltIn().get_variable_value("${power_policy_setup}", default=0)
+    )
+    bmc_power_policy_method = BuiltIn().get_variable_value(
+        "${bmc_power_policy_method}", default=0
+    )
     gp.dpvar(power_policy_setup)
 
     # If this function has already been run once, we need not continue.
@@ -65,25 +67,27 @@
     # determine what it should be.
     if bmc_power_policy_method == "":
         status, ret_values = grk.run_key_u("New Get Power Policy", ignore=1)
-        if status == 'PASS':
-            bmc_power_policy_method = 'New'
+        if status == "PASS":
+            bmc_power_policy_method = "New"
         else:
-            bmc_power_policy_method = 'Old'
+            bmc_power_policy_method = "Old"
 
     gp.qpvar(bmc_power_policy_method)
     # For old style, we will rewrite these global variable settings to old
     # values.
     if bmc_power_policy_method == "Old":
-        BuiltIn().set_global_variable("${RESTORE_LAST_STATE}",
-                                      "RESTORE_LAST_STATE")
-        BuiltIn().set_global_variable("${ALWAYS_POWER_ON}",
-                                      "ALWAYS_POWER_ON")
-        BuiltIn().set_global_variable("${ALWAYS_POWER_OFF}",
-                                      "ALWAYS_POWER_OFF")
+        BuiltIn().set_global_variable(
+            "${RESTORE_LAST_STATE}", "RESTORE_LAST_STATE"
+        )
+        BuiltIn().set_global_variable("${ALWAYS_POWER_ON}", "ALWAYS_POWER_ON")
+        BuiltIn().set_global_variable(
+            "${ALWAYS_POWER_OFF}", "ALWAYS_POWER_OFF"
+        )
 
     # Set global variables to control subsequent calls to this function.
-    BuiltIn().set_global_variable("${bmc_power_policy_method}",
-                                  bmc_power_policy_method)
+    BuiltIn().set_global_variable(
+        "${bmc_power_policy_method}", bmc_power_policy_method
+    )
     BuiltIn().set_global_variable("${power_policy_setup}", 1)
 
 
@@ -103,14 +107,16 @@
     method of storing the policy value.
     """
 
-    valid_power_policy_vars = \
-        BuiltIn().get_variable_value("${valid_power_policy_vars}")
+    valid_power_policy_vars = BuiltIn().get_variable_value(
+        "${valid_power_policy_vars}"
+    )
 
     if policy not in valid_power_policy_vars:
         return policy
 
-    status, ret_values = grk.run_key_u("Get Variable Value  ${" + policy + "}",
-                                       quiet=1)
+    status, ret_values = grk.run_key_u(
+        "Get Variable Value  ${" + policy + "}", quiet=1
+    )
     return ret_values
 
 
@@ -132,7 +138,7 @@
       [rtc_in_local_tz]:          no
     """
 
-    out_buf, stderr, rc = bsu.bmc_execute_command('timedatectl')
+    out_buf, stderr, rc = bsu.bmc_execute_command("timedatectl")
     # Example of output returned by call to timedatectl:
     #       Local time: Fri 2017-11-03 15:27:56 UTC
     #   Universal time: Fri 2017-11-03 15:27:56 UTC
@@ -157,40 +163,41 @@
         result_time_dict[key] = value
         if not key.endswith("_time"):
             continue
-        result_time_dict[key + '_seconds'] = \
-            int(DateTime.convert_date(value, result_format='epoch'))
+        result_time_dict[key + "_seconds"] = int(
+            DateTime.convert_date(value, result_format="epoch")
+        )
 
     return result_time_dict
 
 
 def get_bmc_df(df_parm_string=""):
     r"""
-    Get df report from BMC and return as a report "object".
+        Get df report from BMC and return as a report "object".
 
-    A df report object is a list where each entry is a dictionary whose keys
-    are the field names from the first entry in report_list.
+        A df report object is a list where each entry is a dictionary whose keys
+        are the field names from the first entry in report_list.
 
-    Example df report object:
+        Example df report object:
 
-    df_report:
-      df_report[0]:
-        [filesystem]:    dev
-        [1k-blocks]:     247120
-        [used]:          0
-        [available]:     247120
-        [use%]:          0%
-        [mounted]:       /dev
-      df_report[1]:
-        [filesystem]:    dev
-        [1k-blocks]:     247120
-        [used]:          0
-        [available]:     247120
-        [use%]:          0%
-        [mounted]:       /dev
+        df_report:
+          df_report[0]:
+            [filesystem]:    dev
+            [1k-blocks]:     247120
+            [used]:          0
+            [available]:     247120
+            [use%]:          0%
+            [mounted]:       /dev
+          df_report[1]:
+            [filesystem]:    dev
+            [1k-blocks]:     247120
+            [used]:          0
+            [available]:     247120
+            [use%]:          0%
+            [mounted]:       /dev
 
-.   Description of argument(s):
-    df_parm_string  A string containing valid df command parms (e.g.
-                    "-h /var").
+    .   Description of argument(s):
+        df_parm_string  A string containing valid df command parms (e.g.
+                        "-h /var").
     """
 
     out_buf, stderr, rc = bsu.bmc_execute_command("df " + df_parm_string)
@@ -210,11 +217,11 @@
 
 def compare_mac_address(sys_mac_addr, user_mac_addr):
     r"""
-    Return 1 if the MAC value matched, otherwise 0.
+        Return 1 if the MAC value matched, otherwise 0.
 
-.   Description of argument(s):
-    sys_mac_addr   A valid system MAC string (e.g. "70:e2:84:14:2a:08")
-    user_mac_addr  A user provided MAC string (e.g. "70:e2:84:14:2a:08")
+    .   Description of argument(s):
+        sys_mac_addr   A valid system MAC string (e.g. "70:e2:84:14:2a:08")
+        user_mac_addr  A user provided MAC string (e.g. "70:e2:84:14:2a:08")
     """
 
     index = 0
@@ -295,8 +302,11 @@
 
     # Using sed and tail to massage the data a bit before running
     # key_value_outbuf_to_dict.
-    cmd_buf = "ethtool " + interface_name +\
-        " | sed -re 's/(.* link modes:)(.*)/\\1\\n\\2/g' | tail -n +2"
+    cmd_buf = (
+        "ethtool "
+        + interface_name
+        + " | sed -re 's/(.* link modes:)(.*)/\\1\\n\\2/g' | tail -n +2"
+    )
     stdout, stderr, rc = bsu.os_execute_command(cmd_buf)
     result = vf.key_value_outbuf_to_dict(stdout, process_indent=1, strip=" \t")
 
@@ -338,7 +348,7 @@
       [openbmc_target_machine]:       witherspoon
     """
 
-    out_buf, stderr, rc = bsu.bmc_execute_command('cat /etc/os-release')
+    out_buf, stderr, rc = bsu.bmc_execute_command("cat /etc/os-release")
     return vf.key_value_outbuf_to_dict(out_buf, delim="=", strip='"')
 
 
@@ -371,7 +381,7 @@
       [redhat_support_product_version]:               7.6
     """
 
-    out_buf, stderr, rc = bsu.os_execute_command('cat /etc/os-release')
+    out_buf, stderr, rc = bsu.os_execute_command("cat /etc/os-release")
     return vf.key_value_outbuf_to_dict(out_buf, delim="=", strip='"')
 
 
@@ -386,10 +396,12 @@
     """
 
     # Default print_out to 1.
-    if 'print_out' not in bsu_options:
-        bsu_options['print_out'] = 1
+    if "print_out" not in bsu_options:
+        bsu_options["print_out"] = 1
 
-    stdout, stderr, rc = bsu.bmc_execute_command('pdbg ' + option_string, **bsu_options)
+    stdout, stderr, rc = bsu.bmc_execute_command(
+        "pdbg " + option_string, **bsu_options
+    )
     return stdout
 
 
@@ -406,8 +418,8 @@
     """
 
     # Default print_out to 1.
-    if 'print_out' not in bsu_options:
-        bsu_options['print_out'] = 1
+    if "print_out" not in bsu_options:
+        bsu_options["print_out"] = 1
 
     stdout, stderr, rc = bsu.bmc_execute_command(option_string, **bsu_options)
     return stdout
@@ -423,7 +435,7 @@
     """
 
     n = int(n)
-    data = [stri[index: index + n] for index in range(0, len(stri), n)]
+    data = [stri[index : index + n] for index in range(0, len(stri), n)]
     return data
 
 
@@ -469,6 +481,6 @@
     returns decoded string of encoded byte.
     """
 
-    encoded_string = input.encode('ascii', 'ignore')
+    encoded_string = input.encode("ascii", "ignore")
     decoded_string = encoded_string.decode()
     return decoded_string
diff --git a/lib/utils_files.py b/lib/utils_files.py
index 0b19432..70e0887 100755
--- a/lib/utils_files.py
+++ b/lib/utils_files.py
@@ -4,22 +4,21 @@
 This module contains file functions such as file_diff.
 """
 
-import time
 import os
 import re
+import time
+
 from gen_cmd import cmd_fnc_u
+
 robot_env = 1
 try:
-    from robot.libraries.BuiltIn import BuiltIn
     from robot.libraries import DateTime
+    from robot.libraries.BuiltIn import BuiltIn
 except ImportError:
     robot_env = 0
 
 
-def file_diff(file1_path,
-              file2_path,
-              diff_file_path,
-              skip_string):
+def file_diff(file1_path, file2_path, diff_file_path, skip_string):
     r"""
     Compare the contents of two text files.  The comparison uses the Unix
     'diff' command.  Differences can be selectively ignored by use of
@@ -59,12 +58,12 @@
 
     now = time.strftime("%Y-%m-%d %H:%M:%S")
 
-    if (not os.path.exists(file1_path) or (not os.path.exists(file2_path))):
+    if not os.path.exists(file1_path) or (not os.path.exists(file2_path)):
         return INPUT_FILE_DOES_NOT_EXIST
     try:
-        with open(file1_path, 'r') as file:
+        with open(file1_path, "r") as file:
             initial = file.readlines()
-        with open(file2_path, 'r') as file:
+        with open(file2_path, "r") as file:
             final = file.readlines()
     except IOError:
         file.close()
@@ -79,24 +78,30 @@
     if len(initial) < min_file_byte_size:
         return INPUT_FILE_MALFORMED
 
-    if (initial == final):
+    if initial == final:
         try:
-            file = open(diff_file_path, 'w')
+            file = open(diff_file_path, "w")
         except IOError:
             file.close()
-        line_to_print = "Specified skip (ignore) string = " + \
-            skip_string + "\n\n"
+        line_to_print = (
+            "Specified skip (ignore) string = " + skip_string + "\n\n"
+        )
         file.write(line_to_print)
-        line_to_print = now + " found no difference between file " + \
-            file1_path + " and " + \
-            file2_path + "\n"
+        line_to_print = (
+            now
+            + " found no difference between file "
+            + file1_path
+            + " and "
+            + file2_path
+            + "\n"
+        )
         file.write(line_to_print)
         file.close()
         return FILES_MATCH
 
     # Find the differences and write difference report to diff_file_path file
     try:
-        file = open(diff_file_path, 'w')
+        file = open(diff_file_path, "w")
     except IOError:
         file.close()
         return IO_EXCEPTION_WRITING_FILE
@@ -105,9 +110,10 @@
     # if skip_string="size,capacity",  command = 'diff  -I "size"
     # -I "capacity"  file1_path file2_path'.
     skip_list = filter(None, re.split(r"[ ]*,[ ]*", skip_string))
-    ignore_string = ' '.join([("-I " + '"' + x + '"') for x in skip_list])
-    command = ' '.join(filter(None, ["diff", ignore_string, file1_path,
-                                     file2_path]))
+    ignore_string = " ".join([("-I " + '"' + x + '"') for x in skip_list])
+    command = " ".join(
+        filter(None, ["diff", ignore_string, file1_path, file2_path])
+    )
 
     line_to_print = now + "   " + command + "\n"
     file.write(line_to_print)
diff --git a/lib/var_funcs.py b/lib/var_funcs.py
index fdde68e..0009b54 100644
--- a/lib/var_funcs.py
+++ b/lib/var_funcs.py
@@ -14,9 +14,9 @@
 
 import collections
 
-import gen_print as gp
-import gen_misc as gm
 import func_args as fa
+import gen_misc as gm
+import gen_print as gp
 
 
 def create_var_dict(*args):
@@ -57,13 +57,15 @@
     return result_dict
 
 
-default_record_delim = ':'
-default_key_val_delim = '.'
+default_record_delim = ":"
+default_key_val_delim = "."
 
 
-def join_dict(dict,
-              record_delim=default_record_delim,
-              key_val_delim=default_key_val_delim):
+def join_dict(
+    dict,
+    record_delim=default_record_delim,
+    key_val_delim=default_key_val_delim,
+):
     r"""
     Join a dictionary's keys and values into a string and return the string.
 
@@ -87,14 +89,17 @@
     str1:                                             first_name.Steve:last_name.Smith
     """
 
-    format_str = '%s' + key_val_delim + '%s'
-    return record_delim.join([format_str % (key, value) for (key, value) in
-                              dict.items()])
+    format_str = "%s" + key_val_delim + "%s"
+    return record_delim.join(
+        [format_str % (key, value) for (key, value) in dict.items()]
+    )
 
 
-def split_to_dict(string,
-                  record_delim=default_record_delim,
-                  key_val_delim=default_key_val_delim):
+def split_to_dict(
+    string,
+    record_delim=default_record_delim,
+    key_val_delim=default_key_val_delim,
+):
     r"""
     Split a string into a dictionary and return it.
 
@@ -136,9 +141,7 @@
     return result_dict
 
 
-def create_file_path(file_name_dict,
-                     dir_path="/tmp/",
-                     file_suffix=""):
+def create_file_path(file_name_dict, dir_path="/tmp/", file_suffix=""):
     r"""
     Create a file path using the given parameters and return it.
 
@@ -187,18 +190,14 @@
     dir_path = os.path.dirname(file_path) + os.sep
     file_path = os.path.basename(file_path)
 
-    result_dict['dir_path'] = dir_path
+    result_dict["dir_path"] = dir_path
 
     result_dict.update(split_to_dict(file_path))
 
     return result_dict
 
 
-def parse_key_value(string,
-                    delim=":",
-                    strip=" ",
-                    to_lower=1,
-                    underscores=1):
+def parse_key_value(string, delim=":", strip=" ", to_lower=1, underscores=1):
     r"""
     Parse a key/value string and return as a key/value tuple.
 
@@ -252,9 +251,7 @@
     return key, value
 
 
-def key_value_list_to_dict(key_value_list,
-                           process_indent=0,
-                           **args):
+def key_value_list_to_dict(key_value_list, process_indent=0, **args):
     r"""
     Convert a list containing key/value strings or tuples to a dictionary and return it.
 
@@ -371,8 +368,9 @@
         if len(sub_list) > 0:
             if any(delim in word for word in sub_list):
                 # If delim is found anywhere in the sub_list, we'll process as a sub-dictionary.
-                result_dict[parent_key] = key_value_list_to_dict(sub_list,
-                                                                 **args)
+                result_dict[parent_key] = key_value_list_to_dict(
+                    sub_list, **args
+                )
             else:
                 result_dict[parent_key] = list(map(str.strip, sub_list))
             del sub_list[:]
@@ -394,8 +392,7 @@
     return result_dict
 
 
-def key_value_outbuf_to_dict(out_buf,
-                             **args):
+def key_value_outbuf_to_dict(out_buf, **args):
     r"""
     Convert a buffer with a key/value string on each line to a dictionary and return it.
 
@@ -438,8 +435,7 @@
     return key_value_list_to_dict(key_var_list, **args)
 
 
-def key_value_outbuf_to_dicts(out_buf,
-                              **args):
+def key_value_outbuf_to_dicts(out_buf, **args):
     r"""
     Convert a buffer containing multiple sections with key/value strings on each line to a list of
     dictionaries and return it.
@@ -507,11 +503,13 @@
     **args                          Arguments to be interpreted by parse_key_value.  (See docstring of
                                     parse_key_value function for details).
     """
-    return [key_value_outbuf_to_dict(x, **args) for x in re.split('\n[\n]+', out_buf)]
+    return [
+        key_value_outbuf_to_dict(x, **args)
+        for x in re.split("\n[\n]+", out_buf)
+    ]
 
 
 def create_field_desc_regex(line):
-
     r"""
     Create a field descriptor regular expression based on the input line and return it.
 
@@ -567,14 +565,12 @@
             regexes.append("(.{" + str(len(descriptor)) + "})")
 
     # Join the regexes list into a regex string.
-    field_desc_regex = ' '.join(regexes)
+    field_desc_regex = " ".join(regexes)
 
     return field_desc_regex
 
 
-def list_to_report(report_list,
-                   to_lower=1,
-                   field_delim=None):
+def list_to_report(report_list, to_lower=1, field_delim=None):
     r"""
     Convert a list containing report text lines to a report "object" and return it.
 
@@ -660,8 +656,9 @@
     else:
         # Pad the line with spaces on the right to facilitate processing with field_desc_regex.
         header_line = pad_format_string % header_line
-        columns = list(map(str.strip,
-                           re.findall(field_desc_regex, header_line)[0]))
+        columns = list(
+            map(str.strip, re.findall(field_desc_regex, header_line)[0])
+        )
 
     report_obj = []
     for report_line in report_list[1:]:
@@ -670,8 +667,9 @@
         else:
             # Pad the line with spaces on the right to facilitate processing with field_desc_regex.
             report_line = pad_format_string % report_line
-            line = list(map(str.strip,
-                            re.findall(field_desc_regex, report_line)[0]))
+            line = list(
+                map(str.strip, re.findall(field_desc_regex, report_line)[0])
+            )
         try:
             line_dict = collections.OrderedDict(zip(columns, line))
         except AttributeError:
@@ -681,8 +679,7 @@
     return report_obj
 
 
-def outbuf_to_report(out_buf,
-                     **args):
+def outbuf_to_report(out_buf, **args):
     r"""
     Convert a text buffer containing report lines to a report "object" and return it.
 
@@ -825,8 +822,11 @@
             if len(struct_key_values) == 0:
                 return False
             if regex:
-                matches = [x for x in struct_key_values
-                           if re.search(match_value, str(x))]
+                matches = [
+                    x
+                    for x in struct_key_values
+                    if re.search(match_value, str(x))
+                ]
                 if not matches:
                     return False
             elif match_value not in struct_key_values:
diff --git a/lib/var_stack.py b/lib/var_stack.py
index 3ea3813..77cf4a0 100644
--- a/lib/var_stack.py
+++ b/lib/var_stack.py
@@ -4,9 +4,9 @@
 Define the var_stack class.
 """
 
-import sys
 import collections
 import copy
+import sys
 
 try:
     from robot.utils import DotDict
@@ -17,7 +17,6 @@
 
 
 class var_stack:
-
     r"""
     Define the variable stack class.
 
@@ -65,8 +64,7 @@
           [var1][0]:  mike
     """
 
-    def __init__(self,
-                 obj_name='var_stack'):
+    def __init__(self, obj_name="var_stack"):
         r"""
         Initialize a new object of this class type.
 
@@ -90,7 +88,7 @@
 
         buffer += self.__obj_name + ":\n"
         indent = 2
-        buffer += gp.sprint_varx('stack_dict', self.__stack_dict, indent)
+        buffer += gp.sprint_varx("stack_dict", self.__stack_dict, indent)
 
         return buffer
 
@@ -101,9 +99,7 @@
 
         sys.stdout.write(self.sprint_obj())
 
-    def push(self,
-             var_value,
-             var_name=""):
+    def push(self, var_value, var_name=""):
         r"""
         push the var_name/var_value pair onto the stack.
 
@@ -124,8 +120,7 @@
         else:
             self.__stack_dict[var_name] = copy.deepcopy([var_value])
 
-    def pop(self,
-            var_name=""):
+    def pop(self, var_name=""):
         r"""
         Pop the value for the given var_name from the stack and return it.
 
diff --git a/lib/vpd_utils.py b/lib/vpd_utils.py
index 03581bb..754d255 100644
--- a/lib/vpd_utils.py
+++ b/lib/vpd_utils.py
@@ -5,8 +5,9 @@
 """
 
 import json
-import func_args as fa
+
 import bmc_ssh_utils as bsu
+import func_args as fa
 
 
 def vpdtool(option_string, **bsu_options):
@@ -44,12 +45,14 @@
     """
 
     bsu_options = fa.args_to_objects(bsu_options)
-    out_buf, stderr, rc = bsu.bmc_execute_command('vpd-tool ' + option_string, **bsu_options)
+    out_buf, stderr, rc = bsu.bmc_execute_command(
+        "vpd-tool " + option_string, **bsu_options
+    )
 
     # Only return output if its not a VPD write command.
-    if '-w' not in option_string:
+    if "-w" not in option_string:
         out_buf = json.loads(out_buf)
-        if '-r' in option_string:
+        if "-r" in option_string:
             return out_buf
         else:
             return out_buf[0]
diff --git a/lib/wrap_utils.py b/lib/wrap_utils.py
index 231dff8..ebf4f61 100755
--- a/lib/wrap_utils.py
+++ b/lib/wrap_utils.py
@@ -7,10 +7,9 @@
 """
 
 
-def create_func_def_string(base_func_name,
-                           wrap_func_name,
-                           func_body_template,
-                           replace_dict):
+def create_func_def_string(
+    base_func_name, wrap_func_name, func_body_template, replace_dict
+):
     r"""
     Create and return a complete function definition as a string.  The caller may run "exec" on the resulting
     string to create the desired function.
@@ -41,10 +40,10 @@
     func_def.insert(0, func_def_line)
     # Make sure the replace_dict has a 'call_line'/call_line pair so that any '<call_line>' text gets
     # replaced as intended.
-    replace_dict['call_line'] = call_line
+    replace_dict["call_line"] = call_line
 
     # Do the replacements.
     for key, value in replace_dict.items():
         func_def = [w.replace("<" + key + ">", value) for w in func_def]
 
-    return '\n'.join(func_def) + "\n"
+    return "\n".join(func_def) + "\n"
diff --git a/robot_custom_rules.py b/robot_custom_rules.py
index b71b289..7c7ddee 100644
--- a/robot_custom_rules.py
+++ b/robot_custom_rules.py
@@ -3,18 +3,27 @@
 # Installation : pip3 install --upgrade robotframework-lint
 # Example usage: python3 -m rflint -rA robot_standards -R robot_custom_rules.py .
 import re
-from rflint.common import SuiteRule, ERROR
+
+from rflint.common import ERROR, SuiteRule
 
 
 class ExtendInvalidTable(SuiteRule):
-    r'''
+    r"""
     Extend robotframework-lint SuiteRule function for InvalidTable to allow a table section if it is
     a section of comments. e.g "*** Comments ***"
-    '''
+    """
     severity = ERROR
 
     def apply(self, suite):
         for table in suite.tables:
-            if (not re.match(r'^(settings?|metadata|(test )?cases?|(user )?keywords?|variables?|comments?)$',
-                             table.name, re.IGNORECASE)):
-                self.report(suite, "Unknown table name '%s'" % table.name, table.linenumber)
+            if not re.match(
+                r"^(settings?|metadata|(test )?cases?|(user"
+                r" )?keywords?|variables?|comments?)$",
+                table.name,
+                re.IGNORECASE,
+            ):
+                self.report(
+                    suite,
+                    "Unknown table name '%s'" % table.name,
+                    table.linenumber,
+                )
diff --git a/syslib/utils_keywords.py b/syslib/utils_keywords.py
index f2368b6..2a33736 100644
--- a/syslib/utils_keywords.py
+++ b/syslib/utils_keywords.py
@@ -6,18 +6,15 @@
 """
 
 try:
-    from robot.libraries.BuiltIn import BuiltIn
     from robot.libraries import DateTime
+    from robot.libraries.BuiltIn import BuiltIn
 except ImportError:
     pass
-import time
 import os
+import time
 
 
-def run_until_keyword_fails(retry,
-                            retry_interval,
-                            name,
-                            *args):
+def run_until_keyword_fails(retry, retry_interval, name, *args):
     r"""
     Execute a robot keyword repeatedly until it either fails or the timeout
     value is exceeded.
diff --git a/syslib/utils_os.py b/syslib/utils_os.py
index fe97de5..dbc2c75 100755
--- a/syslib/utils_os.py
+++ b/syslib/utils_os.py
@@ -4,68 +4,67 @@
 This file contains utilities associated with the host OS.
 """
 
+import os
+import sys
+
 import bmc_ssh_utils
 import var_funcs
 
-import sys
-import os
-
 sys.path.append(os.path.join(os.path.dirname(__file__), "../lib"))
 
 
 def get_os_release_info(default_cmd="cat /etc/os-release"):
     r"""
 
-    Get os-release info and return it as a dictionary.
+        Get os-release info and return it as a dictionary.
 
-    An example of the contents of /etc/os-release:
+        An example of the contents of /etc/os-release:
 
-    NAME="Red Hat Enterprise Linux Server"
-    VERSION="7.5 (Maipo)"
-    ID="rhel"
-    ID_LIKE="fedora"
-    VARIANT="Server"
-    VARIANT_ID="server"
-    VERSION_ID="7.5"
-    PRETTY_NAME="Red Hat Enterprise Linux Server 7.5 Beta (Maipo)"
-    ANSI_COLOR="0;31"
-    CPE_NAME="cpe:/o:redhat:enterprise_linux:7.5:beta:server"
-    HOME_URL="https://www.redhat.com/"
-    BUG_REPORT_URL="https://bugzilla.redhat.com/"
+        NAME="Red Hat Enterprise Linux Server"
+        VERSION="7.5 (Maipo)"
+        ID="rhel"
+        ID_LIKE="fedora"
+        VARIANT="Server"
+        VARIANT_ID="server"
+        VERSION_ID="7.5"
+        PRETTY_NAME="Red Hat Enterprise Linux Server 7.5 Beta (Maipo)"
+        ANSI_COLOR="0;31"
+        CPE_NAME="cpe:/o:redhat:enterprise_linux:7.5:beta:server"
+        HOME_URL="https://www.redhat.com/"
+        BUG_REPORT_URL="https://bugzilla.redhat.com/"
 
-    REDHAT_BUGZILLA_PRODUCT="Red Hat Enterprise Linux 7"
-    REDHAT_BUGZILLA_PRODUCT_VERSION=7.5
-    REDHAT_SUPPORT_PRODUCT="Red Hat Enterprise Linux"
-    REDHAT_SUPPORT_PRODUCT_VERSION="7.5 Beta"
+        REDHAT_BUGZILLA_PRODUCT="Red Hat Enterprise Linux 7"
+        REDHAT_BUGZILLA_PRODUCT_VERSION=7.5
+        REDHAT_SUPPORT_PRODUCT="Red Hat Enterprise Linux"
+        REDHAT_SUPPORT_PRODUCT_VERSION="7.5 Beta"
 
-    For the data shown above, this function will return the following
-    dictionary:
+        For the data shown above, this function will return the following
+        dictionary:
 
-    result:
-      [name]:                             Red Hat Enterprise Linux Server
-      [version]:                          7.5 (Maipo)
-      [id]:                               rhel
-      [id_like]:                          fedora
-      [variant]:                          Server
-      [variant_id]:                       server
-      [version_id]:                       7.5
-      [pretty_name]:                      Red Hat Enterprise Linux Server 7.5 Beta (Maipo)
-      [ansi_color]:                       0;31
-      [cpe_name]:                         cpe:/o:redhat:enterprise_linux:7.5:beta:server
-      [home_url]:                         https://www.redhat.com/
-      [bug_report_url]:                   https://bugzilla.redhat.com/
-      [redhat_bugzilla_product]:          Red Hat Enterprise Linux 7
-      [redhat_bugzilla_product_version]:  7.5
-      [redhat_support_product]:           Red Hat Enterprise Linux
-      [redhat_support_product_version]:   7.5 Beta
+        result:
+          [name]:                             Red Hat Enterprise Linux Server
+          [version]:                          7.5 (Maipo)
+          [id]:                               rhel
+          [id_like]:                          fedora
+          [variant]:                          Server
+          [variant_id]:                       server
+          [version_id]:                       7.5
+          [pretty_name]:                      Red Hat Enterprise Linux Server 7.5 Beta (Maipo)
+          [ansi_color]:                       0;31
+          [cpe_name]:                         cpe:/o:redhat:enterprise_linux:7.5:beta:server
+          [home_url]:                         https://www.redhat.com/
+          [bug_report_url]:                   https://bugzilla.redhat.com/
+          [redhat_bugzilla_product]:          Red Hat Enterprise Linux 7
+          [redhat_bugzilla_product_version]:  7.5
+          [redhat_support_product]:           Red Hat Enterprise Linux
+          [redhat_support_product_version]:   7.5 Beta
 
 
-.   Description of argument(s):
-    default_cmd    A string command to be executed (e.g cat /etc/os-release).
+    .   Description of argument(s):
+        default_cmd    A string command to be executed (e.g cat /etc/os-release).
 
     """
 
-    stdout, stderr, rc =\
-        bmc_ssh_utils.os_execute_command(default_cmd)
+    stdout, stderr, rc = bmc_ssh_utils.os_execute_command(default_cmd)
 
     return var_funcs.key_value_outbuf_to_dict(stdout, delim="=", strip='"')
diff --git a/templates/python_pgm_template b/templates/python_pgm_template
index fcd0c6f..e2ded37 100644
--- a/templates/python_pgm_template
+++ b/templates/python_pgm_template
@@ -1,19 +1,17 @@
 #!/usr/bin/env python3
 
-from gen_print import *
 from gen_arg import *
+from gen_print import *
 from gen_valid import *
 
 parser = argparse.ArgumentParser(
-    usage='%(prog)s [OPTIONS]',
+    usage="%(prog)s [OPTIONS]",
     description="%(prog)s will...",
     formatter_class=argparse.ArgumentDefaultsHelpFormatter,
-    prefix_chars='-+')
+    prefix_chars="-+",
+)
 
-parser.add_argument(
-    '--whatever',
-    default='',
-    help='bla, bla.')
+parser.add_argument("--whatever", default="", help="bla, bla.")
 
 # Populate stock_list with options we want.
 stock_list = [("test_mode", 0), ("quiet", 0), ("debug", 0)]
@@ -42,7 +40,6 @@
 
 
 def main():
-
     gen_setup()
 
     # Your code here.
diff --git a/tools/ct_metrics/gen_csv_results.py b/tools/ct_metrics/gen_csv_results.py
index 3ad9d67..2b4df12 100755
--- a/tools/ct_metrics/gen_csv_results.py
+++ b/tools/ct_metrics/gen_csv_results.py
@@ -6,22 +6,21 @@
 http://robot-framework.readthedocs.io/en/3.0/autodoc/robot.result.html
 """
 
-import sys
-import os
-import getopt
 import csv
-import robot.errors
+import datetime
+import getopt
+import os
 import re
 import stat
-import datetime
-
-from robot.api import ExecutionResult
-from robot.result.visitor import ResultVisitor
+import sys
 from xml.etree import ElementTree
 
+import robot.errors
 from gen_arg import *
 from gen_print import *
 from gen_valid import *
+from robot.api import ExecutionResult
+from robot.result.visitor import ResultVisitor
 
 # Remove the python library path to restore with local project path later.
 save_path_0 = sys.path[0]
@@ -33,7 +32,7 @@
 
 
 this_program = sys.argv[0]
-info = " For more information:  " + this_program + '  -h'
+info = " For more information:  " + this_program + "  -h"
 if len(sys.argv) == 1:
     print(info)
     sys.exit(1)
@@ -41,64 +40,88 @@
 
 parser = argparse.ArgumentParser(
     usage=info,
-    description="%(prog)s uses a robot framework API to extract test result\
-    data from output.xml generated by robot tests. For more information on the\
-    Robot Framework API, see\
-    http://robot-framework.readthedocs.io/en/3.0/autodoc/robot.result.html",
+    description=(
+        "%(prog)s uses a robot framework API to extract test result    data"
+        " from output.xml generated by robot tests. For more information on"
+        " the    Robot Framework API, see   "
+        " http://robot-framework.readthedocs.io/en/3.0/autodoc/robot.result.html"
+    ),
     formatter_class=argparse.ArgumentDefaultsHelpFormatter,
-    prefix_chars='-+')
+    prefix_chars="-+",
+)
 
 parser.add_argument(
-    '--source',
-    '-s',
-    help='The output.xml robot test result file path.  This parameter is \
-          required.')
+    "--source",
+    "-s",
+    help=(
+        "The output.xml robot test result file path.  This parameter is       "
+        "    required."
+    ),
+)
 
 parser.add_argument(
-    '--dest',
-    '-d',
-    help='The directory path where the generated .csv files will go.  This \
-          parameter is required.')
+    "--dest",
+    "-d",
+    help=(
+        "The directory path where the generated .csv files will go.  This     "
+        "      parameter is required."
+    ),
+)
 
 parser.add_argument(
-    '--version_id',
-    help='Driver version of openbmc firmware which was used during test,\
-          e.g. "v2.1-215-g6e7eacb".  This parameter is required.')
+    "--version_id",
+    help=(
+        "Driver version of openbmc firmware which was used during test,       "
+        '   e.g. "v2.1-215-g6e7eacb".  This parameter is required.'
+    ),
+)
 
 parser.add_argument(
-    '--platform',
-    help='OpenBMC platform which was used during test,\
-          e.g. "Witherspoon".  This parameter is required.')
+    "--platform",
+    help=(
+        "OpenBMC platform which was used during test,          e.g."
+        ' "Witherspoon".  This parameter is required.'
+    ),
+)
 
 parser.add_argument(
-    '--level',
-    help='OpenBMC release level which was used during test,\
-          e.g. "Master", "OBMC920".  This parameter is required.')
+    "--level",
+    help=(
+        "OpenBMC release level which was used during test,          e.g."
+        ' "Master", "OBMC920".  This parameter is required.'
+    ),
+)
 
 parser.add_argument(
-    '--test_phase',
-    help='Name of testing phase, e.g. "DVT", "SVT", etc.\
-          This parameter is optional.',
-    default="FVT")
+    "--test_phase",
+    help=(
+        'Name of testing phase, e.g. "DVT", "SVT", etc.          This'
+        " parameter is optional."
+    ),
+    default="FVT",
+)
 
 parser.add_argument(
-    '--subsystem',
-    help='Name of the subsystem, e.g. "OPENBMC" etc.\
-          This parameter is optional.',
-    default="OPENBMC")
+    "--subsystem",
+    help=(
+        'Name of the subsystem, e.g. "OPENBMC" etc.          This parameter is'
+        " optional."
+    ),
+    default="OPENBMC",
+)
 
 parser.add_argument(
-    '--processor',
+    "--processor",
     help='Name of processor, e.g. "P9". This parameter is optional.',
-    default="OPENPOWER")
+    default="OPENPOWER",
+)
 
 
 # Populate stock_list with options we want.
 stock_list = [("test_mode", 0), ("quiet", 0), ("debug", 0)]
 
 
-def exit_function(signal_number=0,
-                  frame=None):
+def exit_function(signal_number=0, frame=None):
     r"""
     Execute whenever the program ends normally or with the signals that we
     catch (i.e. TERM, INT).
@@ -111,8 +134,7 @@
     qprint_pgm_footer()
 
 
-def signal_handler(signal_number,
-                   frame):
+def signal_handler(signal_number, frame):
     r"""
     Handle signals.  Without a function to catch a SIGTERM or SIGINT, the
     program would terminate immediately with return code 143 and without
@@ -146,8 +168,15 @@
     return True
 
 
-def parse_output_xml(xml_file_path, csv_dir_path, version_id, platform, level,
-                     test_phase, processor):
+def parse_output_xml(
+    xml_file_path,
+    csv_dir_path,
+    version_id,
+    platform,
+    level,
+    test_phase,
+    processor,
+):
     r"""
     Parse the robot-generated output.xml file and extract various test
     output data. Put the extracted information into a csv file in the "dest"
@@ -175,13 +204,19 @@
     total_non_critical_failed = 0
 
     result = ExecutionResult(xml_file_path)
-    result.configure(stat_config={'suite_stat_level': 2,
-                                  'tag_stat_combine': 'tagANDanother'})
+    result.configure(
+        stat_config={
+            "suite_stat_level": 2,
+            "tag_stat_combine": "tagANDanother",
+        }
+    )
 
     stats = result.statistics
     print("--------------------------------------")
     try:
-        total_critical_tc = stats.total.critical.passed + stats.total.critical.failed
+        total_critical_tc = (
+            stats.total.critical.passed + stats.total.critical.failed
+        )
         total_critical_passed = stats.total.critical.passed
         total_critical_failed = stats.total.critical.failed
     except AttributeError:
@@ -194,7 +229,9 @@
     except AttributeError:
         pass
 
-    print("Total Test Count:\t %d" % (total_non_critical_tc + total_critical_tc))
+    print(
+        "Total Test Count:\t %d" % (total_non_critical_tc + total_critical_tc)
+    )
 
     print("Total Critical Test Failed:\t %d" % total_critical_failed)
     print("Total Critical Test Passed:\t %d" % total_critical_passed)
@@ -221,11 +258,11 @@
     # Default Test data
     l_test_type = test_phase
 
-    l_pse_rel = 'Master'
+    l_pse_rel = "Master"
     if level:
         l_pse_rel = level
 
-    l_env = 'HW'
+    l_env = "HW"
     l_proc = processor
     l_platform_type = ""
     l_func_area = ""
@@ -252,14 +289,27 @@
     if l_driver and l_platform_type:
         print("Driver and system info set.")
     else:
-        print("Both driver and system info need to be set.\
-                CSV file is not generated.")
+        print(
+            "Both driver and system info need to be set.                CSV"
+            " file is not generated."
+        )
         sys.exit()
 
     # Default header
-    l_header = ['test_start', 'test_end', 'subsys', 'test_type',
-                'test_result', 'test_name', 'pse_rel', 'driver',
-                'env', 'proc', 'platform_type', 'test_func_area']
+    l_header = [
+        "test_start",
+        "test_end",
+        "subsys",
+        "test_type",
+        "test_result",
+        "test_name",
+        "pse_rel",
+        "driver",
+        "env",
+        "proc",
+        "platform_type",
+        "test_func_area",
+    ]
 
     l_csvlist.append(l_header)
 
@@ -274,11 +324,11 @@
     for testcase in collectDataObj.testData:
         # Functional Area: Suite Name
         # Test Name: Test Case Name
-        l_func_area = str(testcase.parent).split(' ', 1)[1]
+        l_func_area = str(testcase.parent).split(" ", 1)[1]
         l_test_name = str(testcase)
 
         # Test Result pass=0 fail=1
-        if testcase.status == 'PASS':
+        if testcase.status == "PASS":
             l_test_result = 0
         else:
             l_test_result = 1
@@ -289,18 +339,36 @@
         # Data Sequence: test_start,test_end,subsys,test_type,
         #                test_result,test_name,pse_rel,driver,
         #                env,proc,platform_type,test_func_area,
-        l_data = [l_stime, l_etime, subsystem, l_test_type, l_test_result,
-                  l_test_name, l_pse_rel, l_driver, l_env, l_proc,
-                  l_platform_type, l_func_area]
+        l_data = [
+            l_stime,
+            l_etime,
+            subsystem,
+            l_test_type,
+            l_test_result,
+            l_test_name,
+            l_pse_rel,
+            l_driver,
+            l_env,
+            l_proc,
+            l_platform_type,
+            l_func_area,
+        ]
         l_csvlist.append(l_data)
 
     # Open the file and write to the CSV file
     l_file = open(l_csvfile, "w")
-    l_writer = csv.writer(l_file, lineterminator='\n')
+    l_writer = csv.writer(l_file, lineterminator="\n")
     l_writer.writerows(l_csvlist)
     l_file.close()
     # Set file permissions 666.
-    perm = stat.S_IRUSR + stat.S_IWUSR + stat.S_IRGRP + stat.S_IWGRP + stat.S_IROTH + stat.S_IWOTH
+    perm = (
+        stat.S_IRUSR
+        + stat.S_IWUSR
+        + stat.S_IRGRP
+        + stat.S_IWGRP
+        + stat.S_IROTH
+        + stat.S_IWOTH
+    )
     os.chmod(l_csvfile, perm)
 
 
@@ -336,19 +404,19 @@
 
     bmc_version_id = ""
     bmc_platform = ""
-    with open(xml_file_path, 'rt') as output:
+    with open(xml_file_path, "rt") as output:
         tree = ElementTree.parse(output)
 
-    for node in tree.iter('msg'):
+    for node in tree.iter("msg"):
         # /etc/os-release output is logged in the XML as msg
         # Example: ${output} = VERSION_ID="v1.99.2-71-gbc49f79"
-        if '${output} = VERSION_ID=' in node.text:
+        if "${output} = VERSION_ID=" in node.text:
             # Get BMC version (e.g. v1.99.1-96-g2a46570)
             bmc_version_id = str(node.text.split("VERSION_ID=")[1])[1:-1]
 
         # Platform is logged in the XML as msg.
         # Example: ${bmc_model} = Witherspoon BMC
-        if '${bmc_model} = ' in node.text:
+        if "${bmc_model} = " in node.text:
             bmc_platform = node.text.split(" = ")[1]
 
     print_vars(bmc_version_id, bmc_platform)
@@ -356,7 +424,6 @@
 
 
 def main():
-
     if not gen_get_options(parser, stock_list):
         return False
 
@@ -365,8 +432,9 @@
 
     qprint_pgm_header()
 
-    parse_output_xml(source, dest, version_id, platform, level,
-                     test_phase, processor)
+    parse_output_xml(
+        source, dest, version_id, platform, level, test_phase, processor
+    )
 
     return True
 
diff --git a/tools/github_issues_to_csv b/tools/github_issues_to_csv
index c287f7c..ce6e1e2 100644
--- a/tools/github_issues_to_csv
+++ b/tools/github_issues_to_csv
@@ -8,10 +8,11 @@
 import argparse
 import csv
 import getpass
+
 import requests
 
 auth = None
-states = 'all'
+states = "all"
 
 
 def write_issues(response, csv_out):
@@ -22,36 +23,45 @@
     if response.status_code != 200:
         raise Exception(response.status_code)
     for issue in response.json():
-        if 'pull_request' not in issue:
-            labels = ', '.join([lable['name'] for lable in issue['labels']])
+        if "pull_request" not in issue:
+            labels = ", ".join([lable["name"] for lable in issue["labels"]])
 
             # Below lines to overcome "TypeError: 'NoneType' object has
             # no attribute '__getitem__'"
 
-            close_date = issue.get('closed_at')
+            close_date = issue.get("closed_at")
             if close_date:
-                close_date = issue.get('closed_at').split('T')[0]
+                close_date = issue.get("closed_at").split("T")[0]
 
-            assignee_resp = issue.get('assignees', 'Not Assigned')
+            assignee_resp = issue.get("assignees", "Not Assigned")
             if assignee_resp:
-                owners = ','.join([assignee_login['login'] for
-                                   assignee_login in assignee_resp])
+                owners = ",".join(
+                    [
+                        assignee_login["login"]
+                        for assignee_login in assignee_resp
+                    ]
+                )
             else:
                 owners = "Not Assigned"
 
-            milestone_resp = issue.get('milestone', 'Not Assigned')
+            milestone_resp = issue.get("milestone", "Not Assigned")
             if milestone_resp:
-                milestone_resp = milestone_resp['title'].encode('utf-8')
+                milestone_resp = milestone_resp["title"].encode("utf-8")
 
             # Change the following line to write out additional fields
-            csv_out.writerow([labels.encode('utf-8'),
-                              issue.get('title').encode('utf-8'),
-                              issue.get('state').encode('utf-8'),
-                              issue.get('created_at').split('T')[0],
-                              close_date,
-                              issue.get('html_url').encode('utf-8'),
-                              issue.get('user').get('login').encode('utf-8'),
-                              owners, milestone_resp])
+            csv_out.writerow(
+                [
+                    labels.encode("utf-8"),
+                    issue.get("title").encode("utf-8"),
+                    issue.get("state").encode("utf-8"),
+                    issue.get("created_at").split("T")[0],
+                    close_date,
+                    issue.get("html_url").encode("utf-8"),
+                    issue.get("user").get("login").encode("utf-8"),
+                    owners,
+                    milestone_resp,
+                ]
+            )
 
 
 def get_issues_from_github_to_csv(name, response):
@@ -65,36 +75,49 @@
     print(states)
 
     # Multiple requests are required if response is paged
-    if 'link' in response.headers:
-        pages = {rel[6:-1]: url[url.index('<') + 1:-1] for url, rel in
-                 (link.split(';') for link in
-                  response.headers['link'].split(','))}
-        while 'last' in pages and 'next' in pages:
-            pages = {rel[6:-1]: url[url.index('<') + 1:-1] for url, rel in
-                     (link.split(';') for link in
-                      response.headers['link'].split(','))}
-            response = requests.get(pages['next'], auth=auth)
+    if "link" in response.headers:
+        pages = {
+            rel[6:-1]: url[url.index("<") + 1 : -1]
+            for url, rel in (
+                link.split(";") for link in response.headers["link"].split(",")
+            )
+        }
+        while "last" in pages and "next" in pages:
+            pages = {
+                rel[6:-1]: url[url.index("<") + 1 : -1]
+                for url, rel in (
+                    link.split(";")
+                    for link in response.headers["link"].split(",")
+                )
+            }
+            response = requests.get(pages["next"], auth=auth)
             write_issues(response, csv_out)
-            if pages['next'] == pages['last']:
+            if pages["next"] == pages["last"]:
                 break
 
 
-parser = argparse.ArgumentParser(description="Write GitHub repository issues "
-                                             "to CSV file.")
+parser = argparse.ArgumentParser(
+    description="Write GitHub repository issues to CSV file."
+)
 
-parser.add_argument('username', nargs='?', help="GitHub user name, "
-                    "formatted as 'username'")
+parser.add_argument(
+    "username", nargs="?", help="GitHub user name, formatted as 'username'"
+)
 
-parser.add_argument('repositories', nargs='+', help="Repository names, "
-                    "formatted as 'basereponame/repo'")
+parser.add_argument(
+    "repositories",
+    nargs="+",
+    help="Repository names, formatted as 'basereponame/repo'",
+)
 
-parser.add_argument('--all', action='store_true', help="Returns both open "
-                    "and closed issues.")
+parser.add_argument(
+    "--all", action="store_true", help="Returns both open and closed issues."
+)
 
 args = parser.parse_args()
 
 if args.all:
-    state = 'all'
+    state = "all"
 
 username = args.username
 
@@ -105,16 +128,26 @@
 # To set the csv filename
 csvfilename = ""
 for repository in args.repositories:
-    csvfilename_temp = '{}'.format(repository.replace('/', '-'))
+    csvfilename_temp = "{}".format(repository.replace("/", "-"))
     csvfilename = csvfilename + csvfilename_temp
-csvfilename = csvfilename + '-issues.csv'
-with open(csvfilename, 'w') as csvfileout:
+csvfilename = csvfilename + "-issues.csv"
+with open(csvfilename, "w") as csvfileout:
     csv_out = csv.writer(csvfileout)
-    csv_out.writerow(['Labels', 'Title', 'State', 'Open Date',
-                      'Close Date', 'URL', 'Author', 'Assignees',
-                      'Milestone'])
+    csv_out.writerow(
+        [
+            "Labels",
+            "Title",
+            "State",
+            "Open Date",
+            "Close Date",
+            "URL",
+            "Author",
+            "Assignees",
+            "Milestone",
+        ]
+    )
     for repository in args.repositories:
-        l_url = 'https://api.github.com/repos/{}/issues?state={}'
+        l_url = "https://api.github.com/repos/{}/issues?state={}"
         l_url = l_url.format(repository, states)
         response = requests.get(l_url, auth=auth)
         write_issues(response, csv_out)
