Skip to content

Commit f83a35f

Browse files
committed
moved name_cache into db
1 parent fd21e5d commit f83a35f

4 files changed

Lines changed: 32 additions & 55 deletions

File tree

src/discord-cluster-manager/cogs/admin_cog.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,13 @@
1313
from consts import GitHubGPU, ModalGPU
1414
from discord import app_commands
1515
from discord.ext import commands, tasks
16-
from leaderboard_db import leaderboard_name_autocomplete
1716
from task import LeaderboardTask, make_task
1817
from ui.misc import ConfirmationView, DeleteConfirmationModal, GPUSelectionView
1918
from utils import (
2019
KernelBotError,
2120
LeaderboardItem,
2221
SubmissionItem,
22+
leaderboard_name_autocomplete,
2323
send_discord_message,
2424
setup_logging,
2525
with_error_handling,

src/discord-cluster-manager/cogs/leaderboard_cog.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
)
1111
from discord import app_commands
1212
from discord.ext import commands
13-
from leaderboard_db import leaderboard_name_autocomplete
1413
from report import MultiProgressReporter
1514
from submission import SubmissionRequest, prepare_submission
1615
from ui.misc import GPUSelectionView
@@ -22,6 +21,7 @@
2221
SubmissionItem,
2322
format_time,
2423
get_user_from_id,
24+
leaderboard_name_autocomplete,
2525
send_discord_message,
2626
setup_logging,
2727
with_error_handling,

src/discord-cluster-manager/leaderboard_db.py

Lines changed: 3 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,10 @@
44
import logging
55
from typing import List, Optional
66

7-
import discord
87
import psycopg2
98
from env import (
109
DATABASE_URL,
1110
DISABLE_SSL,
12-
POSTGRES_DATABASE,
13-
POSTGRES_HOST,
14-
POSTGRES_PASSWORD,
15-
POSTGRES_PORT,
16-
POSTGRES_USER,
1711
)
1812
from run_eval import CompileResult, RunResult, SystemInfo
1913
from task import LeaderboardTask
@@ -27,34 +21,9 @@
2721
setup_logging,
2822
)
2923

30-
leaderboard_name_cache = LRUCache(max_size=512)
31-
3224
logger = setup_logging(__name__)
3325

3426

35-
async def leaderboard_name_autocomplete(
36-
interaction: discord.Interaction,
37-
current: str,
38-
) -> list[discord.app_commands.Choice[str]]:
39-
"""Return leaderboard names that match the current typed name"""
40-
try:
41-
cached_value = leaderboard_name_cache[current]
42-
if cached_value is not None:
43-
return cached_value
44-
45-
bot = interaction.client
46-
with bot.leaderboard_db as db:
47-
leaderboards = db.get_leaderboard_names()
48-
filtered = [lb for lb in leaderboards if current.lower() in lb.lower()]
49-
leaderboard_name_cache[current] = [
50-
discord.app_commands.Choice(name=name, value=name) for name in filtered[:25]
51-
]
52-
return leaderboard_name_cache[current]
53-
except Exception as e:
54-
logger.exception("Error in leaderboard autocomplete", exc_info=e)
55-
return []
56-
57-
5827
class LeaderboardDB:
5928
def __init__(self, host: str, database: str, user: str, password: str, port: str = "5432"):
6029
"""Initialize database connection parameters"""
@@ -68,6 +37,7 @@ def __init__(self, host: str, database: str, user: str, password: str, port: str
6837
self.connection: Optional[psycopg2.extensions.connection] = None
6938
self.refcount: int = 0
7039
self.cursor: Optional[psycopg2.extensions.cursor] = None
40+
self.name_cache = LRUCache(max_size=512)
7141

7242
def connect(self) -> bool:
7343
"""Establish connection to the database"""
@@ -143,7 +113,7 @@ def create_leaderboard(self, leaderboard: LeaderboardItem) -> int:
143113
)
144114

145115
self.connection.commit()
146-
leaderboard_name_cache.invalidate() # Invalidate autocomplete cache
116+
self.name_cache.invalidate() # Invalidate autocomplete cache
147117
return leaderboard_id
148118
except psycopg2.Error as e:
149119
logger.exception("Error in leaderboard creation.", e)
@@ -205,7 +175,7 @@ def delete_leaderboard(self, leaderboard_name: str, force: bool = False):
205175
(leaderboard_name,),
206176
)
207177
self.connection.commit()
208-
leaderboard_name_cache.invalidate() # Invalidate autocomplete cache
178+
self.name_cache.invalidate() # Invalidate autocomplete cache
209179
except psycopg2.Error as e:
210180
self.connection.rollback()
211181
logger.exception("Could not delete leaderboard %s.", leaderboard_name, exc_info=e)
@@ -923,23 +893,3 @@ def validate_cli_id(self, cli_id: str) -> Optional[dict[str, str]]:
923893
self.connection.rollback()
924894
logger.exception("Error validating CLI ID %s", cli_id, exc_info=e)
925895
raise KernelBotError("Error validating CLI ID") from e
926-
927-
928-
if __name__ == "__main__":
929-
print(
930-
POSTGRES_HOST,
931-
POSTGRES_DATABASE,
932-
POSTGRES_USER,
933-
POSTGRES_PASSWORD,
934-
POSTGRES_PORT,
935-
)
936-
937-
leaderboard_db = LeaderboardDB(
938-
POSTGRES_HOST,
939-
POSTGRES_DATABASE,
940-
POSTGRES_USER,
941-
POSTGRES_PASSWORD,
942-
POSTGRES_PORT,
943-
)
944-
leaderboard_db.connect()
945-
leaderboard_db.disconnect()

src/discord-cluster-manager/utils.py

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,9 @@ def setup_logging(name: Optional[str] = None):
3131
return logger
3232

3333

34+
logger = setup_logging(__name__)
35+
36+
3437
def with_error_handling(f: callable):
3538
@functools.wraps(f)
3639
async def wrap(self, interaction: discord.Interaction, *args, **kwargs):
@@ -336,3 +339,27 @@ def format_time(value: float | str, err: Optional[float | str] = None, scale=Non
336339
return f"{value:.0f} ± {err:.1f} {unit}"
337340
else:
338341
return f"{value:.0f} {unit}"
342+
343+
344+
async def leaderboard_name_autocomplete(
345+
interaction: discord.Interaction,
346+
current: str,
347+
) -> list[discord.app_commands.Choice[str]]:
348+
"""Return leaderboard names that match the current typed name"""
349+
try:
350+
bot = interaction.client
351+
name_cache = bot.leaderboard_db.name_cache
352+
cached_value = name_cache[current]
353+
if cached_value is not None:
354+
return cached_value
355+
356+
with bot.leaderboard_db as db:
357+
leaderboards = db.get_leaderboard_names()
358+
filtered = [lb for lb in leaderboards if current.lower() in lb.lower()]
359+
name_cache[current] = [
360+
discord.app_commands.Choice(name=name, value=name) for name in filtered[:25]
361+
]
362+
return name_cache[current]
363+
except Exception as e:
364+
logger.exception("Error in leaderboard autocomplete", exc_info=e)
365+
return []

0 commit comments

Comments
 (0)