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.
