From 5860d160c85da91673323abdba69b3d570c158ed Mon Sep 17 00:00:00 2001 From: Evan Date: Wed, 24 Jun 2020 11:38:58 -0400 Subject: [PATCH] Add Language and Judge endpoints to API v2 --- dmoj/urls.py | 2 ++ judge/views/api/api_v2.py | 37 ++++++++++++++++++++++++++++++++++++- 2 files changed, 38 insertions(+), 1 deletion(-) diff --git a/dmoj/urls.py b/dmoj/urls.py index 5f8676002e..30a41d2419 100644 --- a/dmoj/urls.py +++ b/dmoj/urls.py @@ -275,6 +275,8 @@ def paged_list_view(view, name): url(r'^submission/(?P\d+)$', api.api_v2.APISubmissionDetail.as_view()), url(r'^organizations$', api.api_v2.APIOrganizationList.as_view()), url(r'^participations$', api.api_v2.APIContestParticipationList.as_view()), + url(r'^languages$', api.api_v2.APILanguageList.as_view()), + url(r'^judges$', api.api_v2.APIJudgeList.as_view()), ])), ])), diff --git a/judge/views/api/api_v2.py b/judge/views/api/api_v2.py index de806ea77e..5d47b47987 100644 --- a/judge/views/api/api_v2.py +++ b/judge/views/api/api_v2.py @@ -10,7 +10,8 @@ from django.views.generic.list import BaseListView from judge.models import ( - Contest, ContestParticipation, ContestTag, Organization, Problem, ProblemType, Profile, Rating, Submission, + Contest, ContestParticipation, ContestTag, Judge, Language, Organization, Problem, ProblemType, Profile, Rating, + Submission, ) from judge.utils.raw_sql import join_sql_subquery, use_straight_join from judge.views.submission import group_test_cases @@ -609,3 +610,37 @@ def get_object_data(self, organization): 'is_open': organization.is_open, 'member_count': organization.member_count, } + + +class APILanguageList(APIListView): + model = Language + basic_filters = ( + ('common_name', 'common_name'), + ) + + def get_object_data(self, language): + return { + 'id': language.id, + 'key': language.key, + 'short_name': language.short_name, + 'common_name': language.common_name, + 'ace_mode_name': language.ace, + 'pygments_name': language.pygments, + 'code_template': language.template, + } + + +class APIJudgeList(APIListView): + model = Judge + + def get_unfiltered_queryset(self): + return Judge.objects.filter(online=True).prefetch_related('runtimes').order_by('name') + + def get_object_data(self, judge): + return { + 'name': judge.name, + 'start_time': judge.start_time.isoformat(), + 'ping': judge.ping_ms, + 'load': judge.load, + 'languages': list(judge.runtimes.values_list('key', flat=True)), + }