From ffd594349263146758b6542a0d617112c1c89cca Mon Sep 17 00:00:00 2001 From: zema1 Date: Mon, 13 Nov 2017 21:29:27 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dsample=E7=A9=BA=E6=A0=BC?= =?UTF-8?q?=E8=A2=AB=E5=90=83=E6=8E=89=E7=9A=84=E9=97=AE=E9=A2=98=EF=BC=9B?= =?UTF-8?q?=20=E4=BF=AE=E5=A4=8Dtest=5Fid=20=E4=B8=8D=E5=AF=B9=E5=BA=94?= =?UTF-8?q?=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contest/views/oj.py | 5 ++++- judge/dispatcher.py | 3 ++- problem/serializers.py | 4 ++-- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/contest/views/oj.py b/contest/views/oj.py index 612ebd46..66889d5c 100644 --- a/contest/views/oj.py +++ b/contest/views/oj.py @@ -2,6 +2,7 @@ from django.utils.timezone import now from django.core.cache import cache from utils.api import APIView, validate_serializer from utils.constants import CacheKey +from utils.shortcuts import datetime2str from account.decorators import login_required, check_contest_permission from utils.constants import ContestRuleType, ContestStatus @@ -31,9 +32,11 @@ class ContestAPI(APIView): return self.error("Invalid parameter, id is required") try: contest = Contest.objects.get(id=id) - return self.success(ContestSerializer(contest).data) except Contest.DoesNotExist: return self.error("Contest does not exist") + data = ContestSerializer(contest).data + data["now"] = datetime2str(now()) + return self.success(data) class ContestListAPI(APIView): diff --git a/judge/dispatcher.py b/judge/dispatcher.py index a602bab4..4011e4cb 100644 --- a/judge/dispatcher.py +++ b/judge/dispatcher.py @@ -124,12 +124,13 @@ class JudgeDispatcher(object): if not service_url: service_url = settings.DEFAULT_JUDGE_SERVER_SERVICE_URL resp = self._request(urljoin(service_url, "/judge"), data=data) - self.submission.info = resp if resp["err"]: self.submission.result = JudgeStatus.COMPILE_ERROR self.submission.statistic_info["err_info"] = resp["data"] self.submission.statistic_info["score"] = 0 else: + resp["data"].sort(key=lambda x: int(x["test_case"])) + self.submission.info = resp self._compute_statistic_info(resp["data"]) error_test_case = list(filter(lambda case: case["result"] != 0, resp["data"])) # ACM模式下,多个测试点全部正确则AC,否则取第一个错误的测试点的状态 diff --git a/problem/serializers.py b/problem/serializers.py index e78eb554..529d3f5b 100644 --- a/problem/serializers.py +++ b/problem/serializers.py @@ -12,8 +12,8 @@ class TestCaseUploadForm(forms.Form): class CreateSampleSerializer(serializers.Serializer): - input = serializers.CharField() - output = serializers.CharField() + input = serializers.CharField(trim_whitespace=False) + output = serializers.CharField(trim_whitespace=False) class CreateTestCaseScoreSerializer(serializers.Serializer):