Skip to content

Commit 14de530

Browse files
committed
get_leaderboard either returns a leaderboard or throws
1 parent da1cef7 commit 14de530

6 files changed

Lines changed: 16 additions & 52 deletions

File tree

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

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -347,18 +347,6 @@ async def run_submission( # noqa: C901
347347
try:
348348
with db_context as db:
349349
leaderboard_item = db.get_leaderboard(leaderboard_name)
350-
if not leaderboard_item:
351-
all_leaderboards = [lb["name"] for lb in db.get_leaderboards()]
352-
if leaderboard_name not in all_leaderboards:
353-
raise HTTPException(
354-
status_code=404, detail=f"Leaderboard '{leaderboard_name}' not found."
355-
)
356-
else:
357-
raise HTTPException(
358-
status_code=500,
359-
detail=f"Error retrieving details for leaderboard '{leaderboard_name}'.",
360-
)
361-
362350
gpus = leaderboard_item.get("gpu_types", [])
363351
if gpu_type not in gpus:
364352
supported_gpus = ", ".join(gpus) if gpus else "None"

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

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
from discord import app_commands
1515
from discord.ext import commands, tasks
1616
from discord_utils import leaderboard_name_autocomplete, send_discord_message, with_error_handling
17-
from leaderboard_db import LeaderboardItem, SubmissionItem
17+
from leaderboard_db import LeaderboardDoesNotExist, LeaderboardItem, SubmissionItem
1818
from task import LeaderboardTask, make_task
1919
from ui.misc import ConfirmationView, DeleteConfirmationModal, GPUSelectionView
2020
from utils import (
@@ -176,7 +176,10 @@ async def leaderboard_create_local(
176176

177177
# create-local overwrites existing leaderboard
178178
with self.bot.leaderboard_db as db:
179-
old_lb = db.get_leaderboard(leaderboard_name)
179+
try:
180+
old_lb = db.get_leaderboard(leaderboard_name)
181+
except LeaderboardDoesNotExist:
182+
pass
180183
db.delete_leaderboard(leaderboard_name, force=True)
181184

182185
# get existing forum thread or create new one
@@ -398,8 +401,7 @@ async def delete_leaderboard(
398401
forum_channel = self.bot.get_channel(self.bot.leaderboard_forum_id)
399402

400403
with self.bot.leaderboard_db as db:
401-
lb: LeaderboardItem = db.get_leaderboard(leaderboard_name)
402-
forum_id = lb["forum_id"]
404+
forum_id = db.get_leaderboard(leaderboard_name)["forum_id"]
403405
threads = [thread for thread in forum_channel.threads if thread.id == forum_id]
404406

405407
if threads:

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

Lines changed: 0 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -261,8 +261,6 @@ async def lang_autocomplete(
261261

262262
with bot.leaderboard_db as db:
263263
leaderboard_item = db.get_leaderboard(lb) # type: LeaderboardItem
264-
if not leaderboard_item:
265-
raise ValueError("Invalid leaderboard")
266264

267265
candidates = leaderboard_item["task"].templates
268266
return [discord.app_commands.Choice(name=c, value=c) for c in candidates]
@@ -423,14 +421,6 @@ async def _get_submissions_helper(
423421
submissions = {}
424422
with self.bot.leaderboard_db as db:
425423
leaderboard_id = db.get_leaderboard(leaderboard_name)["id"]
426-
if not leaderboard_id:
427-
await send_discord_message(
428-
interaction,
429-
f'Leaderboard "{leaderboard_name}" not found.',
430-
ephemeral=True,
431-
)
432-
return
433-
434424
gpus = db.get_leaderboard_gpu_types(leaderboard_name)
435425

436426
if len(gpus) == 1:
@@ -551,13 +541,6 @@ async def get_leaderboard_task(self, interaction: discord.Interaction, leaderboa
551541

552542
with self.bot.leaderboard_db as db:
553543
leaderboard_item = db.get_leaderboard(leaderboard_name) # type: LeaderboardItem
554-
if not leaderboard_item:
555-
await send_discord_message(
556-
interaction,
557-
f"Leaderboard with name `{leaderboard_name}` not found.",
558-
ephemeral=True,
559-
)
560-
return
561544

562545
code = leaderboard_item["task"].files
563546

@@ -585,13 +568,6 @@ async def get_task_template(
585568
try:
586569
with self.bot.leaderboard_db as db:
587570
leaderboard_item = db.get_leaderboard(leaderboard_name) # type: LeaderboardItem
588-
if not leaderboard_item:
589-
await send_discord_message(
590-
interaction,
591-
f"Leaderboard with name `{leaderboard_name}` not found.",
592-
ephemeral=True,
593-
)
594-
return
595571

596572
if lang not in leaderboard_item["task"].templates:
597573
langs = "\n".join(

src/discord-cluster-manager/leaderboard_db.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -389,7 +389,7 @@ def get_leaderboard_gpu_types(self, leaderboard_name: str) -> List[str] | None:
389389
else:
390390
return None
391391

392-
def get_leaderboard(self, leaderboard_name: str) -> "LeaderboardItem | None":
392+
def get_leaderboard(self, leaderboard_name: str) -> "LeaderboardItem":
393393
self.cursor.execute(
394394
"""
395395
SELECT id, name, deadline, task, creator_id, forum_id, secret_seed
@@ -414,7 +414,7 @@ def get_leaderboard(self, leaderboard_name: str) -> "LeaderboardItem | None":
414414
gpu_types=self.get_leaderboard_gpu_types(res[1]),
415415
)
416416
else:
417-
return None
417+
raise LeaderboardDoesNotExist(leaderboard_name)
418418

419419
def get_leaderboard_submissions(
420420
self,
@@ -938,3 +938,8 @@ class SubmissionItem(TypedDict):
938938
done: bool
939939
code: str
940940
runs: List[RunItem]
941+
942+
943+
class LeaderboardDoesNotExist(KernelBotError):
944+
def __init__(self, name: str):
945+
super().__init__(message=f"Leaderboard `{name}` does not exist.", code=404)

src/discord-cluster-manager/submission.py

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,8 @@ def prepare_submission(
5252
req = handle_popcorn_directives(req)
5353
assert req.leaderboard is not None
5454

55-
leaderboard = lookup_leaderboard(req.leaderboard, backend.db)
55+
with backend.db as db:
56+
leaderboard = db.get_leaderboard(req.leaderboard)
5657
check_deadline(leaderboard)
5758

5859
task_gpus = get_avail_gpus(req.leaderboard, backend.db)
@@ -77,14 +78,6 @@ def prepare_submission(
7778
)
7879

7980

80-
def lookup_leaderboard(leaderboard: str, lb_db: LeaderboardDB) -> LeaderboardItem:
81-
with lb_db as db:
82-
leaderboard_item = db.get_leaderboard(leaderboard)
83-
if not leaderboard_item:
84-
raise KernelBotError(f"Leaderboard `{leaderboard}` not found.")
85-
return leaderboard_item
86-
87-
8881
def check_deadline(leaderboard: LeaderboardItem):
8982
now = datetime.now()
9083
deadline = leaderboard["deadline"]

src/discord-cluster-manager/utils.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ class KernelBotError(Exception):
3232

3333
def __init__(self, message, code: int = 400):
3434
super().__init__(message)
35-
self.http_code = 400
35+
self.http_code = code
3636

3737

3838
def get_github_branch_name():

0 commit comments

Comments
 (0)