diff --git a/bin/obmc_ser_num b/bin/obmc_ser_num
index 8cd05ad..bbf43ec 100755
--- a/bin/obmc_ser_num
+++ b/bin/obmc_ser_num
@@ -49,7 +49,6 @@
 
 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).
@@ -63,7 +62,6 @@
 
 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
@@ -81,7 +79,6 @@
 
 
 def validate_parms():
-
     r"""
     Validate program parameters, etc.  Return True or False (i.e. pass/fail)
     accordingly.
@@ -93,7 +90,6 @@
 
 
 def create_http_prefix(host):
-
     r"""
     Create and return an http prefix string.
 
diff --git a/bin/process_plug_in_packages.py b/bin/process_plug_in_packages.py
index dc84105..c2e1c77 100755
--- a/bin/process_plug_in_packages.py
+++ b/bin/process_plug_in_packages.py
@@ -127,7 +127,6 @@
 
 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).
@@ -140,7 +139,6 @@
 
 
 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
@@ -158,7 +156,6 @@
 
 
 def validate_parms():
-
     r"""
     Validate program parameters, etc.  Return True or False accordingly.
     """
@@ -182,7 +179,6 @@
 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:
@@ -278,7 +274,6 @@
 
 
 def main():
-
     r"""
     This is the "main" function.  The advantage of having this function vs
     just doing this in the true mainline is that you can:
diff --git a/bin/validate_plug_ins.py b/bin/validate_plug_ins.py
index 33ace31..36b1db9 100755
--- a/bin/validate_plug_ins.py
+++ b/bin/validate_plug_ins.py
@@ -53,7 +53,6 @@
 
 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).
@@ -66,7 +65,6 @@
 
 
 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
@@ -84,7 +82,6 @@
 
 
 def validate_parms():
-
     r"""
     Validate program parameters, etc.  Return True or False accordingly.
     """
@@ -95,7 +92,6 @@
 
 
 def main():
-
     r"""
     This is the "main" function.  The advantage of having this function vs
     just doing this in the true mainline is that you can:
diff --git a/extended/run_keyword.py b/extended/run_keyword.py
index 8aadf63..c215250 100644
--- a/extended/run_keyword.py
+++ b/extended/run_keyword.py
@@ -13,7 +13,6 @@
 
 
 def setup():
-
     r"""
     Do general program setup tasks.
     """
@@ -26,7 +25,6 @@
 
 
 def validate_parms():
-
     r"""
     Validate all program parameters.
     """
@@ -37,7 +35,6 @@
 
 
 def program_teardown():
-
     r"""
     Clean up after this program.
     """
@@ -49,7 +46,6 @@
                     keyword_string,
                     quiet=0,
                     test_mode=0):
-
     r"""
     Run the keywords in the keyword string.
 
@@ -88,7 +84,6 @@
     # keywords, the user can invoke it with the following keyword string.
     # ${my_dict}=  Create Dictionary  foo=bar ; Want Dictionary  ${my_dict}
 
-
     # The user can pass multiple lib/resource paths by separating them with a
     # colon.
     lib_file_path_list = lib_file_path.split(":")
@@ -133,7 +128,6 @@
 
 
 def main_py():
-
     r"""
     Do main program processing.
     """
@@ -146,4 +140,3 @@
     test_mode = int(BuiltIn().get_variable_value("${test_mode}"))
 
     my_run_keywords(lib_file_path, keyword_string, quiet, test_mode)
-
diff --git a/gui/data/variables.py b/gui/data/variables.py
index 34b40f3..65591d7 100644
--- a/gui/data/variables.py
+++ b/gui/data/variables.py
@@ -2,25 +2,25 @@
 
 # Contains xpaths and related string constants of Security scanning.
 
+
 class variables():
 
     # xpaths for security scanning.
 
-    BROWSER=          "ff"
-    nessus_logo=      "xpath=//*[@id='logo']"
-    running_status=   "xpath=//*[@id='main']/div[1]/section/div[2]/table/tbody/tr[1]/td[4]"
-    username=         "test"
-    password=         "passw0rd"
-    xpath_exception=  "id=advancedButton"
-    xpath_add_exce=   "id='exceptionDialogButton'"
-    xpath_uname=      "xpath=//*[@id='nosession']/form/input[1]"
-    xpath_password=   "xpath=//*[@id='nosession']/form/input[2]"
-    xpath_signin=     "xpath=//*[@id='sign-in']"
+    BROWSER = "ff"
+    nessus_logo = "xpath=//*[@id='logo']"
+    running_status = "xpath=//*[@id='main']/div[1]/section/div[2]/table/tbody/tr[1]/td[4]"
+    username = "test"
+    password = "passw0rd"
+    xpath_exception = "id=advancedButton"
+    xpath_add_exce = "id='exceptionDialogButton'"
+    xpath_uname = "xpath=//*[@id='nosession']/form/input[1]"
+    xpath_password = "xpath=//*[@id='nosession']/form/input[2]"
+    xpath_signin = "xpath=//*[@id='sign-in']"
 
-    xpath_search=     "xpath=//*[@id='searchbox']/input"
-    scan_name=        "OP Full Scan"
-    xpath_op_scan=    "xpath=//*[@id='main']/div[1]/section/table/tbody"
-    xpath_launch=     "xpath=//*[@id='scans-show-launch-dropdown']/span"
-    xpath_default=    "xpath=//*[@id='scans-show-launch-default']"
-    xpath_status=     "xpath=//*[@id='main']/div[1]/section/div[2]/table/tbody/tr[1]/td[4]"
-
+    xpath_search = "xpath=//*[@id='searchbox']/input"
+    scan_name = "OP Full Scan"
+    xpath_op_scan = "xpath=//*[@id='main']/div[1]/section/table/tbody"
+    xpath_launch = "xpath=//*[@id='scans-show-launch-dropdown']/span"
+    xpath_default = "xpath=//*[@id='scans-show-launch-default']"
+    xpath_status = "xpath=//*[@id='main']/div[1]/section/div[2]/table/tbody/tr[1]/td[4]"
diff --git a/gui/obmc_gui/data/resource_variables.py b/gui/obmc_gui/data/resource_variables.py
index 8f67318..345d638 100644
--- a/gui/obmc_gui/data/resource_variables.py
+++ b/gui/obmc_gui/data/resource_variables.py
@@ -91,11 +91,11 @@
 
     # Server health elements locators.
     xpath_select_server_health = "//*[@id='header__wrapper']/div/div[3]/a[2]"
-    xpath_server_health_text  =  \
+    xpath_server_health_text =  \
         "//*[@id='header__wrapper']/div/div[3]/a[2]/span"
     xpath_select_refresh_button = \
         "//*[@id='header__wrapper']/div/div[3]/button"
-    xpath_event_severity_all =  "//*[@id='event-filter']/div[1]/button[1]"
+    xpath_event_severity_all = "//*[@id='event-filter']/div[1]/button[1]"
     xpath_event_severity_high = "//*[@id='event-filter']/div[1]/button[2]"
     xpath_event_severity_medium = "//*[@id='event-filter']/div[1]/button[3]"
     xpath_event_severity_low = "//*[@id='event-filter']/div[1]/button[4]"
diff --git a/gui/obmc_gui/lib/supporting_libs.py b/gui/obmc_gui/lib/supporting_libs.py
index 40ea135..9375fee 100644
--- a/gui/obmc_gui/lib/supporting_libs.py
+++ b/gui/obmc_gui/lib/supporting_libs.py
@@ -8,10 +8,8 @@
 
 import socket
 
+
 class supporting_libs():
 
     def get_hostname_from_ip_address(self, ip):
         return socket.gethostbyaddr(ip)[0]
-
-
-
diff --git a/lib/bmc_ssh_utils.py b/lib/bmc_ssh_utils.py
index 16a6593..c5fdc58 100755
--- a/lib/bmc_ssh_utils.py
+++ b/lib/bmc_ssh_utils.py
@@ -21,7 +21,6 @@
                         fork=0,
                         quiet=None,
                         test_mode=None):
-
     r"""
     Run the given command in an BMC SSH session and return the stdout, stderr
     and the return code.
@@ -81,7 +80,6 @@
                        fork=0,
                        quiet=None,
                        test_mode=None):
-
     r"""
     Run the given command in an OS SSH session and return the stdout, stderr
     and the return code.
@@ -139,7 +137,6 @@
                          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.
diff --git a/lib/boot_data.py b/lib/boot_data.py
index 28dda0e..8dfdff0 100755
--- a/lib/boot_data.py
+++ b/lib/boot_data.py
@@ -30,7 +30,6 @@
 
 
 def create_boot_table(file_path=None):
-
     r"""
     Read the boot table JSON file, convert it to an object and return it.
 
@@ -83,7 +82,6 @@
 
 
 def create_valid_boot_list(boot_table):
-
     r"""
     Return a list of all of the valid boot types (e.g. ['BMC Power On',
     'BMC Power Off', ....]
@@ -97,7 +95,6 @@
 
 
 def read_boot_lists(dir_path="data/boot_lists/"):
-
     r"""
     Read the contents of all the boot lists files found in the given boot lists
     directory and return dictionary of the lists.
@@ -146,7 +143,6 @@
 
 def valid_boot_list(boot_list,
                     valid_boot_types):
-
     r"""
     Verify that each entry in boot_list is a supported boot test.
 
@@ -177,7 +173,6 @@
                  boot_pass=0,
                  boot_fail=0,
                  obj_name='boot_results'):
-
         r"""
         Initialize the boot results object.
 
@@ -215,7 +210,6 @@
             self.__boot_results.add_row(boot_name)
 
     def return_total_pass_fail(self):
-
         r"""
         Return the total boot_pass and boot_fail values.  This information is
         comprised of the pass/fail values from the table plus the initial
@@ -229,7 +223,6 @@
     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
@@ -247,7 +240,6 @@
 
     def sprint_report(self,
                       header_footer="\n"):
-
         r"""
         String-print the formatted boot_resuls_table and return them.
 
@@ -266,7 +258,6 @@
 
     def print_report(self,
                      header_footer="\n"):
-
         r"""
         Print the formatted boot_resuls_table to the console.
 
@@ -276,7 +267,6 @@
         grp.rqprint(self.sprint_report(header_footer))
 
     def sprint_obj(self):
-
         r"""
         sprint the fields of this object.  This would normally be for debug
         purposes only.
@@ -293,7 +283,6 @@
         return buffer
 
     def print_obj(self):
-
         r"""
         Print the fields of this object to stdout.  This would normally be for
         debug purposes.
@@ -305,7 +294,6 @@
 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.
 
@@ -330,7 +318,6 @@
 
 
 def cleanup_boot_results_file():
-
     r"""
     Delete all boot results files whose corresponding pids are no longer
     active.
@@ -347,4 +334,3 @@
             gp.qprint_timen("Preserving " + file_path + ".")
         else:
             gc.cmd_fnc("rm -f " + file_path)
-
diff --git a/lib/code_update_utils.py b/lib/code_update_utils.py
index 27ffa34..9b9fbf7 100644
--- a/lib/code_update_utils.py
+++ b/lib/code_update_utils.py
@@ -19,8 +19,8 @@
 import variables as var
 from robot.libraries.BuiltIn import BuiltIn
 
-def verify_no_duplicate_image_priorities(image_purpose):
 
+def verify_no_duplicate_image_priorities(image_purpose):
     r"""
     Check that there are no active images with the same purpose and priority.
 
@@ -40,12 +40,11 @@
         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]))
+                           + gp.sprint_vars(image, taken_priorities[image_priority]))
         taken_priorities[image_priority] = image
 
 
 def get_non_running_bmc_software_object():
-
     r"""
     Get the URI to a BMC image from software that is not running on the BMC.
     """
@@ -60,7 +59,7 @@
 
     for image_name in images:
         _, image_properties = keyword.run_key(
-                "Get Host Software Property  " + image_name)
+            "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:
@@ -69,7 +68,6 @@
 
 
 def delete_all_pnor_images():
-
     r"""
     Delete all PNOR images from the BMC.
     """
@@ -86,7 +84,6 @@
 
 
 def wait_for_activation_state_change(version_id, initial_state):
-
     r"""
     Wait for the current activation state of ${version_id} to
     change from the state provided by the calling function.
@@ -103,13 +100,14 @@
     while (retry < 30):
         # TODO: Use retry option in run_key when available.
         status, software_state = keyword.run_key("Read Properties  " +
-                                    var.SOFTWARE_VERSION_URI + str(version_id),
-                                    ignore=1)
+                                                 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)
+                    + gp.sprint_vars(num_read_errors, read_fail_threshold)
                 BuiltIn().fail(message)
             time.sleep(10)
             continue
@@ -125,7 +123,6 @@
 
 
 def get_latest_file(dir_path):
-
     r"""
     Get the path to the latest uploaded file.
 
@@ -137,13 +134,12 @@
 
     keyword.run_key_u("Open Connection And Log In")
     status, ret_values =\
-            keyword.run_key("Execute Command On BMC  cd " + dir_path
-            + "; stat -c '%Y %n' * | sort -k1,1nr | head -n 1", ignore=1)
+        keyword.run_key("Execute Command On BMC  cd " + dir_path
+                        + "; stat -c '%Y %n' * | sort -k1,1nr | head -n 1", ignore=1)
     return ret_values.split(" ")[-1]
 
 
 def get_version_tar(tar_file_path):
-
     r"""
     Read the image version from the MANIFEST inside the tarball.
 
@@ -154,8 +150,8 @@
 
     tar = tarfile.open(tar_file_path)
     for member in tar.getmembers():
-        f=tar.extractfile(member)
-        content=f.read()
+        f = tar.extractfile(member)
+        content = f.read()
         if "version=" in content:
             content = content.split("\n")
             content = [x for x in content if "version=" in x]
@@ -166,7 +162,6 @@
 
 
 def get_image_version(file_path):
-
     r"""
     Read the file for a version object.
 
@@ -176,13 +171,12 @@
 
     keyword.run_key_u("Open Connection And Log In")
     status, ret_values =\
-            keyword.run_key("Execute Command On BMC  cat "
-            + file_path + " | grep \"version=\"", ignore=1)
+        keyword.run_key("Execute Command On BMC  cat "
+                        + file_path + " | grep \"version=\"", ignore=1)
     return (ret_values.split("\n")[0]).split("=")[-1]
 
 
 def get_image_purpose(file_path):
-
     r"""
     Read the file for a purpose object.
 
@@ -192,13 +186,12 @@
 
     keyword.run_key_u("Open Connection And Log In")
     status, ret_values =\
-            keyword.run_key("Execute Command On BMC  cat "
-            + file_path + " | grep \"purpose=\"", ignore=1)
+        keyword.run_key("Execute Command On BMC  cat "
+                        + file_path + " | grep \"purpose=\"", ignore=1)
     return ret_values.split("=")[-1]
 
 
 def get_image_path(image_version):
-
     r"""
     Query the upload image dir for the presence of image matching
     the version that was read from the MANIFEST before uploading
@@ -212,8 +205,8 @@
 
     keyword.run_key_u("Open Connection And Log In")
     status, image_list =\
-            keyword.run_key("Execute Command On BMC  ls -d "
-                            + var.IMAGE_UPLOAD_DIR_PATH + "*/")
+        keyword.run_key("Execute Command On BMC  ls -d "
+                        + var.IMAGE_UPLOAD_DIR_PATH + "*/")
 
     image_list = image_list.split("\n")
     retry = 0
@@ -228,7 +221,6 @@
 
 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
@@ -247,7 +239,7 @@
     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):
+            image_purpose == var.VERSION_PURPOSE_HOST):
         uri = var.SOFTWARE_VERSION_URI + image_version_id
         ret_values = ""
         for itr in range(timeout * 2):
@@ -269,7 +261,6 @@
 
 
 def verify_image_not_in_bmc_uploads_dir(image_version, timeout=3):
-
     r"""
     Check that an image with the given version is not unpacked inside of the
     BMCs image uploads directory. If no image is found, retry every 30 seconds
@@ -285,11 +276,10 @@
     keyword.run_key('Open Connection And Log In')
     for i in range(timeout * 2):
         stat, grep_res = keyword.run_key('Execute Command On BMC  '
-                + 'ls ' + var.IMAGE_UPLOAD_DIR_PATH + '*/MANIFEST 2>/dev/null '
-                + '| xargs grep -rl "version=' + image_version + '"')
+                                         + 'ls ' + var.IMAGE_UPLOAD_DIR_PATH + '*/MANIFEST 2>/dev/null '
+                                         + '| xargs grep -rl "version=' + image_version + '"')
         image_dir = os.path.dirname(grep_res.split('\n')[0])
         if '' != image_dir:
             keyword.run_key('Execute Command On BMC  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 1082f24..e9810c5 100644
--- a/lib/disable_warning_urllib.py
+++ b/lib/disable_warning_urllib.py
@@ -10,7 +10,7 @@
 requests_log.setLevel(logging.CRITICAL)
 requests_log.propagate = False
 
+
 class disable_warning_urllib():
     def do_nothing():
         return
-
diff --git a/lib/dump_utils.py b/lib/dump_utils.py
index 7222a59..dd15162 100755
--- a/lib/dump_utils.py
+++ b/lib/dump_utils.py
@@ -21,7 +21,6 @@
 
 
 def get_dump_dict(quiet=None):
-
     r"""
     Get dump information and return as an ordered dictionary where the keys
     are the dump IDs and the values are the full path names of the dumps.
@@ -56,7 +55,6 @@
 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.
@@ -97,7 +95,6 @@
               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.
diff --git a/lib/firmware_utils.py b/lib/firmware_utils.py
index 2964814..9885790 100755
--- a/lib/firmware_utils.py
+++ b/lib/firmware_utils.py
@@ -9,7 +9,6 @@
 
 
 def get_hard_disk_info(device="/dev/sdb"):
-
     r"""
     Get firmware information for the given device on the OS and return it as a
     dictionary.
diff --git a/lib/gen_arg.py b/lib/gen_arg.py
index 2981668..21b4eb5 100755
--- a/lib/gen_arg.py
+++ b/lib/gen_arg.py
@@ -18,7 +18,6 @@
 
 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).  Also set the following built in values:
@@ -156,7 +155,6 @@
 
 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.
@@ -185,7 +183,6 @@
 # Put this in gen_opt.py or gen_parm.py or gen_arg.py.
 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.
@@ -210,7 +207,6 @@
 
 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
diff --git a/lib/gen_cmd.py b/lib/gen_cmd.py
index deb2fd7..8f0c249 100644
--- a/lib/gen_cmd.py
+++ b/lib/gen_cmd.py
@@ -27,7 +27,6 @@
             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.
@@ -140,7 +139,6 @@
               show_err=1,
               return_stderr=0,
               ignore_err=1):
-
     r"""
     Call cmd_fnc with test_mode=0.  See cmd_fnc (above) for details.
 
@@ -153,7 +151,6 @@
 
 
 def parse_command_string(command_string):
-
     r"""
     Parse a bash command-line command string and return the result as a
     dictionary of parms.
diff --git a/lib/gen_misc.py b/lib/gen_misc.py
index d045ba9..36e2607 100755
--- a/lib/gen_misc.py
+++ b/lib/gen_misc.py
@@ -22,7 +22,6 @@
 
 
 def add_trailing_slash(dir_path):
-
     r"""
     Add a trailing slash to the directory path if it doesn't already have one
     and return it.
@@ -35,7 +34,6 @@
 
 
 def which(file_path):
-
     r"""
     Find the full path of an executable file and return it.
 
@@ -65,7 +63,6 @@
 
 
 def dft(value, default):
-
     r"""
     Return default if value is None.  Otherwise, return value.
 
@@ -89,7 +86,6 @@
 def get_mod_global(var_name,
                    default=None,
                    mod_name="__main__"):
-
     r"""
     Get module global variable value and return it.
 
@@ -124,7 +120,6 @@
 
 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.
@@ -151,7 +146,6 @@
 def set_mod_global(var_value,
                    mod_name="__main__",
                    var_name=None):
-
     r"""
     Set a global variable for a given module.
 
@@ -179,7 +173,6 @@
 
 
 def my_parm_file(prop_file_path):
-
     r"""
     Read a properties file, put the keys/values into a dictionary and return
     the dictionary.
@@ -224,7 +217,6 @@
                  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.
@@ -258,7 +250,6 @@
 
 
 def return_path_list():
-
     r"""
     This function will split the PATH environment variable into a PATH_LIST
     and return it.  Each element in the list will be normalized and have a
@@ -272,7 +263,6 @@
 
 
 def escape_bash_quotes(buffer):
-
     r"""
     Escape quotes in string and return it.
 
@@ -296,7 +286,6 @@
 
 
 def quote_bash_parm(parm):
-
     r"""
     Return the bash command line parm with single quotes if they are needed.
 
@@ -317,7 +306,6 @@
 
 def get_host_name_ip(host,
                      short_name=0):
-
     r"""
     Get the host name and the IP address for the given host and return them as
     a tuple.
@@ -346,7 +334,6 @@
 
 
 def pid_active(pid):
-
     r"""
     Return true if pid represents an active pid and false otherwise.
 
diff --git a/lib/gen_plug_in.py b/lib/gen_plug_in.py
index a01e251..461ae57 100755
--- a/lib/gen_plug_in.py
+++ b/lib/gen_plug_in.py
@@ -31,7 +31,6 @@
 
 
 def get_plug_in_base_paths():
-
     r"""
     Get plug-in base paths and return them as a list.
 
@@ -51,13 +50,13 @@
 
     return plug_in_base_path_list
 
+
 # Define global plug_in_base_path_list and call get_plug_in_base_paths to set
 # its value.
 plug_in_base_path_list = get_plug_in_base_paths()
 
 
 def find_plug_in_package(plug_in_name):
-
     r"""
     Find and return the normalized directory path of the specified plug in.
     This is done by searching the global plug_in_base_path_list.
@@ -80,7 +79,6 @@
 
 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.
@@ -131,7 +129,6 @@
 
 
 def return_integrated_plug_ins(mch_class="obmc"):
-
     r"""
     Return a list of integrated plug-ins.  Integrated plug-ins are plug-ins
     which are selected without regard for whether the user has specified them.
@@ -174,7 +171,6 @@
 
 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
diff --git a/lib/gen_plug_in_utils.py b/lib/gen_plug_in_utils.py
index 34514c6..685474c 100755
--- a/lib/gen_plug_in_utils.py
+++ b/lib/gen_plug_in_utils.py
@@ -13,7 +13,6 @@
 
 
 def get_plug_in_package_name(case=None):
-
     r"""
     Return the plug-in package name (e.g. "OS_Console", "DB_Logging").
 
@@ -34,7 +33,6 @@
 
 
 def return_plug_vars():
-
     r"""
     Return an OrderedDict which is sorted by key and which contains all of the
     plug-in environment variables.
@@ -63,8 +61,8 @@
 
     plug_var_dict = \
         collections.OrderedDict(sorted({k: v for (k, v) in
-                                       os.environ.items()
-                                       if re.match(regex, k)}.items()))
+                                        os.environ.items()
+                                        if re.match(regex, k)}.items()))
 
     # Register password values to prevent printing them out.  Any plug var
     # whose name ends in PASSWORD will be registered.
@@ -76,7 +74,6 @@
 
 
 def sprint_plug_vars(headers=1):
-
     r"""
     Sprint the plug-in environment variables (i.e. those that begin with
     AUTOBOOT_ those that begin with <plug-in package_name>_ in upper case
@@ -105,7 +102,6 @@
 
 
 def get_plug_vars():
-
     r"""
     Get all plug-in variables and put them in corresponding global variables.
 
@@ -130,7 +126,6 @@
 
 def get_plug_default(var_name,
                      default=None):
-
     r"""
     Derive and return a default value for the given parm variable.
 
@@ -211,7 +206,6 @@
 
 def srequired_plug_in(req_plug_in_names,
                       plug_in_dir_paths=None):
-
     r"""
     Return an empty string if the required plug-ins are found in
     plug_in_dir_paths.  Otherwise, return an error string.
@@ -255,7 +249,6 @@
 
 def required_plug_in(req_plug_in_names,
                      plug_in_dir_paths=None):
-
     r"""
     Return True if each of the plug-ins in req_plug_in_names can be found in
     plug_in_dir_paths  Otherwise, return False and print an error message to
diff --git a/lib/gen_print.py b/lib/gen_print.py
index fdb25c9..ab7fdc6 100755
--- a/lib/gen_print.py
+++ b/lib/gen_print.py
@@ -78,7 +78,6 @@
 
 
 def sprint_func_name(stack_frame_ix=None):
-
     r"""
     Return the function name associated with the indicated stack frame.
 
@@ -113,7 +112,6 @@
 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.
@@ -313,7 +311,7 @@
 
     # 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]))
+                                 source_lines[start_line_ix:end_line_ix + 1]))
 
     # arg_list_etc = re.sub(".*" + called_func_name, "", composite_line)
     arg_list_etc = "(" + re.sub(func_regex, "", composite_line)
@@ -374,7 +372,6 @@
 
 
 def sprint_time(buffer=""):
-
     r"""
     Return the time in the following format.
 
@@ -463,7 +460,6 @@
 
 
 def sprint_timen(buffer=""):
-
     r"""
     Append a line feed to the buffer, pass it to sprint_time and return the
     result.
@@ -473,7 +469,6 @@
 
 
 def sprint_error(buffer=""):
-
     r"""
     Return a standardized error string.  This includes:
       - A time stamp
@@ -505,7 +500,6 @@
                 loc_col1_width=col1_width,
                 trailing_char="\n",
                 key_list=None):
-
     r"""
     Print the var name/value passed to it.  If the caller lets loc_col1_width
     default, the printing lines up nicely with output generated by the
@@ -705,7 +699,6 @@
                loc_col1_width=col1_width,
                trailing_char="\n",
                key_list=None):
-
     r"""
     Figure out the name of the first argument for you and then call
     sprint_varx with it.  Therefore, the following 2 calls are equivalent:
@@ -727,7 +720,6 @@
 
 
 def sprint_vars(*args):
-
     r"""
     Sprint the values of one or more variables.
 
@@ -800,7 +792,6 @@
                   width=80,
                   line_feed=1,
                   char="-"):
-
     r"""
     Return a string of dashes to the caller.
 
@@ -824,7 +815,6 @@
 
 def sindent(text="",
             indent=0):
-
     r"""
     Pre-pend the specified number of characters to the text string (i.e.
     indent it) and return it.
@@ -843,7 +833,6 @@
 
 def sprint_call_stack(indent=0,
                       stack_frame_ix=0):
-
     r"""
     Return a call stack report for the given point in the program with line
     numbers, function names and function parameters and arguments.
@@ -924,7 +913,6 @@
 
 
 def sprint_executing(stack_frame_ix=None):
-
     r"""
     Print a line indicating what function is executing and with what parameter
     values.  This is useful for debugging.
@@ -985,7 +973,6 @@
 
 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,
@@ -1007,7 +994,7 @@
     if robot_env:
         suite_name = BuiltIn().get_variable_value("${suite_name}")
         buffer += sindent(sprint_time("Running test suite \"" + suite_name +
-                          "\".\n"), indent)
+                                      "\".\n"), indent)
 
     buffer += sindent(sprint_time() + "Running " + pgm_name + ".\n", indent)
     buffer += sindent(sprint_time() + "Program parameter values, etc.:\n\n",
@@ -1071,7 +1058,6 @@
 def sprint_error_report(error_text="\n",
                         indent=2,
                         format=None):
-
     r"""
     Return a string with a standardized report which includes the caller's
     error text, the call stack and the program header.
@@ -1121,7 +1107,6 @@
 
 def sprint_issuing(cmd_buf,
                    test_mode=0):
-
     r"""
     Return a line indicating a command that the program is about to execute.
 
@@ -1147,7 +1132,6 @@
 
 
 def sprint_pgm_footer():
-
     r"""
     Return a standardized footer that programs should print at the end of the
     program run.  It includes useful information like total run time, etc.
@@ -1165,7 +1149,6 @@
 
 
 def sprint(buffer=""):
-
     r"""
     Simply return the user's buffer.  This function is used by the qprint and
     dprint functions defined dynamically below, i.e. it would not normally be
@@ -1182,7 +1165,6 @@
 
 
 def sprintn(buffer=""):
-
     r"""
     Simply return the user's buffer with a line feed.  This function is used
     by the qprint and dprint functions defined dynamically below, i.e. it
@@ -1202,7 +1184,6 @@
 
 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.
@@ -1226,7 +1207,6 @@
 
 
 def gp_log(buffer):
-
     r"""
     Log the buffer using either python logging or BuiltIn().log depending on
     whether we are running in a robot environment.
@@ -1244,7 +1224,6 @@
 
 
 def gp_debug_print(buffer):
-
     r"""
     Print with gp_print only if gen_print_debug is set.
 
@@ -1263,7 +1242,6 @@
 def get_var_value(var_value=None,
                   default=1,
                   var_name=None):
-
     r"""
     Return either var_value, the corresponding global value or default.
 
@@ -1339,7 +1317,6 @@
 
 
 def register_passwords(*args):
-
     r"""
     Register one or more passwords which are to be hidden in output produced
     by the print functions in this module.
@@ -1370,7 +1347,6 @@
 
 
 def replace_passwords(buffer):
-
     r"""
     Return the buffer but with all registered passwords replaced by a string
     of asterisks.
@@ -1396,7 +1372,6 @@
 def create_print_wrapper_funcs(func_names,
                                stderr_func_names,
                                replace_dict):
-
     r"""
     Generate code for print wrapper functions and return the generated code as
     a string.
diff --git a/lib/gen_robot_keyword.py b/lib/gen_robot_keyword.py
index 87d8ef1..44aa1d1 100755
--- a/lib/gen_robot_keyword.py
+++ b/lib/gen_robot_keyword.py
@@ -12,7 +12,6 @@
             quiet=None,
             test_mode=None,
             ignore=0):
-
     r"""
     Run the given keyword, return the status and the keyword return values.
 
@@ -86,7 +85,6 @@
 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 e9fb54d..ec79d6b 100755
--- a/lib/gen_robot_plug_in.py
+++ b/lib/gen_robot_plug_in.py
@@ -20,7 +20,6 @@
 
 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
@@ -58,7 +57,6 @@
                               release_type="obmc",
                               quiet=None,
                               debug=None):
-
     r"""
     Call the external process_plug_in_packages.py to process the plug-in
     packages.  Return the following:
diff --git a/lib/gen_robot_print.py b/lib/gen_robot_print.py
index 7d4e7cb..ca344b2 100755
--- a/lib/gen_robot_print.py
+++ b/lib/gen_robot_print.py
@@ -28,7 +28,6 @@
 
 def rprint(buffer="",
            stream="STDOUT"):
-
     r"""
     rprint stands for "Robot Print".  This keyword will print the user's
     buffer to the console.  This keyword does not write a linefeed.  It is the
@@ -45,7 +44,6 @@
 
 def rprintn(buffer="",
             stream='STDOUT'):
-
     r"""
     rprintn stands for "Robot print with linefeed".  This keyword will print
     the user's buffer to the console along with a linefeed.  It is basically
@@ -60,7 +58,6 @@
 
 
 def sprint_vars(*args):
-
     r"""
     sprint_vars stands for "String Print Vars".  This is a robot redefinition
     of the sprint_vars function in gen_print.py.  Given a list of variable
@@ -119,7 +116,6 @@
 
 
 def sprint_pgm_header(indent=0):
-
     r"""
     Sprint a standardized header that robot programs should print at the
     beginning of the run.  The header includes useful information like command
@@ -134,7 +130,6 @@
 
 
 def sprint_error_report(error_text="\n"):
-
     r"""
     Print a standardized error report that robot programs should print on
     failure.  The report includes useful information like error text, command
@@ -150,7 +145,6 @@
 
 def sprint_issuing_keyword(cmd_buf,
                            test_mode=0):
-
     r"""
     Return a line indicating a robot command (i.e. keyword + args) that the
     program is about to execute.
@@ -177,7 +171,6 @@
 
 
 def sprint_auto_vars(headers=0):
-
     r"""
     This keyword will string print all of the Automatic Variables described in
     the Robot User's Guide using rprint_vars.
diff --git a/lib/gen_robot_ssh.py b/lib/gen_robot_ssh.py
index 1ccf703..cdd0b4f 100755
--- a/lib/gen_robot_ssh.py
+++ b/lib/gen_robot_ssh.py
@@ -20,7 +20,6 @@
 
 def sprint_connection(connection,
                       indent=0):
-
     r"""
     sprint data from the connection object to a string and return it.
 
@@ -52,7 +51,6 @@
 
 def sprint_connections(connections=None,
                        indent=0):
-
     r"""
     sprint data from the connections list to a string and return it.
 
@@ -76,7 +74,6 @@
 
 
 def find_connection(open_connection_args={}):
-
     r"""
     Find connection that matches the given connection arguments and return
     connection object.  Return False if no matching connection is found.
@@ -105,7 +102,6 @@
 
 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.
@@ -164,7 +160,6 @@
                         fork=0,
                         quiet=None,
                         test_mode=None):
-
     r"""
     Run the given command in an SSH session and return the stdout, stderr and
     the return code.
diff --git a/lib/gen_robot_utils.py b/lib/gen_robot_utils.py
index 9342412..281c27a 100644
--- a/lib/gen_robot_utils.py
+++ b/lib/gen_robot_utils.py
@@ -10,7 +10,6 @@
 
 
 def my_import_resource(path):
-
     r"""
     Import the resource file specified in path.
 
@@ -73,4 +72,3 @@
                 global_var_name = re.sub("[@&]", "$", 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 97bfedc..61c621a 100755
--- a/lib/gen_robot_valid.py
+++ b/lib/gen_robot_valid.py
@@ -14,7 +14,6 @@
 def rvalid_value(var_name,
                  invalid_values=[],
                  valid_values=[]):
-
     r"""
     Validate a robot value.
 
@@ -86,7 +85,6 @@
 
 
 def rvalid_integer(var_name):
-
     r"""
     Validate a robot integer.
 
diff --git a/lib/gen_valid.py b/lib/gen_valid.py
index ac45662..516ef98 100755
--- a/lib/gen_valid.py
+++ b/lib/gen_valid.py
@@ -15,7 +15,6 @@
                  invalid_values=[],
                  valid_values=[],
                  var_name=""):
-
     r"""
     Return an empty string if var_value is a valid value.  Otherwise, return
     an error string.
@@ -90,7 +89,6 @@
                 invalid_values=[],
                 valid_values=[],
                 var_name=""):
-
     r"""
     Return True if var_value is a valid value.  Otherwise, return False and
     print an error message to stderr.
@@ -110,7 +108,6 @@
 
 def svalid_integer(var_value,
                    var_name=""):
-
     r"""
     Return an empty string if var_value is a valid integer.  Otherwise, return
     an error string.
@@ -148,7 +145,6 @@
 
 def valid_integer(var_value,
                   var_name=""):
-
     r"""
     Return True if var_value is a valid integer.  Otherwise, return False and
     print an error message to stderr.
@@ -167,7 +163,6 @@
 
 def svalid_dir_path(var_value,
                     var_name=""):
-
     r"""
     Return an empty string if var_value is a valid directory path.  Otherwise,
     return an error string.
@@ -196,7 +191,6 @@
 
 def valid_dir_path(var_value,
                    var_name=""):
-
     r"""
     Return True if var_value is a valid integer.  Otherwise, return False and
     print an error message to stderr.
@@ -216,7 +210,6 @@
 
 def svalid_file_path(var_value,
                      var_name=""):
-
     r"""
     Return an empty string if var_value is a valid file path.  Otherwise,
     return an error string.
@@ -245,7 +238,6 @@
 
 def valid_file_path(var_value,
                     var_name=""):
-
     r"""
     Return True if var_value is a valid integer.  Otherwise, return False and
     print an error message to stderr.
diff --git a/lib/ipmi_utils.py b/lib/ipmi_utils.py
index 38d98f7..7081730 100644
--- a/lib/ipmi_utils.py
+++ b/lib/ipmi_utils.py
@@ -17,7 +17,6 @@
 
 
 def get_sol_info():
-
     r"""
     Get all SOL info and return it as a dictionary.
 
@@ -63,7 +62,6 @@
 
 
 def set_sol_setting(setting_name, setting_value):
-
     r"""
     Set SOL setting with given value.
 
@@ -79,7 +77,6 @@
 
 
 def get_lan_print_dict():
-
     r"""
     Get IPMI 'lan print' output and return it as a dictionary.
 
@@ -152,7 +149,6 @@
 
 
 def get_ipmi_power_reading(strip_watts=1):
-
     r"""
     Get IPMI power reading data and return it as a dictionary.
 
@@ -194,7 +190,6 @@
 
 
 def get_mc_info():
-
     r"""
     Get IPMI mc info data and return it as a dictionary.
 
@@ -254,7 +249,6 @@
 
 
 def get_sdr_info():
-
     r"""
     Get IPMI sdr info data and return it as a dictionary.
 
diff --git a/lib/jobs_processing.py b/lib/jobs_processing.py
index 915c64e..ea9bc67 100644
--- a/lib/jobs_processing.py
+++ b/lib/jobs_processing.py
@@ -47,7 +47,8 @@
 
     # 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()
 
@@ -57,4 +58,3 @@
 
     # Return function return codes.
     return return_dict
-
diff --git a/lib/logging_utils.py b/lib/logging_utils.py
index 2d0eb59..7fc9fd7 100644
--- a/lib/logging_utils.py
+++ b/lib/logging_utils.py
@@ -15,7 +15,6 @@
 
 
 def print_error_logs(error_logs, key_list=None):
-
     r"""
     Print the error logs to the console screen.
 
diff --git a/lib/obmc_boot_test.py b/lib/obmc_boot_test.py
index 25324fe..e431804 100755
--- a/lib/obmc_boot_test.py
+++ b/lib/obmc_boot_test.py
@@ -71,7 +71,6 @@
 
 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.
@@ -111,7 +110,6 @@
 
 
 def process_pgm_parms():
-
     r"""
     Process the program parameters by assigning them all to corresponding
     globals.  Also, set some global values that depend on program parameters.
@@ -184,7 +182,6 @@
 
 
 def initial_plug_in_setup():
-
     r"""
     Initialize all plug-in environment variables which do not change for the
     duration of the program.
@@ -236,7 +233,6 @@
 
 
 def plug_in_setup():
-
     r"""
     Initialize all changing plug-in environment variables for use by the
     plug-in programs.
@@ -316,7 +312,6 @@
 
 
 def setup():
-
     r"""
     Do general program setup tasks.
     """
@@ -381,7 +376,6 @@
 
 
 def validate_parms():
-
     r"""
     Validate all program parameters.
     """
@@ -441,7 +435,6 @@
 
 
 def my_get_state():
-
     r"""
     Get the system state plus a little bit of wrapping.
     """
@@ -459,7 +452,6 @@
 
 
 def valid_state():
-
     r"""
     Verify that our state dictionary contains no blank values.  If we don't get
     valid state data, we cannot continue to work.
@@ -472,7 +464,6 @@
 
 
 def select_boot():
-
     r"""
     Select a boot test to be run based on our current state and return the
     chosen boot type.
@@ -553,7 +544,7 @@
         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']):
+                                     boot_table[popped_boot]['start']):
                     boot_candidates.append(boot_candidate)
             else:
                 boot_candidates.append(boot_candidate)
@@ -577,7 +568,6 @@
 
 
 def print_last_boots():
-
     r"""
     Print the last ten boots done with their time stamps.
     """
@@ -592,7 +582,6 @@
 
 
 def print_defect_report(ffdc_file_list):
-
     r"""
     Print a defect report.
 
@@ -681,7 +670,6 @@
 
 
 def my_ffdc():
-
     r"""
     Collect FFDC data.
     """
@@ -706,7 +694,6 @@
 
 
 def print_test_start_message(boot_keyword):
-
     r"""
     Print a message indicating what boot test is about to run.
 
@@ -733,7 +720,6 @@
 
 
 def run_boot(boot):
-
     r"""
     Run the specified boot.
 
@@ -802,7 +788,6 @@
 
 
 def test_loop_body():
-
     r"""
     The main loop body for the loop in main_py.
 
@@ -887,7 +872,6 @@
 
 
 def obmc_boot_test_teardown():
-
     r"""
     Clean up after the Main keyword.
     """
@@ -924,7 +908,6 @@
 
 
 def test_teardown():
-
     r"""
     Clean up after this test case.
     """
@@ -940,7 +923,6 @@
 def obmc_boot_test_py(loc_boot_stack=None,
                       loc_stack_mode=None,
                       loc_quiet=None):
-
     r"""
     Do main program processing.
     """
@@ -1008,4 +990,3 @@
                         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 d3a1da3..9370847 100644
--- a/lib/openbmc_ffdc.py
+++ b/lib/openbmc_ffdc.py
@@ -18,7 +18,6 @@
 def ffdc(ffdc_dir_path=None,
          ffdc_prefix=None,
          ffdc_function_list=""):
-
     r"""
     Gather First Failure Data Capture (FFDC).
 
@@ -95,7 +94,6 @@
 
 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.
@@ -165,4 +163,3 @@
     BuiltIn().set_global_variable("${FFDC_PREFIX}", ffdc_prefix)
 
     return ffdc_dir_path, ffdc_prefix
-
diff --git a/lib/openbmc_ffdc_list.py b/lib/openbmc_ffdc_list.py
index 376d50d..25356df 100755
--- a/lib/openbmc_ffdc_list.py
+++ b/lib/openbmc_ffdc_list.py
@@ -142,6 +142,8 @@
 }
 # -----------------------------------------------------------------
 # base class for FFDC default list
+
+
 class openbmc_ffdc_list():
     def get_ffdc_bmc_cmd(self, i_type):
         r"""
@@ -152,6 +154,7 @@
         ########################################################################
         """
         return FFDC_BMC_CMD[i_type].items()
+
     def get_ffdc_bmc_file(self, i_type):
         r"""
         ########################################################################
@@ -161,6 +164,7 @@
         ########################################################################
         """
         return FFDC_BMC_FILE[i_type].items()
+
     def get_ffdc_get_request(self, i_type):
         r"""
         ########################################################################
@@ -170,6 +174,7 @@
         ########################################################################
         """
         return FFDC_GET_REQUEST[i_type].items()
+
     def get_ffdc_cmd_index(self):
         r"""
         ########################################################################
@@ -178,6 +183,7 @@
         ########################################################################
         """
         return FFDC_BMC_CMD.keys()
+
     def get_ffdc_get_request_index(self):
         r"""
         ########################################################################
@@ -186,6 +192,7 @@
         ########################################################################
         """
         return FFDC_GET_REQUEST.keys()
+
     def get_ffdc_file_index(self):
         r"""
         ########################################################################
@@ -194,6 +201,7 @@
         ########################################################################
         """
         return FFDC_BMC_FILE.keys()
+
     def get_ffdc_method_index(self):
         r"""
         ########################################################################
@@ -202,6 +210,7 @@
         ########################################################################
         """
         return FFDC_METHOD_CALL.keys()
+
     def get_ffdc_method_desc(self,
                              index):
         r"""
@@ -211,6 +220,7 @@
         ########################################################################
         """
         return FFDC_METHOD_CALL[index].keys()
+
     def get_ffdc_method_call(self, i_type):
         r"""
         ########################################################################
@@ -219,6 +229,7 @@
         ########################################################################
         """
         return FFDC_METHOD_CALL[i_type].items()
+
     def get_ffdc_os_all_distros_index(self):
         r"""
         ########################################################################
@@ -227,6 +238,7 @@
         ########################################################################
         """
         return FFDC_OS_ALL_DISTROS_FILE.keys()
+
     def get_ffdc_os_all_distros_call(self, i_type):
         r"""
         ########################################################################
@@ -235,6 +247,7 @@
         ########################################################################
         """
         return FFDC_OS_ALL_DISTROS_FILE[i_type].items()
+
     def get_ffdc_os_distro_index(self, distro):
         r"""
         ########################################################################
@@ -244,6 +257,7 @@
         """
         distro_file = "FFDC_OS_" + str(distro).upper() + "_FILE"
         return eval(distro_file).keys()
+
     def get_ffdc_os_distro_call(self, i_type, distro):
         r"""
         ########################################################################
@@ -253,6 +267,7 @@
         """
         distro_file = "FFDC_OS_" + str(distro).upper() + "_FILE"
         return eval(distro_file)[i_type].items()
+
     def get_strip_string(self, i_str):
         r"""
         ########################################################################
@@ -262,6 +277,7 @@
         ########################################################################
         """
         return ''.join(e for e in i_str if e.isalnum())
+
     def get_esel_index(self, esel_list):
         r"""
         #######################################################################
@@ -283,4 +299,3 @@
         """
         index = [i for i, str in enumerate(dump_list) if 'DUMP=' in str]
         return index[0]
-
diff --git a/lib/pythonutil.py b/lib/pythonutil.py
index 29efb78..dd23168 100644
--- a/lib/pythonutil.py
+++ b/lib/pythonutil.py
@@ -4,7 +4,7 @@
 
 def calcDottedNetmask(mask):
     bits = 0
-    for i in xrange(32-mask,32):
+    for i in xrange(32-mask, 32):
         bits |= (1 << i)
     packed_value = pack('!I', bits)
     addr = inet_ntoa(packed_value)
diff --git a/lib/ras/variables.py b/lib/ras/variables.py
index a67804b..dc7ca75 100644
--- a/lib/ras/variables.py
+++ b/lib/ras/variables.py
@@ -48,37 +48,37 @@
 #     - field2: chip address.
 #     - field3: Error log signature description.
 
-ERROR_INJECT_DICT = {'MCACALIFIR_RECV1': ['07010900', '8000000000000000',\
+ERROR_INJECT_DICT = {'MCACALIFIR_RECV1': ['07010900', '8000000000000000',
                                           DES_MCA_RECV1],
-             'MCACALIFIR_RECV32': ['07010900', '2000000000000000', \
-                                   DES_MCA_RECV32],
-             'MCACALIFIR_UE': ['07010900', '0020000000000000', DES_MCA_UE],
-             'MCS_RECV1': ['05010800', '8000000000000000', DES_MCS_RECV1],
-             'MCS_UE': ['05010800', '4000000000000000', DES_MCS_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],
+                     'MCACALIFIR_RECV32': ['07010900', '2000000000000000',
+                                           DES_MCA_RECV32],
+                     'MCACALIFIR_UE': ['07010900', '0020000000000000', DES_MCA_UE],
+                     'MCS_RECV1': ['05010800', '8000000000000000', DES_MCS_RECV1],
+                     'MCS_UE': ['05010800', '4000000000000000', DES_MCS_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'
diff --git a/lib/state.py b/lib/state.py
index e321aa7..9dda54f 100755
--- a/lib/state.py
+++ b/lib/state.py
@@ -178,7 +178,6 @@
 
 
 def return_state_constant(state_name='default'):
-
     r"""
     Return the named state dictionary constant.
     """
@@ -189,7 +188,6 @@
 
 
 def anchor_state(state):
-
     r"""
     Add regular expression anchors ("^" and "$") to the beginning and end of
     each item in the state dictionary passed in.  Return the resulting
@@ -208,7 +206,6 @@
 
 
 def strip_anchor_state(state):
-
     r"""
     Strip regular expression anchors ("^" and "$") from the beginning and end
     of each item in the state dictionary passed in.  Return the resulting
@@ -229,7 +226,6 @@
 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
@@ -286,7 +282,6 @@
                  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.
@@ -424,7 +419,6 @@
               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.
@@ -664,7 +658,6 @@
                 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
@@ -742,7 +735,6 @@
                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
@@ -834,7 +826,6 @@
 
 def wait_for_comm_cycle(start_boot_seconds,
                         quiet=None):
-
     r"""
     Wait for communications to the BMC to stop working and then resume working.
     This function is useful when you have initiated some kind of reboot.
@@ -895,4 +886,3 @@
     gp.qprint_timen("Verifying that REST API interface is working.")
     match_state = DotDict([('rest', '^1$')])
     state = wait_state(match_state, wait_time="5 mins", interval="2 seconds")
-
diff --git a/lib/tally_sheet.py b/lib/tally_sheet.py
index d91d4c4..2802008 100755
--- a/lib/tally_sheet.py
+++ b/lib/tally_sheet.py
@@ -70,7 +70,6 @@
                  row_key_field_name='Description',
                  init_fields_dict=dict(),
                  obj_name='tally_sheet'):
-
         r"""
         Create a tally sheet object.
 
@@ -108,7 +107,6 @@
                       obj_name='tally_sheet')
 
     def set_sum_fields(self, sum_fields):
-
         r"""
         Set the sum fields, i.e. create a list of field names which are to be
         summed and included on the totals line of reports.
@@ -120,7 +118,6 @@
         self.__sum_fields = sum_fields
 
     def set_calc_fields(self, calc_fields):
-
         r"""
         Set the calc fields, i.e. create a list of field names within a given
         row which are to be calculated for the user.
@@ -135,7 +132,6 @@
         self.__calc_fields = calc_fields
 
     def add_row(self, row_key, init_fields_dict=None):
-
         r"""
         Add a row to the tally sheet.
 
@@ -158,7 +154,6 @@
             self.__table[row_key] = DotDict(init_fields_dict)
 
     def update_row_field(self, row_key, field_key, value):
-
         r"""
         Update a field in a row with the specified value.
 
@@ -174,7 +169,6 @@
         self.__table[row_key][field_key] = value
 
     def inc_row_field(self, row_key, field_key):
-
         r"""
         Increment the value of the specified field in the specified row.  The
         value of the field must be numeric.
@@ -189,7 +183,6 @@
         self.__table[row_key][field_key] += 1
 
     def dec_row_field(self, row_key, field_key):
-
         r"""
         Decrement the value of the specified field in the specified row.  The
         value of the field must be numeric.
@@ -204,7 +197,6 @@
         self.__table[row_key][field_key] -= 1
 
     def calc(self):
-
         r"""
         Calculate totals and row calc fields.  Also, return totals_line
         dictionary.
@@ -235,7 +227,6 @@
         return self.__totals_line
 
     def sprint_obj(self):
-
         r"""
         sprint the fields of this object.  This would normally be for debug
         purposes.
@@ -256,7 +247,6 @@
         return buffer
 
     def print_obj(self):
-
         r"""
         print the fields of this object to stdout.  This would normally be for
         debug purposes.
@@ -265,7 +255,6 @@
         sys.stdout.write(self.sprint_obj())
 
     def sprint_report(self):
-
         r"""
         sprint the tally sheet in a formatted way.
         """
@@ -307,7 +296,6 @@
         return buffer
 
     def print_report(self):
-
         r"""
         print the tally sheet in a formatted way.
         """
diff --git a/lib/utilities.py b/lib/utilities.py
index 4a7ea42..8f23b33 100755
--- a/lib/utilities.py
+++ b/lib/utilities.py
@@ -14,7 +14,8 @@
     Example: 00:01:6C:80:02:78
     """
     return ":".join(map(lambda x: "%02x" % x, (random.randint(0x00, 0xff)
-        for _ in range(6))))
+                                               for _ in range(6))))
+
 
 def random_ip():
     r"""
@@ -22,7 +23,8 @@
     Example: 9.3.128.100
     """
     return ".".join(map(str, (random.randint(0, 255)
-        for _ in range(4))))
+                              for _ in range(4))))
+
 
 def get_sensor(module_name, value):
     m = imp.load_source('module.name', module_name)
@@ -35,7 +37,7 @@
     return 0xFF
 
 
-def get_inventory_sensor (module_name, value):
+def get_inventory_sensor(module_name, value):
     m = imp.load_source('module.name', module_name)
 
     value = string.replace(value, m.INVENTORY_ROOT, '<inventory_root>')
@@ -61,10 +63,9 @@
     l = []
     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)
+        s = s.replace('<inventory_root>', m.INVENTORY_ROOT)
         l.append(s)
 
     return l
@@ -78,13 +79,13 @@
 #  [/org/openbmc/inventory//system/chassis/motherboard/cpu0,
 #   /org/openbmc/inventory//system/chassis/motherboard/cpu1]
 ################################################################
-def  get_inventory_fru_type_list(module_name, fru):
+def get_inventory_fru_type_list(module_name, fru):
     l = []
     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)
+            s = i.replace('<inventory_root>', m.INVENTORY_ROOT)
             l.append(s)
 
     return l
@@ -98,7 +99,7 @@
 #  [/org/openbmc/inventory/system/chassis/motherboard/dimm0,
 #   /org/openbmc/inventory/system/chassis/motherboard/dimm1]
 ################################################################
-def  get_vpd_inventory_list(module_name, fru):
+def get_vpd_inventory_list(module_name, fru):
     l = []
     m = imp.load_source('module.name', module_name)
 
@@ -106,7 +107,7 @@
         x = m.ID_LOOKUP['FRU_STR'][i]
 
         if m.FRU_INSTANCES[x]['fru_type'] == fru:
-            s = x.replace('<inventory_root>',m.INVENTORY_ROOT)
+            s = x.replace('<inventory_root>', m.INVENTORY_ROOT)
             l.append(s)
 
     return l
@@ -121,11 +122,10 @@
 
 
 if __name__ == "__main__":
-   main()
+    main()
 
 
 def get_mtr_report(host=""):
-
     r"""
     Get an mtr report and return it as a dictionary of dictionaries.
 
@@ -197,7 +197,6 @@
 
 
 def get_mtr_row(host=""):
-
     r"""
     Run an mtr report and get a specified row and return it as a dictionary.
 
diff --git a/lib/utils.py b/lib/utils.py
index 2964129..22c98a5 100644
--- a/lib/utils.py
+++ b/lib/utils.py
@@ -18,7 +18,6 @@
 
 
 def set_power_policy_method():
-
     r"""
     Set the global bmc_power_policy_method to either 'Old' or 'New'.
 
@@ -75,7 +74,6 @@
 
 
 def translate_power_policy_value(policy):
-
     r"""
     Translate the policy value and return the result.
 
@@ -103,7 +101,6 @@
 
 
 def get_bmc_date_time():
-
     r"""
     Get date/time info from BMC and return as a dictionary.
 
@@ -153,7 +150,6 @@
 
 
 def get_bmc_df(df_parm_string=""):
-
     r"""
     Get df report from BMC and return as a report "object".
 
@@ -188,7 +184,6 @@
 
 
 def get_sbe():
-
     r"""
     Return CFAM value which contains such things as SBE side bit.
     """
@@ -198,8 +193,8 @@
 
     return int(out_buf, 16)
 
-def compare_mac_address(sys_mac_addr, user_mac_addr):
 
+def compare_mac_address(sys_mac_addr, user_mac_addr):
     r"""
     Return 1 if the MAC value matched, otherwise 0.
 
diff --git a/lib/utils_files.py b/lib/utils_files.py
index 3e8d0b8..ca4d72e 100644
--- a/lib/utils_files.py
+++ b/lib/utils_files.py
@@ -107,7 +107,7 @@
     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]))
+                                     file2_path]))
 
     line_to_print = now + "   " + command + "\n"
     file.write(line_to_print)
@@ -129,4 +129,4 @@
         return FILES_MATCH
     else:
         # We have at least one difference not in the skip_string.
-        return FILES_DO_NOT_MATCH
\ No newline at end of file
+        return FILES_DO_NOT_MATCH
diff --git a/lib/var_funcs.py b/lib/var_funcs.py
index d1a4b31..2cd8cf8 100644
--- a/lib/var_funcs.py
+++ b/lib/var_funcs.py
@@ -19,7 +19,6 @@
 
 
 def create_var_dict(*args):
-
     r"""
     Create a dictionary whose keys/values are the arg names/arg values passed
     to it and return it to the caller.
@@ -64,7 +63,6 @@
 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.
 
@@ -92,13 +90,12 @@
 
     format_str = '%s' + key_val_delim + '%s'
     return record_delim.join([format_str % (key, value) for (key, value) in
-                             dict.items()])
+                              dict.items()])
 
 
 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.
 
@@ -148,7 +145,6 @@
 def create_file_path(file_name_dict,
                      dir_path="/tmp/",
                      file_suffix=""):
-
     r"""
     Create a file path using the given parameters and return it.
 
@@ -166,7 +162,6 @@
 
 
 def parse_file_path(file_path):
-
     r"""
     Parse a file path created by create_file_path and return the result as a
     dictionary.
@@ -214,7 +209,6 @@
                     strip=" ",
                     to_lower=1,
                     underscores=1):
-
     r"""
     Parse a key/value string and return as a key/value tuple.
 
@@ -277,7 +271,6 @@
 def key_value_list_to_dict(list,
                            process_indent=0,
                            **args):
-
     r"""
     Convert a list containing key/value strings to a dictionary and return it.
 
@@ -406,7 +399,6 @@
 
 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.
@@ -454,7 +446,6 @@
 
 def list_to_report(report_list,
                    to_lower=1):
-
     r"""
     Convert a list containing report text lines to a report "object" and
     return it.
@@ -528,7 +519,6 @@
 
 def outbuf_to_report(out_buf,
                      **args):
-
     r"""
     Convert a text buffer containing report lines to a report "object" and
     return it.
diff --git a/lib/var_stack.py b/lib/var_stack.py
index a375b3d..9fc4e41 100644
--- a/lib/var_stack.py
+++ b/lib/var_stack.py
@@ -66,7 +66,6 @@
 
     def __init__(self,
                  obj_name='var_stack'):
-
         r"""
         Initialize a new object of this class type.
 
@@ -83,7 +82,6 @@
             self.__stack_dict = DotDict()
 
     def sprint_obj(self):
-
         r"""
         sprint the fields of this object.  This would normally be for debug
         purposes.
@@ -98,7 +96,6 @@
         return buffer
 
     def print_obj(self):
-
         r"""
         print the fields of this object to stdout.  This would normally be for
         debug purposes.
@@ -109,7 +106,6 @@
     def push(self,
              var_value,
              var_name=""):
-
         r"""
         push the var_name/var_value pair onto the stack.
 
@@ -136,7 +132,6 @@
 
     def pop(self,
             var_name=""):
-
         r"""
         Pop the value for the given var_name from the stack and return it.
 
diff --git a/lib/wrap_utils.py b/lib/wrap_utils.py
index 8434a40..2f4ee62 100755
--- a/lib/wrap_utils.py
+++ b/lib/wrap_utils.py
@@ -13,7 +13,6 @@
 
 def create_wrapper_def_and_call(base_func_name,
                                 wrap_func_name):
-
     r"""
     Return a wrapper function definition line and a base function call line.
 
@@ -113,7 +112,6 @@
                            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.
diff --git a/syslib/utils_keywords.py b/syslib/utils_keywords.py
index f5e88b2..1dcbe70 100644
--- a/syslib/utils_keywords.py
+++ b/syslib/utils_keywords.py
@@ -59,7 +59,6 @@
 
 
 def htx_error_log_to_list(htx_error_log_output):
-
     r"""
     Parse htx error log output string and return list of strings in the form
     "<field name>:<field value>".
@@ -148,7 +147,6 @@
 
 
 def build_error_dict(htx_error_log_output):
-
     r"""
     Builds error list into a list of dictionary entries.
 
@@ -218,4 +216,3 @@
         error_index += 1
 
     return error_dict
-
diff --git a/templates/pgm_template.py b/templates/pgm_template.py
index d4b4141..22c9963 100755
--- a/templates/pgm_template.py
+++ b/templates/pgm_template.py
@@ -9,7 +9,6 @@
 
 
 def suite_setup():
-
     r"""
     Do test suite setup tasks.
     """
@@ -22,7 +21,6 @@
 
 
 def test_setup():
-
     r"""
     Do test case setup tasks.
     """
@@ -32,7 +30,6 @@
 
 
 def validate_suite_parms():
-
     r"""
     Validate suite parameters.
     """
@@ -44,7 +41,6 @@
 
 
 def suite_teardown():
-
     r"""
     Clean up after this program.
     """
diff --git a/templates/python_pgm_template b/templates/python_pgm_template
index fa3b0c2..f1cfbd5 100644
--- a/templates/python_pgm_template
+++ b/templates/python_pgm_template
@@ -33,7 +33,6 @@
 
 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).
@@ -49,7 +48,6 @@
 
 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
@@ -67,7 +65,6 @@
 
 
 def validate_parms():
-
     r"""
     Validate program parameters, etc.  Return True or False (i.e. pass/fail)
     accordingly.
diff --git a/tools/github_issues_to_csv b/tools/github_issues_to_csv
index 3053e10..224bad2 100644
--- a/tools/github_issues_to_csv
+++ b/tools/github_issues_to_csv
@@ -45,13 +45,13 @@
 
             # 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])
+                              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):
@@ -68,11 +68,11 @@
     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(','))}
+                  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.headers['link'].split(','))}
             response = requests.get(pages['next'], auth=auth)
             write_issues(response, csv_out)
             if pages['next'] == pages['last']:
diff --git a/tools/oem/ibm/gen_csv_results.py b/tools/oem/ibm/gen_csv_results.py
index 2578da8..920e79e 100755
--- a/tools/oem/ibm/gen_csv_results.py
+++ b/tools/oem/ibm/gen_csv_results.py
@@ -6,7 +6,8 @@
 http://robot-framework.readthedocs.io/en/3.0/autodoc/robot.result.html
 """
 
-import sys, os
+import sys
+import os
 import getopt
 import csv
 import robot.errors
@@ -65,7 +66,6 @@
 
 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).
@@ -80,7 +80,6 @@
 
 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
@@ -98,7 +97,6 @@
 
 
 def validate_parms():
-
     r"""
     Validate program parameters, etc.  Return True or False (i.e. pass/fail)
     accordingly.
@@ -116,7 +114,6 @@
 
 
 def parse_output_xml(xml_file_path, csv_dir_path, version_id, platform):
-
     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"
@@ -168,7 +165,7 @@
     l_platform_type = ""
     l_func_area = ""
 
-    ## System data from XML meta data
+    # System data from XML meta data
     #l_system_info = get_system_details(xml_file_path)
 
     # First let us try to collect information from keyboard input
@@ -239,7 +236,6 @@
 
 
 def xml_to_csv_time(xml_datetime):
-
     r"""
     Convert the time from %Y%m%d %H:%M:%S.%f format to %Y-%m-%d-%H-%M-%S format
     and return it.
@@ -259,7 +255,6 @@
 
 
 def get_system_details(xml_file_path):
-
     r"""
     Get the system data from output.xml generated by robot and return it.
     The list returned will be in the following order: [driver,platform]
