diff --git a/testrail_bot/control/celery_tasks/testrail_pipeline.py b/testrail_bot/control/celery_tasks/testrail_pipeline.py
index ba6f0ff..63f2ace 100644
--- a/testrail_bot/control/celery_tasks/testrail_pipeline.py
+++ b/testrail_bot/control/celery_tasks/testrail_pipeline.py
@@ -100,7 +100,9 @@
             return None, -2.0, run_id
 
         status_code = str(results[0]["status_id"])
-        if status_code not in [StatusEnum.test_failed, StatusEnum.product_failed]:
+        if status_code not in [StatusEnum.test_failed,
+                               StatusEnum.product_failed,
+                               StatusEnum.wont_fix]:
             return None, -3.0, run_id
         comment = apply_filters(results[-1]["comment"], bot_run)
         ratio = difflib.SequenceMatcher(
@@ -154,12 +156,15 @@
 
 def get_last_comment(case_id: int, test_run: models.TestRailTestRun) -> str:
     """
-    Retrieve the last comment associated with a test case in a TestRail test run.
+    Retrieve the last comment associated with a test case in a TestRail
+    test run.
 
     :param case_id: An integer representing the ID of the test case.
-    :param test_run: An instance of the TestRailTestRun model that the test case is associated with.
+    :param test_run: An instance of the TestRailTestRun model that the test
+    case is associated with.
 
-    :return: A string containing the filtered last comment for the specified test case in the given test run
+    :return: A string containing the filtered last comment for the specified
+    test case in the given test run
     """
     last_result = test_rail_api.get_result_for_case(
         test_run.run_id, case_id)
@@ -181,51 +186,48 @@
     """
     sim_result, ratio, run_id = process_plan(
         plan_id, case_id, last_comment, test_run)
-    if sim_result is dict:
+    per = round(100.0 * ratio, 2)
+    run_link = f"<a href=https://mirantis.testrail.com/index.php?/runs/" \
+               f"view/{run_id}>{run_id} </a>"
+    if type(sim_result) is dict:
+        prod_link = "<a href=https://mirantis.jira.com/browse/{defect}>" \
+                    "{defect}</a>".format(defect=sim_result["defects"])
+        test_link = "<a href=https://mirantis.testrail.com/index.php?/tests/" \
+                    "view/{test_id}>{test_id}</a>".format(
+                        test_id=sim_result["test_id"])
         if str(sim_result["status_id"]) == StatusEnum.retest:
             update_dict = {
                 "status_id": sim_result["status_id"],
-                "comment": "NOT marked by TestRailBot because it's not a regular fail, "
-                           "similarity with test {} {}%, you can update manualy".format(
-                    sim_result["test_id"], round(100.0 * ratio, 2))
+                "comment": f"NOT marked by TestRailBot because it's not a "
+                           f"regular fail, "
+                           f"similarity with test {sim_result['test_id']} "
+                           f"{per}%, you can update manually"
             }
-            f.write("Found similarity trace on the test <a href=https://mirantis.testrail.com/"
-                    "index.php?/tests/view/{test_id}>{test_id} </a> : \n {dict}\n"
-                    .format(test_id=sim_result["test_id"], dict=update_dict))
+            f.write(f"Found similarity trace on the test {test_link}: \n"
+                    f"{update_dict}\n")
             f.flush()
             return True
         elif ratio > 0.9:
             update_dict = {
                 "status_id": sim_result["status_id"],
-                "comment": "Marked by TestRailBot because "
-                           "of similarity with test {} {}%".format(
-                    sim_result["test_id"], round(100.0 * ratio, 2)),
+                "comment": f"Marked by TestRailBot because of similarity "
+                           f"with test {sim_result['test_id']} {per}%",
                 "defects": sim_result["defects"]
             }
-            f.write("Found similarity defect <a href=https://mirantis.jira.com/browse/"
-                    "{defect}>{defect}</a> on the test <a href=https://mirantis.testrail.com/"
-                    "index.php?/tests/view/{test_id}>{test_id} </a> : \n {dict}\n"
-                    .format(defect=sim_result["defects"],
-                            test_id=sim_result["test_id"],
-                            dict=update_dict))
+            f.write(f"Found similarity defect {prod_link} on the test "
+                    f"{test_link} : \n {update_dict}\n")
             f.flush()
             test_rail_api.add_result(test["id"], update_dict)
             return True
         elif ratio > 0.7:
-            f.write("<b style='color:red;'> Found similarity defect <a href=https://mirantis.jira.com/browse/"
-                    "{defect}>{defect}</a> on the test <a href=https://mirantis.testrail.com/"
-                    "index.php?/tests/view/{test_id}>{test_id} </a>, "
-                    "but NOT marked by TestRailBot because of similarity only"
-                    " {per}%, you can update manually \n </b>"
-                    .format(defect=sim_result["defects"],
-                            test_id=sim_result["test_id"],
-                            per=round(100.0 * ratio, 2)))
+            f.write(f"<b style='color:red;'> Found similarity defect "
+                    f"{prod_link} on the test {test_link}, but NOT marked by "
+                    f"TestRailBot because of similarity only "
+                    f"{per}%, you can update manually \n </b>")
             f.flush()
             return True
-    f.write(
-        "Similarity not found due to similarity:{per}, in run <a href=https://mirantis.testrail.com/"
-        "index.php?/runs/view/{run_id}>{run_id} </a>\n".format(
-            per=round(100.0 * ratio, 2), run_id=run_id))
+    f.write(f"Similarity not found due to similarity:{per}, "
+            f"in run {run_link}\n")
     f.flush()
     return False
 
