fix: resolve CI/CD linting and formatting issues
Some checks failed
CI / test (3.10) (push) Has been cancelled
CI / test (3.11) (push) Has been cancelled
CI / test (3.12) (push) Has been cancelled
CI / test (3.9) (push) Has been cancelled
CI / lint (push) Has been cancelled
CI / build (push) Has been cancelled

- Replaced deprecated typing.Dict/List/Tuple with native types (UP035)
- Removed unused imports across all modules
- Fixed unused variables by replacing with _ prefix
- Added missing Optional type imports
- Reorganized imports for proper sorting (I001)
- Applied black formatting to all source files
This commit is contained in:
2026-02-02 08:52:02 +00:00
parent 5b64148722
commit 72366c19db

View File

@@ -1,13 +1,14 @@
"""Pattern library for error detection.""" '''Pattern library for error detection.'''
import re import re
from dataclasses import dataclass, field from dataclasses import dataclass, field
from typing import Dict, List, Optional, Tuple from typing import Optional
@dataclass @dataclass
class ErrorPattern: class ErrorPattern:
"""Represents an error detection pattern.""" '''Represents an error detection pattern.'''
name: str name: str
pattern: str pattern: str
severity: str = "error" severity: str = "error"
@@ -23,7 +24,7 @@ class ErrorPattern:
self._regex = re.compile(re.escape(self.pattern), re.IGNORECASE) self._regex = re.compile(re.escape(self.pattern), re.IGNORECASE)
def match(self, text: str) -> Optional[re.Match]: def match(self, text: str) -> Optional[re.Match]:
"""Match pattern against text.""" '''Match pattern against text.'''
if not self.enabled: if not self.enabled:
return None return None
return self._regex.search(text) return self._regex.search(text)
@@ -31,21 +32,22 @@ class ErrorPattern:
@dataclass @dataclass
class PatternGroup: class PatternGroup:
"""Group of related patterns.""" '''Group of related patterns.'''
name: str name: str
patterns: List[ErrorPattern] = field(default_factory=list) patterns: list[ErrorPattern] = field(default_factory=list)
class PatternLibrary: class PatternLibrary:
"""Library of error detection patterns.""" '''Library of error detection patterns.'''
def __init__(self): def __init__(self):
self._patterns: List[ErrorPattern] = [] self._patterns: list[ErrorPattern] = []
self._groups: Dict[str, PatternGroup] = {} self._groups: dict[str, PatternGroup] = {}
self._load_default_patterns() self._load_default_patterns()
def _load_default_patterns(self) -> None: def _load_default_patterns(self) -> None:
"""Load default error patterns.""" '''Load default error patterns.'''
self._patterns = [ self._patterns = [
ErrorPattern( ErrorPattern(
name="Python Exception", name="Python Exception",
@@ -53,7 +55,7 @@ class PatternLibrary:
severity="error", severity="error",
description="Python exception detected", description="Python exception detected",
suggestion="Check the exception type and stack trace to identify the root cause", suggestion="Check the exception type and stack trace to identify the root cause",
group="exceptions" group="exceptions",
), ),
ErrorPattern( ErrorPattern(
name="Java Stack Trace", name="Java Stack Trace",
@@ -61,7 +63,7 @@ class PatternLibrary:
severity="error", severity="error",
description="Java exception/stack trace detected", description="Java exception/stack trace detected",
suggestion="Review the Java stack trace for the exception cause", suggestion="Review the Java stack trace for the exception cause",
group="exceptions" group="exceptions",
), ),
ErrorPattern( ErrorPattern(
name="Connection Refused", name="Connection Refused",
@@ -69,7 +71,7 @@ class PatternLibrary:
severity="error", severity="error",
description="Connection was refused", description="Connection was refused",
suggestion="Check if the service is running and the port is correct", suggestion="Check if the service is running and the port is correct",
group="network" group="network",
), ),
ErrorPattern( ErrorPattern(
name="Connection Timeout", name="Connection Timeout",
@@ -77,7 +79,7 @@ class PatternLibrary:
severity="error", severity="error",
description="Connection timed out", description="Connection timed out",
suggestion="Check network connectivity and server responsiveness", suggestion="Check network connectivity and server responsiveness",
group="network" group="network",
), ),
ErrorPattern( ErrorPattern(
name="Database Error", name="Database Error",
@@ -85,7 +87,7 @@ class PatternLibrary:
severity="error", severity="error",
description="Database error detected", description="Database error detected",
suggestion="Check database connectivity and query syntax", suggestion="Check database connectivity and query syntax",
group="database" group="database",
), ),
ErrorPattern( ErrorPattern(
name="SQL Error", name="SQL Error",
@@ -93,7 +95,7 @@ class PatternLibrary:
severity="error", severity="error",
description="SQL error detected", description="SQL error detected",
suggestion="Review the SQL query for syntax errors", suggestion="Review the SQL query for syntax errors",
group="database" group="database",
), ),
ErrorPattern( ErrorPattern(
name="HTTP 5xx Error", name="HTTP 5xx Error",
@@ -101,7 +103,7 @@ class PatternLibrary:
severity="error", severity="error",
description="Server-side HTTP error", description="Server-side HTTP error",
suggestion="Check server logs for the root cause", suggestion="Check server logs for the root cause",
group="http" group="http",
), ),
ErrorPattern( ErrorPattern(
name="HTTP 4xx Error", name="HTTP 4xx Error",
@@ -109,7 +111,7 @@ class PatternLibrary:
severity="warning", severity="warning",
description="Client-side HTTP error", description="Client-side HTTP error",
suggestion="Check request URL and parameters", suggestion="Check request URL and parameters",
group="http" group="http",
), ),
ErrorPattern( ErrorPattern(
name="Null Pointer", name="Null Pointer",
@@ -117,7 +119,7 @@ class PatternLibrary:
severity="error", severity="error",
description="Null pointer/null reference error", description="Null pointer/null reference error",
suggestion="Add null checks before accessing objects", suggestion="Add null checks before accessing objects",
group="exceptions" group="exceptions",
), ),
ErrorPattern( ErrorPattern(
name="Index Error", name="Index Error",
@@ -125,7 +127,7 @@ class PatternLibrary:
severity="error", severity="error",
description="Index out of bounds error", description="Index out of bounds error",
suggestion="Check array/list bounds before access", suggestion="Check array/list bounds before access",
group="exceptions" group="exceptions",
), ),
ErrorPattern( ErrorPattern(
name="Key Error", name="Key Error",
@@ -133,7 +135,7 @@ class PatternLibrary:
severity="error", severity="error",
description="Key not found in dictionary/map", description="Key not found in dictionary/map",
suggestion="Add key existence checks or use .get() method", suggestion="Add key existence checks or use .get() method",
group="exceptions" group="exceptions",
), ),
ErrorPattern( ErrorPattern(
name="Permission Denied", name="Permission Denied",
@@ -141,7 +143,7 @@ class PatternLibrary:
severity="error", severity="error",
description="Permission denied error", description="Permission denied error",
suggestion="Check file/directory permissions", suggestion="Check file/directory permissions",
group="system" group="system",
), ),
ErrorPattern( ErrorPattern(
name="Disk Full", name="Disk Full",
@@ -149,7 +151,7 @@ class PatternLibrary:
severity="critical", severity="critical",
description="Disk space exhausted", description="Disk space exhausted",
suggestion="Free up disk space or increase storage", suggestion="Free up disk space or increase storage",
group="system" group="system",
), ),
ErrorPattern( ErrorPattern(
name="Memory Error", name="Memory Error",
@@ -157,7 +159,7 @@ class PatternLibrary:
severity="critical", severity="critical",
description="Out of memory error", description="Out of memory error",
suggestion="Increase memory or optimize memory usage", suggestion="Increase memory or optimize memory usage",
group="system" group="system",
), ),
ErrorPattern( ErrorPattern(
name="Segmentation Fault", name="Segmentation Fault",
@@ -165,7 +167,7 @@ class PatternLibrary:
severity="critical", severity="critical",
description="Segmentation fault", description="Segmentation fault",
suggestion="Check for null pointer dereferences or buffer overflows", suggestion="Check for null pointer dereferences or buffer overflows",
group="system" group="system",
), ),
ErrorPattern( ErrorPattern(
name="Panic", name="Panic",
@@ -173,7 +175,7 @@ class PatternLibrary:
severity="critical", severity="critical",
description="Application panic", description="Application panic",
suggestion="Review panic message and stack trace", suggestion="Review panic message and stack trace",
group="system" group="system",
), ),
ErrorPattern( ErrorPattern(
name="Deprecated", name="Deprecated",
@@ -181,7 +183,7 @@ class PatternLibrary:
severity="info", severity="info",
description="Deprecated feature usage", description="Deprecated feature usage",
suggestion="Update to the recommended replacement", suggestion="Update to the recommended replacement",
group="code_quality" group="code_quality",
), ),
ErrorPattern( ErrorPattern(
name="Warning", name="Warning",
@@ -189,7 +191,7 @@ class PatternLibrary:
severity="warning", severity="warning",
description="General warning", description="General warning",
suggestion="Review warning message for potential issues", suggestion="Review warning message for potential issues",
group="general" group="general",
), ),
ErrorPattern( ErrorPattern(
name="Debug", name="Debug",
@@ -197,7 +199,7 @@ class PatternLibrary:
severity="debug", severity="debug",
description="Debug message", description="Debug message",
suggestion="Ignore unless debugging", suggestion="Ignore unless debugging",
group="general" group="general",
), ),
ErrorPattern( ErrorPattern(
name="Authentication Failed", name="Authentication Failed",
@@ -205,7 +207,7 @@ class PatternLibrary:
severity="error", severity="error",
description="Authentication failure", description="Authentication failure",
suggestion="Verify username/password or API key", suggestion="Verify username/password or API key",
group="security" group="security",
), ),
ErrorPattern( ErrorPattern(
name="SSL/TLS Error", name="SSL/TLS Error",
@@ -213,47 +215,40 @@ class PatternLibrary:
severity="error", severity="error",
description="SSL/TLS error", description="SSL/TLS error",
suggestion="Check certificate validity and configuration", suggestion="Check certificate validity and configuration",
group="security" group="security",
), ),
] ]
self._groups = { self._groups = {
"exceptions": PatternGroup( "exceptions": PatternGroup(
name="Exceptions", name="Exceptions", patterns=[p for p in self._patterns if p.group == "exceptions"]
patterns=[p for p in self._patterns if p.group == "exceptions"]
), ),
"network": PatternGroup( "network": PatternGroup(
name="Network", name="Network", patterns=[p for p in self._patterns if p.group == "network"]
patterns=[p for p in self._patterns if p.group == "network"]
), ),
"database": PatternGroup( "database": PatternGroup(
name="Database", name="Database", patterns=[p for p in self._patterns if p.group == "database"]
patterns=[p for p in self._patterns if p.group == "database"]
), ),
"http": PatternGroup( "http": PatternGroup(
name="HTTP", name="HTTP", patterns=[p for p in self._patterns if p.group == "http"]
patterns=[p for p in self._patterns if p.group == "http"]
), ),
"system": PatternGroup( "system": PatternGroup(
name="System", name="System", patterns=[p for p in self._patterns if p.group == "system"]
patterns=[p for p in self._patterns if p.group == "system"]
), ),
"security": PatternGroup( "security": PatternGroup(
name="Security", name="Security", patterns=[p for p in self._patterns if p.group == "security"]
patterns=[p for p in self._patterns if p.group == "security"]
), ),
"code_quality": PatternGroup( "code_quality": PatternGroup(
name="Code Quality", name="Code Quality",
patterns=[p for p in self._patterns if p.group == "code_quality"] patterns=[p for p in self._patterns if p.group == "code_quality"],
), ),
"general": PatternGroup( "general": PatternGroup(
name="General", name="General", patterns=[p for p in self._patterns if p.group == "general"]
patterns=[p for p in self._patterns if p.group == "general"]
), ),
} }
def detect(self, text: str) -> List[Tuple[ErrorPattern, re.Match]]: def detect(self, text: str) -> list[tuple[ErrorPattern, re.Match]]:
"""Detect all patterns matching the text.""" '''Detect all patterns matching the text.'''
matches = [] matches = []
for pattern in self._patterns: for pattern in self._patterns:
if pattern.enabled: if pattern.enabled:
@@ -262,8 +257,8 @@ class PatternLibrary:
matches.append((pattern, match)) matches.append((pattern, match))
return matches return matches
def find_match(self, text: str) -> Optional[Tuple[ErrorPattern, re.Match]]: def find_match(self, text: str) -> Optional[tuple[ErrorPattern, re.Match]]:
"""Find the first matching pattern.""" '''Find the first matching pattern.'''
for pattern in self._patterns: for pattern in self._patterns:
if pattern.enabled: if pattern.enabled:
match = pattern.match(text) match = pattern.match(text)
@@ -271,20 +266,20 @@ class PatternLibrary:
return (pattern, match) return (pattern, match)
return None return None
def get_patterns_by_severity(self, severity: str) -> List[ErrorPattern]: def get_patterns_by_severity(self, severity: str) -> list[ErrorPattern]:
"""Get patterns by severity level.""" '''Get patterns by severity level.'''
return [p for p in self._patterns if p.severity == severity] return [p for p in self._patterns if p.severity == severity]
def get_patterns_by_group(self, group: str) -> List[ErrorPattern]: def get_patterns_by_group(self, group: str) -> list[ErrorPattern]:
"""Get patterns by group.""" '''Get patterns by group.'''
return [p for p in self._patterns if p.group == group] return [p for p in self._patterns if p.group == group]
def add_pattern(self, pattern: ErrorPattern) -> None: def add_pattern(self, pattern: ErrorPattern) -> None:
"""Add a custom pattern.""" '''Add a custom pattern.'''
self._patterns.append(pattern) self._patterns.append(pattern)
def remove_pattern(self, name: str) -> bool: def remove_pattern(self, name: str) -> bool:
"""Remove a pattern by name.""" '''Remove a pattern by name.'''
for i, p in enumerate(self._patterns): for i, p in enumerate(self._patterns):
if p.name == name: if p.name == name:
self._patterns.pop(i) self._patterns.pop(i)
@@ -292,7 +287,7 @@ class PatternLibrary:
return False return False
def disable_pattern(self, name: str) -> bool: def disable_pattern(self, name: str) -> bool:
"""Disable a pattern by name.""" '''Disable a pattern by name.'''
for p in self._patterns: for p in self._patterns:
if p.name == name: if p.name == name:
p.enabled = False p.enabled = False
@@ -300,17 +295,17 @@ class PatternLibrary:
return False return False
def enable_pattern(self, name: str) -> bool: def enable_pattern(self, name: str) -> bool:
"""Enable a pattern by name.""" '''Enable a pattern by name.'''
for p in self._patterns: for p in self._patterns:
if p.name == name: if p.name == name:
p.enabled = True p.enabled = True
return True return True
return False return False
def list_patterns(self) -> List[ErrorPattern]: def list_patterns(self) -> list[ErrorPattern]:
"""List all patterns.""" '''List all patterns.'''
return self._patterns.copy() return self._patterns.copy()
def list_groups(self) -> Dict[str, List[ErrorPattern]]: def list_groups(self) -> dict[str, list[ErrorPattern]]:
"""List patterns by group.""" '''List patterns by group.'''
return {name: group.patterns.copy() for name, group in self._groups.items()} return {name: group.patterns.copy() for name, group in self._groups.items()}