Skip to content

Commit 65e42a6

Browse files
author
dori
committed
fix: reformat
1 parent 435cd0f commit 65e42a6

File tree

4 files changed

+26
-49
lines changed

4 files changed

+26
-49
lines changed

src/mcp_as_a_judge/db/cleanup_service.py

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
removing records older than the retention period (default: 1 day).
66
"""
77

8-
from datetime import datetime, timedelta
8+
from datetime import datetime, timedelta, timezone
99

1010
from sqlalchemy import Engine, func
1111
from sqlmodel import Session, select
@@ -46,8 +46,8 @@ def __init__(self, engine: Engine) -> None:
4646
self.engine = engine
4747
self.max_total_sessions = MAX_TOTAL_SESSIONS
4848
self.retention_days = RECORD_RETENTION_DAYS
49-
self.last_cleanup_time = datetime.utcnow()
50-
self.last_session_cleanup_time = datetime.utcnow()
49+
self.last_cleanup_time = datetime.now(timezone.utc)
50+
self.last_session_cleanup_time = datetime.now(timezone.utc)
5151

5252
def cleanup_old_records(self) -> int:
5353
"""
@@ -58,10 +58,10 @@ def cleanup_old_records(self) -> int:
5858
Number of records deleted
5959
"""
6060
# Only run cleanup once per day
61-
if (datetime.utcnow() - self.last_cleanup_time).days < 1:
61+
if (datetime.now(timezone.utc) - self.last_cleanup_time).days < 1:
6262
return 0
6363

64-
cutoff_date = datetime.utcnow() - timedelta(days=self.retention_days)
64+
cutoff_date = datetime.now(timezone.utc) - timedelta(days=self.retention_days)
6565

6666
with Session(self.engine) as session:
6767
# Count old records
@@ -75,7 +75,7 @@ def cleanup_old_records(self) -> int:
7575
logger.info(
7676
f"🧹 Daily cleanup: No records older than {self.retention_days} days"
7777
)
78-
self.last_cleanup_time = datetime.utcnow()
78+
self.last_cleanup_time = datetime.now(timezone.utc)
7979
return 0
8080

8181
# Delete old records
@@ -85,7 +85,7 @@ def cleanup_old_records(self) -> int:
8585
session.commit()
8686

8787
# Reset cleanup tracking
88-
self.last_cleanup_time = datetime.utcnow()
88+
self.last_cleanup_time = datetime.now(timezone.utc)
8989

9090
logger.info(
9191
f"🧹 Daily cleanup: Deleted {old_count} records older than "
@@ -188,7 +188,7 @@ def cleanup_excess_sessions(self) -> int:
188188
Number of records deleted
189189
"""
190190
# Only run session cleanup once per day
191-
if (datetime.utcnow() - self.last_session_cleanup_time).days < 1:
191+
if (datetime.now(timezone.utc) - self.last_session_cleanup_time).days < 1:
192192
return 0
193193

194194
current_session_count = self.get_session_count()
@@ -198,7 +198,7 @@ def cleanup_excess_sessions(self) -> int:
198198
f"🧹 Daily session LRU cleanup: {current_session_count} sessions "
199199
f"(max: {self.max_total_sessions}) - no cleanup needed"
200200
)
201-
self.last_session_cleanup_time = datetime.utcnow()
201+
self.last_session_cleanup_time = datetime.now(timezone.utc)
202202
return 0
203203

204204
# Calculate how many sessions to remove
@@ -215,14 +215,14 @@ def cleanup_excess_sessions(self) -> int:
215215

216216
if not lru_session_ids:
217217
logger.warning("🧹 No sessions found for LRU cleanup")
218-
self.last_session_cleanup_time = datetime.utcnow()
218+
self.last_session_cleanup_time = datetime.now(timezone.utc)
219219
return 0
220220

221221
# Delete all records for these sessions
222222
deleted_count = self.delete_sessions(lru_session_ids)
223223

224224
# Reset cleanup tracking
225-
self.last_session_cleanup_time = datetime.utcnow()
225+
self.last_session_cleanup_time = datetime.now(timezone.utc)
226226

227227
logger.info(
228228
f"✅ Daily session LRU cleanup completed: removed {sessions_to_remove} sessions, "

src/mcp_as_a_judge/db/providers/sqlite_provider.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
"""
77

88
import uuid
9-
from datetime import datetime
9+
from datetime import datetime, timezone
1010

1111
from sqlalchemy import create_engine
1212
from sqlmodel import Session, SQLModel, asc, desc, select
@@ -152,7 +152,7 @@ async def save_conversation(
152152
) -> str:
153153
"""Save a conversation record to SQLite database with LRU cleanup."""
154154
record_id = str(uuid.uuid4())
155-
timestamp = datetime.utcnow()
155+
timestamp = datetime.now(timezone.utc)
156156

157157
logger.info(
158158
f"💾 Saving conversation to SQLModel SQLite DB: record {record_id} "

tests/test_conversation_history_lifecycle.py

Lines changed: 11 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,10 @@
55
"""
66

77
import asyncio
8-
from datetime import datetime, timedelta
9-
8+
from datetime import datetime, timedelta, timezone
109
import pytest
11-
1210
from mcp_as_a_judge.db.providers.sqlite_provider import SQLiteProvider
1311

14-
1512
class TestConversationHistoryLifecycle:
1613
"""Test the complete lifecycle of conversation history records."""
1714

@@ -50,17 +47,13 @@ async def test_save_retrieve_fifo_cleanup_lifecycle(self):
5047
# Records should be in reverse chronological order (newest first)
5148
sources = [r.source for r in records]
5249
expected_sources = ["tool_2", "tool_1", "tool_0"] # Newest first
53-
assert sources == expected_sources, (
54-
f"Expected {expected_sources}, got {sources}"
55-
)
50+
assert sources == expected_sources, f"Expected {expected_sources}, got {sources}"
5651

5752
# Verify timestamps are in descending order
5853
timestamps = [r.timestamp for r in records]
5954
for i in range(len(timestamps) - 1):
60-
assert timestamps[i] >= timestamps[i + 1], (
61-
"Records should be ordered newest first"
62-
)
63-
55+
assert timestamps[i] >= timestamps[i + 1], "Records should be ordered newest first"
56+
6457
print(f"✅ Phase 2: Records retrieved in correct order: {sources}")
6558

6659
# PHASE 3: Trigger FIFO cleanup by adding more records
@@ -78,16 +71,12 @@ async def test_save_retrieve_fifo_cleanup_lifecycle(self):
7871

7972
# Verify FIFO cleanup worked
8073
records = await db.get_session_conversations(session_id)
81-
assert len(records) == 3, (
82-
f"Expected 3 records after cleanup, got {len(records)}"
83-
)
74+
assert len(records) == 3, f"Expected 3 records after cleanup, got {len(records)}"
8475

8576
# Should have the 3 most recent records
8677
sources = [r.source for r in records]
8778
expected_sources = ["tool_4", "tool_3", "tool_2"] # Most recent 3
88-
assert sources == expected_sources, (
89-
f"Expected {expected_sources}, got {sources}"
90-
)
79+
assert sources == expected_sources, f"Expected {expected_sources}, got {sources}"
9180

9281
print(f"✅ Phase 3: FIFO cleanup worked correctly: {sources}")
9382

@@ -180,7 +169,7 @@ async def test_time_based_cleanup_integration(self):
180169
print(f"✅ Before cleanup: {len(records_before)} records")
181170

182171
# Force time-based cleanup by mocking old cleanup time
183-
old_time = datetime.utcnow() - timedelta(days=2)
172+
old_time = datetime.now(timezone.utc) - timedelta(days=2)
184173
db._last_cleanup_time = old_time
185174

186175
# Trigger cleanup by adding another record
@@ -194,10 +183,7 @@ async def test_time_based_cleanup_integration(self):
194183
# Records should still exist (within retention period)
195184
records_after = await db.get_session_conversations("time_test_session")
196185
assert len(records_after) == 4
197-
print(
198-
f"✅ After time-based cleanup: {len(records_after)} records "
199-
f"(within retention)"
200-
)
186+
print(f"✅ After time-based cleanup: {len(records_after)} records (within retention)")
201187

202188
@pytest.mark.asyncio
203189
async def test_lru_session_cleanup_lifecycle(self):
@@ -265,7 +251,7 @@ async def test_lru_session_cleanup_lifecycle(self):
265251
print("\n🧹 PHASE 3: Triggering LRU session cleanup...")
266252

267253
# Force cleanup by mocking old cleanup time
268-
old_time = datetime.utcnow() - timedelta(days=2)
254+
old_time = datetime.now(timezone.utc) - timedelta(days=2)
269255
db._cleanup_service.last_session_cleanup_time = old_time
270256

271257
# Trigger cleanup
@@ -280,13 +266,7 @@ async def test_lru_session_cleanup_lifecycle(self):
280266
# PHASE 4: Verify which sessions remain
281267
print("\n🔍 PHASE 4: Verifying remaining sessions...")
282268

283-
sessions_to_check = [
284-
"session_A",
285-
"session_B",
286-
"session_C",
287-
"session_D",
288-
"session_E",
289-
]
269+
sessions_to_check = ["session_A", "session_B", "session_C", "session_D", "session_E"]
290270
remaining_sessions = []
291271
deleted_sessions = []
292272

@@ -295,10 +275,7 @@ async def test_lru_session_cleanup_lifecycle(self):
295275
if records:
296276
remaining_sessions.append(session_id)
297277
last_activity = max(r.timestamp for r in records)
298-
print(
299-
f" ✅ {session_id}: {len(records)} records, "
300-
f"last activity: {last_activity}"
301-
)
278+
print(f" ✅ {session_id}: {len(records)} records, last activity: {last_activity}")
302279
else:
303280
deleted_sessions.append(session_id)
304281
print(f" ❌ {session_id}: DELETED (was least recently used)")

tests/test_sqlite_comprehensive.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
"""
55

66
import asyncio
7-
from datetime import datetime, timedelta
7+
from datetime import datetime, timedelta, timezone
88

99
import pytest
1010
from test_utils import DatabaseTestUtils
@@ -44,7 +44,7 @@ async def test_daily_cleanup_sql(self):
4444
db = SQLiteProvider()
4545

4646
# Mock old cleanup time to force daily cleanup
47-
old_time = datetime.utcnow() - timedelta(days=2)
47+
old_time = datetime.now(timezone.utc) - timedelta(days=2)
4848
db._last_cleanup_time = old_time
4949

5050
# Add a record

0 commit comments

Comments
 (0)