diff --git a/lib/external_intf/management_console_utils.py b/lib/external_intf/management_console_utils.py
index 5f02732..d754bea 100644
--- a/lib/external_intf/management_console_utils.py
+++ b/lib/external_intf/management_console_utils.py
@@ -1,15 +1,14 @@
 #!/usr/bin/env python3
 
-import json
 import os
 import re
+import json
+from data import variables
 from collections import OrderedDict
 
-from data import variables
-
-bmc_rec_pattern = "^=(.*)\n(.*)\n(.*)\n(.*)\n(.*)"
-bmc_prop_pattern = [r"\w+", r"\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}", "443"]
-bmc_rec_prop = ["hostname", "address", "port", "txt"]
+bmc_rec_pattern = '^=(.*)\n(.*)\n(.*)\n(.*)\n(.*)'
+bmc_prop_pattern = [r"\w+", r"\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}", '443']
+bmc_rec_prop = ['hostname', 'address', 'port', 'txt']
 
 
 class Exception(Exception):
@@ -31,7 +30,7 @@
 
     try:
         for bmc_key, bmc_val in bmc_records.items():
-            temp_ip = bmc_val.get("address", None)
+            temp_ip = bmc_val.get('address', None)
             if bmc_ip.strip() == temp_ip.strip():
                 return True
         else:
@@ -40,9 +39,8 @@
         return exc_obj
 
 
-def validate_bmc_properties(
-    bmc_prop_pattern, bmc_prop, bmc_value, bmc_rec_valid
-):
+def validate_bmc_properties(bmc_prop_pattern, bmc_prop, bmc_value,
+                            bmc_rec_valid):
     r"""
     This function is to check pattern match in bmc properties.
 
@@ -54,10 +52,9 @@
     """
 
     try:
-        status = [
-            lambda bmc_prop: re.search(bmc_prop_pattern, bmc_prob),
-            bmc_value,
-        ]
+        status = \
+            [lambda bmc_prop: re.search(bmc_prop_pattern, bmc_prob),
+                bmc_value]
         if None in status:
             bmc_rec_valid[bmc_prop] = None
     except Exception as exc_obj:
@@ -75,17 +72,14 @@
     """
 
     try:
-        for bmc_prop_key, bmc_pattern_val in zip(
-            bmc_rec_prop, bmc_prop_pattern
-        ):
+        for bmc_prop_key, bmc_pattern_val in \
+                zip(bmc_rec_prop, bmc_prop_pattern):
             bmc_prop_value = bmc_rec_valid.get(bmc_prop_key, False)
             if bmc_rec_valid[bmc_prop_key] is not False:
-                valid_status = validate_bmc_properties(
-                    bmc_pattern_val,
-                    bmc_prop_key,
-                    bmc_prop_value,
-                    bmc_rec_valid,
-                )
+                valid_status = validate_bmc_properties(bmc_pattern_val,
+                                                       bmc_prop_key,
+                                                       bmc_prop_value,
+                                                       bmc_rec_valid)
                 if None not in bmc_rec_valid.values():
                     return bmc_rec_valid
                 else:
@@ -118,16 +112,15 @@
         exc_obj = None
         bmc_inv = OrderedDict()
         service_count = 0
-        for line in bmc_inv_record.split("\n"):
+        for line in bmc_inv_record.split('\n'):
             if line == "":
                 pass
             elif service_type in line:
-                bmc_inv["service"] = service_type
+                bmc_inv['service'] = service_type
                 service_count += 1
-            elif not line.startswith("=") and service_count == 1:
-                bmc_inv[line.split("=")[0].strip()] = str(
-                    line.split("=")[-1].strip()
-                )[1:-1]
+            elif not line.startswith('=') and service_count == 1:
+                bmc_inv[line.split('=')[0].strip()] = \
+                    str(line.split('=')[-1].strip())[1:-1]
     except Exception as exc_obj:
         return exc_obj
     finally:
@@ -168,8 +161,10 @@
         count = 0
         exe_obj = None
         bmc_inv_list = OrderedDict()
-        for match in re.finditer(bmc_rec_pattern, bmc_records, re.MULTILINE):
-            bmc_record, exc_msg = bmc_inventory(service_type, match.group())
+        for match in re.finditer(bmc_rec_pattern, bmc_records,
+                                 re.MULTILINE):
+            bmc_record, exc_msg = \
+                bmc_inventory(service_type, match.group())
             if bmc_record is not None and exc_msg is None:
                 count += 1
                 bmc_inv_list[count] = bmc_record
@@ -177,6 +172,6 @@
         return exe_obj
     finally:
         if len(bmc_inv_list) == 0:
-            "", exe_obj
+            '', exe_obj
         else:
             return bmc_inv_list, exe_obj
