diff --git a/judge/dispatcher.py b/judge/dispatcher.py index f96fd4c2..53251539 100644 --- a/judge/dispatcher.py +++ b/judge/dispatcher.py @@ -100,16 +100,17 @@ class JudgeDispatcher(object): self.submission_obj.info = resp if resp["err"]: self.submission_obj.result = JudgeStatus.COMPILE_ERROR + self.submission_obj.statistic_info["err_info"] = resp["data"] else: # 用时和内存占用保存为多个测试点中最长的那个 self.submission_obj.statistic_info["time_cost"] = max([x["cpu_time"] for x in resp["data"]]) self.submission_obj.statistic_info["memory_cost"] = max([x["memory"] for x in resp["data"]]) error_test_case = list(filter(lambda case: case["result"] != 0, resp["data"])) - # 多个测试点全部正确AC,否则 ACM模式下取第一个错误的测试点状态, OI模式对应为部分正确 + # 多个测试点全部正确则AC,否则 ACM模式下取第一个错误的测试点的状态, OI模式若全部错误则取第一个错误测试点状态,否则为部分正确 if not error_test_case: self.submission_obj.result = JudgeStatus.ACCEPTED - elif self.problem_obj.rule_type == ProblemRuleType.ACM: + elif self.problem_obj.rule_type == ProblemRuleType.ACM or len(error_test_case) == len(resp["data"]): self.submission_obj.result = error_test_case[0]["result"] else: self.submission_obj.result = JudgeStatus.PARTIALLY_ACCEPTED diff --git a/submission/serializers.py b/submission/serializers.py index 1c58e39d..bc330364 100644 --- a/submission/serializers.py +++ b/submission/serializers.py @@ -25,7 +25,7 @@ class SubmissionSafeSerializer(serializers.ModelSerializer): class Meta: model = Submission - exclude = ('info', 'contest_id') + exclude = ("info", "contest_id") @staticmethod def get_username(obj): @@ -38,16 +38,18 @@ class SubmissionListSerializer(SubmissionSafeSerializer): show_link = serializers.SerializerMethodField() def __init__(self, *args, **kwargs): - self.user = kwargs.pop('user', None) + self.user = kwargs.pop("user", None) super().__init__(*args, **kwargs) class Meta: model = Submission - exclude = ('info', 'contest_id', 'code') + exclude = ("info", "contest_id", "code") def get_show_link(self, obj): + if self.user.id is None: + return False return obj.check_user_permission(self.user) @staticmethod def get_username(obj): - return User.objects.get(id=obj.user_id).username \ No newline at end of file + return User.objects.get(id=obj.user_id).username diff --git a/submission/views/oj.py b/submission/views/oj.py index 10668999..7619d7c5 100644 --- a/submission/views/oj.py +++ b/submission/views/oj.py @@ -12,7 +12,6 @@ from ..serializers import CreateSubmissionSerializer, SubmissionModelSerializer from ..serializers import SubmissionSafeSerializer, SubmissionListSerializer - def _submit(response, user, problem_id, language, code, contest_id=None): # TODO: 预设默认值,需修改 controller = BucketController(user_id=user.id, @@ -83,7 +82,7 @@ class SubmissionListAPI(APIView): if problem_id: subs = subs.filter(problem_id=problem_id) - if request.GET.get("myself"): + if request.GET.get("myself") and request.GET["myself"] == "1": subs = subs.filter(user_id=request.user.id) # todo: paginate return self.success(SubmissionListSerializer(subs, many=True, user=request.user).data)