44import logging
55from typing import List , Optional
66
7- import discord
87import psycopg2
98from env import (
109 DATABASE_URL ,
1110 DISABLE_SSL ,
12- POSTGRES_DATABASE ,
13- POSTGRES_HOST ,
14- POSTGRES_PASSWORD ,
15- POSTGRES_PORT ,
16- POSTGRES_USER ,
1711)
1812from run_eval import CompileResult , RunResult , SystemInfo
1913from task import LeaderboardTask
2721 setup_logging ,
2822)
2923
30- leaderboard_name_cache = LRUCache (max_size = 512 )
31-
3224logger = 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-
5827class 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 ()
0 commit comments