fix: resolve linting and formatting issues for CI

- Use contextlib.suppress instead of try/except/pass (SIM105)
- Prefix unused fixture arguments with underscore (ARG002)
- Replace asyncio.TimeoutError with TimeoutError (UP041)
- Apply ruff formatting to all files

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Patrick Selamy
2026-01-04 17:09:14 -05:00
co-authored by Claude Opus 4.5
parent a15086688a
commit 1f4f1fa557
31 changed files with 180 additions and 311 deletions
@@ -100,9 +100,7 @@ class DiscordChannel:
await asyncio.sleep(retry_after)
continue
logger.error(
f"Discord webhook failed: {response.status_code} {response.text}"
)
logger.error(f"Discord webhook failed: {response.status_code} {response.text}")
except httpx.TimeoutException:
logger.warning(f"Discord webhook timeout (attempt {attempt + 1})")
@@ -101,8 +101,7 @@ class AlertDispatcher:
):
# Allow half-open attempt
logger.info(
f"Circuit half-open for {channel_name}, "
f"attempt {state.half_open_attempts + 1}"
f"Circuit half-open for {channel_name}, attempt {state.half_open_attempts + 1}"
)
return True
@@ -130,8 +129,7 @@ class AlertDispatcher:
# Open the circuit
state.is_open = True
logger.warning(
f"Circuit opened for {channel_name} after "
f"{state.failure_count} failures"
f"Circuit opened for {channel_name} after {state.failure_count} failures"
)
async def _send_to_channel(
@@ -184,15 +182,11 @@ class AlertDispatcher:
channel_results=channel_results,
)
logger.info(
f"Dispatch complete: {success_count}/{len(channel_results)} succeeded"
)
logger.info(f"Dispatch complete: {success_count}/{len(channel_results)} succeeded")
return result
async def dispatch_batch(
self, alerts: list[FormattedAlert]
) -> list[DispatchResult]:
async def dispatch_batch(self, alerts: list[FormattedAlert]) -> list[DispatchResult]:
"""Dispatch multiple alerts sequentially.
Args:
@@ -215,9 +209,7 @@ class AlertDispatcher:
"failure_count": state.failure_count,
"half_open_attempts": state.half_open_attempts,
"last_failure": (
state.last_failure_time.isoformat()
if state.last_failure_time
else None
state.last_failure_time.isoformat() if state.last_failure_time else None
),
}
for name, state in self._circuit_state.items()
@@ -30,7 +30,7 @@ def truncate_address(address: str, chars: int = 4) -> str:
"""Truncate an Ethereum address to 0x1234...5678 format."""
if len(address) < chars * 2 + 4:
return address
return f"{address[:chars+2]}...{address[-chars:]}"
return f"{address[: chars + 2]}...{address[-chars:]}"
def format_usdc(amount: Decimal) -> str:
@@ -117,9 +117,7 @@ class AlertFormatter:
telegram_md = self._build_telegram_markdown(
assessment, wallet_short, risk_level, signals, links
)
plain_text = self._build_plain_text(
assessment, wallet_short, risk_level, signals, links
)
plain_text = self._build_plain_text(assessment, wallet_short, risk_level, signals, links)
return FormattedAlert(
title=title,
@@ -226,11 +224,13 @@ class AlertFormatter:
# Signals (if any)
if signals:
fields.append({
"name": "Signals",
"value": ", ".join(signals),
"inline": False,
})
fields.append(
{
"name": "Signals",
"value": ", ".join(signals),
"inline": False,
}
)
# Add detailed info for detailed verbosity
if self.verbosity == "detailed":
@@ -244,11 +244,13 @@ class AlertFormatter:
confidences.append(f"Size Anomaly: {conf:.0%}")
if confidences:
fields.append({
"name": "Confidence",
"value": " | ".join(confidences),
"inline": False,
})
fields.append(
{
"name": "Confidence",
"value": " | ".join(confidences),
"inline": False,
}
)
embed: dict[str, object] = {
"title": "🚨 Suspicious Activity Detected",
@@ -319,7 +321,26 @@ class AlertFormatter:
def _escape_telegram_markdown(self, text: str) -> str:
"""Escape special Telegram MarkdownV2 characters."""
special_chars = ["_", "*", "[", "]", "(", ")", "~", "`", ">", "#", "+", "-", "=", "|", "{", "}", ".", "!"]
special_chars = [
"_",
"*",
"[",
"]",
"(",
")",
"~",
"`",
">",
"#",
"+",
"-",
"=",
"|",
"{",
"}",
".",
"!",
]
for char in special_chars:
text = text.replace(char, f"\\{char}")
return text
@@ -355,9 +355,7 @@ class AlertHistory:
end = datetime.now(UTC)
start = end - timedelta(hours=hours)
index_key = (
f"{self.KEY_INDEX_WALLET}{wallet}" if wallet else self.KEY_INDEX_TIME
)
index_key = f"{self.KEY_INDEX_WALLET}{wallet}" if wallet else self.KEY_INDEX_TIME
count = await self.redis.zcount(
index_key,