From 7f3f808ac37405221a147342d9bb5fba289fc9d9 Mon Sep 17 00:00:00 2001 From: PawanMohit16 Date: Fri, 16 Jan 2026 11:13:40 +0000 Subject: [PATCH 1/2] Simplify regex pattern in get_leaders --- backend/apps/owasp/models/common.py | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/backend/apps/owasp/models/common.py b/backend/apps/owasp/models/common.py index 79193122f7..6510f3ff1c 100644 --- a/backend/apps/owasp/models/common.py +++ b/backend/apps/owasp/models/common.py @@ -2,7 +2,6 @@ from __future__ import annotations -import itertools import logging import re from urllib.parse import urlparse @@ -198,17 +197,23 @@ def get_leaders(self): leaders = [] for line in content.split("\n"): - leaders.extend( - [ - name - for name in itertools.chain( - *re.findall( - r"[-*]\s*\[\s*([^(]+?)\s*(?:\([^)]*\))?\]|\*\s*([\w\s]+)", line.strip() - ) - ) - if name.strip() - ] + stripped_line = line.strip() + names = [] + + bracketed_pattern = ( + r"[-*]\s{0,3}\[\s{0,3}([^\]\(]{1,200})" + r"(?:\s{0,3}\([^)]{0,100}\))?\s{0,3}\]" ) + names.extend(re.findall(bracketed_pattern, stripped_line)) + names.extend(re.findall(r"\*\s{0,3}([\w\s]{1,200})", stripped_line)) + + cleaned_names = [] + for raw_name in names: + if raw_name.strip(): + cleaned = re.sub(r"\s{0,3}\([^)]{0,100}\)\s{0,3}$", "", raw_name).strip() + cleaned_names.append(cleaned) + + leaders.extend(cleaned_names) return leaders From 3b822e33d691f9b3123f5521eeef5f4fc9cd5ab7 Mon Sep 17 00:00:00 2001 From: Arkadii Yakovets Date: Sat, 17 Jan 2026 14:38:18 -0800 Subject: [PATCH 2/2] Update code --- backend/apps/owasp/models/common.py | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/backend/apps/owasp/models/common.py b/backend/apps/owasp/models/common.py index 6510f3ff1c..e095236a9c 100644 --- a/backend/apps/owasp/models/common.py +++ b/backend/apps/owasp/models/common.py @@ -196,21 +196,23 @@ def get_leaders(self): return [] leaders = [] + # Compile regex patterns once per method call (before loop). + re_bracketed_pattern = re.compile( + r"[-*]\s{0,3}\[\s{0,3}([^\]\(]{1,200})(?:\s{0,3}\([^)]{0,100}\))?\s{0,3}\]" + ) + re_plain_pattern = re.compile(r"\*\s{0,3}([\w\s]{1,200})") + re_parenthetical_cleanup_pattern = re.compile(r"\s{0,3}\([^)]{0,100}\)\s{0,3}$") for line in content.split("\n"): stripped_line = line.strip() names = [] - bracketed_pattern = ( - r"[-*]\s{0,3}\[\s{0,3}([^\]\(]{1,200})" - r"(?:\s{0,3}\([^)]{0,100}\))?\s{0,3}\]" - ) - names.extend(re.findall(bracketed_pattern, stripped_line)) - names.extend(re.findall(r"\*\s{0,3}([\w\s]{1,200})", stripped_line)) + names.extend(re_bracketed_pattern.findall(stripped_line)) + names.extend(re_plain_pattern.findall(stripped_line)) cleaned_names = [] for raw_name in names: if raw_name.strip(): - cleaned = re.sub(r"\s{0,3}\([^)]{0,100}\)\s{0,3}$", "", raw_name).strip() + cleaned = re_parenthetical_cleanup_pattern.sub("", raw_name).strip() cleaned_names.append(cleaned) leaders.extend(cleaned_names)