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})
 
