Skip to content

Commit 6b06905

Browse files
committed
milestone runs in db
1 parent e48a315 commit 6b06905

1 file changed

Lines changed: 59 additions & 31 deletions

File tree

src/libkernelbot/leaderboard_db.py

Lines changed: 59 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -293,6 +293,58 @@ def get_leaderboard_milestones(self, leaderboard_id: int) -> "list[MilestoneItem
293293
for row in self.cursor.fetchall()
294294
]
295295

296+
def delete_milestone_runs(self, leaderboard_name: str):
297+
self.cursor.execute(
298+
"""
299+
DELETE FROM leaderboard.runs
300+
WHERE milestone_id IN (
301+
SELECT leaderboard.milestones.id
302+
FROM leaderboard.milestones
303+
WHERE leaderboard_id = %s
304+
);
305+
""",
306+
(leaderboard_name,),
307+
)
308+
self.connection.commit()
309+
310+
def get_runs_generic(
311+
self, *, milestone_id: Optional[int] = None, submission_id: Optional[int] = None
312+
) -> List["RunItem"]:
313+
if milestone_id is not None:
314+
key = "milestone_id"
315+
value = milestone_id
316+
if submission_id is not None:
317+
logger.error("milestone_id and submission_id specified simultaneously")
318+
raise KernelBotError("`milestone_id` and `submission_id` specified simultaneously")
319+
else:
320+
key = "submission_id"
321+
value = submission_id
322+
query = f"""
323+
SELECT start_time, end_time, mode, secret, runner, score,
324+
passed, compilation, meta, result, system_info
325+
FROM leaderboard.runs
326+
WHERE {key} = %s
327+
"""
328+
self.cursor.execute(query, (value,))
329+
runs = self.cursor.fetchall()
330+
331+
return [
332+
RunItem(
333+
start_time=r[0],
334+
end_time=r[1],
335+
mode=r[2],
336+
secret=r[3],
337+
runner=r[4],
338+
score=r[5],
339+
passed=r[6],
340+
compilation=r[7],
341+
meta=r[8],
342+
result=r[9],
343+
system=r[10],
344+
)
345+
for r in runs
346+
]
347+
296348
def create_submission(
297349
self,
298350
leaderboard: str,
@@ -397,7 +449,9 @@ def mark_submission_done(
397449

398450
def create_submission_run(
399451
self,
400-
submission: int,
452+
*,
453+
submission: Optional[int] = None,
454+
milestone: Optional[int] = None,
401455
start: datetime.datetime,
402456
end: datetime.datetime,
403457
mode: str,
@@ -418,13 +472,14 @@ def create_submission_run(
418472
}
419473
self.cursor.execute(
420474
"""
421-
INSERT INTO leaderboard.runs (submission_id, start_time, end_time, mode,
475+
INSERT INTO leaderboard.runs (submission_id, milestone_id, start_time, end_time, mode,
422476
secret, runner, score, passed, compilation, meta, result, system_info
423477
)
424-
VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)
478+
VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)
425479
""",
426480
(
427481
submission,
482+
milestone,
428483
start,
429484
end,
430485
mode,
@@ -804,33 +859,6 @@ def get_submission_by_id(self, submission_id: int) -> Optional["SubmissionItem"]
804859
if submission is None:
805860
return None
806861

807-
# OK, now get the runs
808-
query = """
809-
SELECT start_time, end_time, mode, secret, runner, score,
810-
passed, compilation, meta, result, system_info
811-
FROM leaderboard.runs
812-
WHERE submission_id = %s
813-
"""
814-
self.cursor.execute(query, (submission_id,))
815-
runs = self.cursor.fetchall()
816-
817-
runs = [
818-
RunItem(
819-
start_time=r[0],
820-
end_time=r[1],
821-
mode=r[2],
822-
secret=r[3],
823-
runner=r[4],
824-
score=r[5],
825-
passed=r[6],
826-
compilation=r[7],
827-
meta=r[8],
828-
result=r[9],
829-
system=r[10],
830-
)
831-
for r in runs
832-
]
833-
834862
return SubmissionItem(
835863
submission_id=submission_id,
836864
leaderboard_id=submission[0],
@@ -840,7 +868,7 @@ def get_submission_by_id(self, submission_id: int) -> Optional["SubmissionItem"]
840868
submission_time=submission[4],
841869
done=submission[5],
842870
code=submission[6],
843-
runs=runs,
871+
runs=self.get_runs_generic(submission_id=submission_id),
844872
)
845873

846874
def get_leaderboard_submission_count(

0 commit comments

Comments
 (0)