Skip to content

Commit df65573

Browse files
committed
move db helper typedefs into db file
1 parent 6642c26 commit df65573

7 files changed

Lines changed: 68 additions & 71 deletions

File tree

src/discord-cluster-manager/api/main.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@
1010
from consts import SubmissionMode
1111
from fastapi import Depends, FastAPI, Header, HTTPException, UploadFile
1212
from fastapi.responses import StreamingResponse
13+
from leaderboard_db import LeaderboardRankedEntry
1314
from submission import SubmissionRequest
14-
from utils import LeaderboardRankedEntry
1515

1616
from .utils import _handle_discord_oauth, _handle_github_oauth, _run_submission
1717

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

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,11 @@
1313
from consts import GitHubGPU, ModalGPU
1414
from discord import app_commands
1515
from discord.ext import commands, tasks
16+
from leaderboard_db import LeaderboardItem, SubmissionItem
1617
from task import LeaderboardTask, make_task
1718
from ui.misc import ConfirmationView, DeleteConfirmationModal, GPUSelectionView
1819
from utils import (
1920
KernelBotError,
20-
LeaderboardItem,
21-
SubmissionItem,
2221
leaderboard_name_autocomplete,
2322
send_discord_message,
2423
setup_logging,

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

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,17 @@
1010
)
1111
from discord import app_commands
1212
from discord.ext import commands
13+
from leaderboard_db import (
14+
LeaderboardItem,
15+
LeaderboardRankedEntry,
16+
RunItem,
17+
SubmissionItem,
18+
)
1319
from report import MultiProgressReporter
1420
from submission import SubmissionRequest, prepare_submission
1521
from ui.misc import GPUSelectionView
1622
from ui.table import create_table
1723
from utils import (
18-
LeaderboardItem,
19-
LeaderboardRankedEntry,
20-
RunItem,
21-
SubmissionItem,
2224
format_time,
2325
get_user_from_id,
2426
leaderboard_name_autocomplete,

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,10 @@
1414
from discord import app_commands
1515
from discord.app_commands import Choice
1616
from discord.ext import commands
17+
from leaderboard_db import RunItem, SubmissionItem
1718
from report import MultiProgressReporter
1819
from task import make_task
19-
from utils import RunItem, SubmissionItem, send_discord_message, setup_logging, with_error_handling
20+
from utils import send_discord_message, setup_logging, with_error_handling
2021

2122
logger = setup_logging()
2223

src/discord-cluster-manager/leaderboard_db.py

Lines changed: 55 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,14 @@
22
import datetime
33
import json
44
import logging
5-
from typing import List, Optional
5+
from typing import List, NotRequired, Optional, TypedDict
66

77
import psycopg2
88
from run_eval import CompileResult, RunResult, SystemInfo
99
from task import LeaderboardTask
1010
from utils import (
1111
KernelBotError,
12-
LeaderboardItem,
13-
LeaderboardRankedEntry,
1412
LRUCache,
15-
RunItem,
16-
SubmissionItem,
1713
setup_logging,
1814
)
1915

@@ -79,7 +75,7 @@ def __exit__(self, exc_type, exc_val, exc_tb):
7975
if self.refcount == 0:
8076
self.disconnect()
8177

82-
def create_leaderboard(self, leaderboard: LeaderboardItem) -> int:
78+
def create_leaderboard(self, leaderboard: "LeaderboardItem") -> int:
8379
try:
8480
self.cursor.execute(
8581
"""
@@ -342,7 +338,7 @@ def get_leaderboard_names(self) -> list[str]:
342338
self.cursor.execute("SELECT name FROM leaderboard.leaderboard")
343339
return [x[0] for x in self.cursor.fetchall()]
344340

345-
def get_leaderboards(self) -> list[LeaderboardItem]:
341+
def get_leaderboards(self) -> list["LeaderboardItem"]:
346342
self.cursor.execute(
347343
"""
348344
SELECT id, name, deadline, task, creator_id
@@ -393,7 +389,7 @@ def get_leaderboard_gpu_types(self, leaderboard_name: str) -> List[str] | None:
393389
else:
394390
return None
395391

396-
def get_leaderboard(self, leaderboard_name: str) -> LeaderboardItem | None:
392+
def get_leaderboard(self, leaderboard_name: str) -> "LeaderboardItem | None":
397393
self.cursor.execute(
398394
"""
399395
SELECT id, name, deadline, task, creator_id, forum_id, secret_seed
@@ -427,7 +423,7 @@ def get_leaderboard_submissions(
427423
user_id: Optional[str] = None,
428424
limit: int = None,
429425
offset: int = 0,
430-
) -> list[LeaderboardRankedEntry]:
426+
) -> list["LeaderboardRankedEntry"]:
431427
# separate cases, for personal we want all submissions, for general we want best per user
432428
if user_id:
433429
# Query all if user_id (means called from show-personal)
@@ -642,7 +638,7 @@ def delete_submission(self, submission_id: int):
642638
logger.exception("Could not delete submission %s.", submission_id, exc_info=e)
643639
raise KernelBotError(f"Could not delete submission {submission_id}!") from e
644640

645-
def get_submission_by_id(self, submission_id: int) -> Optional[SubmissionItem]:
641+
def get_submission_by_id(self, submission_id: int) -> Optional["SubmissionItem"]:
646642
query = """
647643
SELECT s.leaderboard_id, lb.name, s.file_name, s.user_id,
648644
s.submission_time, s.done, c.code
@@ -893,3 +889,52 @@ def validate_cli_id(self, cli_id: str) -> Optional[dict[str, str]]:
893889
self.connection.rollback()
894890
logger.exception("Error validating CLI ID %s", cli_id, exc_info=e)
895891
raise KernelBotError("Error validating CLI ID") from e
892+
893+
894+
class LeaderboardItem(TypedDict):
895+
id: int
896+
name: str
897+
creator_id: int
898+
deadline: datetime.datetime
899+
task: "LeaderboardTask"
900+
gpu_types: List[str]
901+
forum_id: int
902+
secret_seed: NotRequired[int]
903+
904+
905+
class LeaderboardRankedEntry(TypedDict):
906+
submission_id: int
907+
rank: int
908+
submission_name: str
909+
submission_time: datetime.datetime
910+
submission_score: float
911+
leaderboard_name: str
912+
user_id: int
913+
user_name: str
914+
gpu_type: str
915+
916+
917+
class RunItem(TypedDict):
918+
start_time: datetime.datetime
919+
end_time: datetime.datetime
920+
mode: str
921+
secret: bool
922+
runner: str
923+
score: Optional[float]
924+
passed: bool
925+
compilation: dict
926+
meta: dict
927+
result: dict
928+
system: dict
929+
930+
931+
class SubmissionItem(TypedDict):
932+
submission_id: int
933+
leaderboard_id: int
934+
leaderboard_name: str
935+
file_name: str
936+
user_id: int
937+
submission_time: datetime.datetime
938+
done: bool
939+
code: str
940+
runs: List[RunItem]

src/discord-cluster-manager/submission.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@
44
from typing import Optional, Union
55

66
from better_profanity import profanity
7-
from leaderboard_db import LeaderboardDB
7+
from leaderboard_db import LeaderboardDB, LeaderboardItem
88
from task import LeaderboardTask
9-
from utils import KernelBotError, LeaderboardItem
9+
from utils import KernelBotError
1010

1111

1212
@dataclasses.dataclass

src/discord-cluster-manager/utils.py

Lines changed: 1 addition & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
1-
import datetime
21
import functools
32
import logging
43
import subprocess
5-
from typing import TYPE_CHECKING, Any, List, NotRequired, Optional, TypedDict
4+
from typing import TYPE_CHECKING, Any, Optional
65

76
import discord
87
from consts import Language, SubmissionMode
@@ -179,55 +178,6 @@ def invalidate(self):
179178
self._q.clear()
180179

181180

182-
class LeaderboardItem(TypedDict):
183-
id: int
184-
name: str
185-
creator_id: int
186-
deadline: datetime.datetime
187-
task: "LeaderboardTask"
188-
gpu_types: List[str]
189-
forum_id: int
190-
secret_seed: NotRequired[int]
191-
192-
193-
class LeaderboardRankedEntry(TypedDict):
194-
submission_id: int
195-
rank: int
196-
submission_name: str
197-
submission_time: datetime.datetime
198-
submission_score: float
199-
leaderboard_name: str
200-
user_id: int
201-
user_name: str
202-
gpu_type: str
203-
204-
205-
class RunItem(TypedDict):
206-
start_time: datetime.datetime
207-
end_time: datetime.datetime
208-
mode: str
209-
secret: bool
210-
runner: str
211-
score: Optional[float]
212-
passed: bool
213-
compilation: dict
214-
meta: dict
215-
result: dict
216-
system: dict
217-
218-
219-
class SubmissionItem(TypedDict):
220-
submission_id: int
221-
leaderboard_id: int
222-
leaderboard_name: str
223-
file_name: str
224-
user_id: int
225-
submission_time: datetime.datetime
226-
done: bool
227-
code: str
228-
runs: List[RunItem]
229-
230-
231181
def build_task_config(
232182
task: "LeaderboardTask" = None,
233183
submission_content: str = None,

0 commit comments

Comments
 (0)