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