mirror of
https://github.com/QingdaoU/OnlineJudge.git
synced 2024-09-21 00:13:18 +00:00
problem改用_id作为搜索用主键;submission更加statistic_info字段
This commit is contained in:
parent
91eb7b5bb6
commit
62274224a9
@ -101,12 +101,14 @@ class JudgeDispatcher(object):
|
|||||||
if resp["err"]:
|
if resp["err"]:
|
||||||
self.submission_obj.result = JudgeStatus.COMPILE_ERROR
|
self.submission_obj.result = JudgeStatus.COMPILE_ERROR
|
||||||
else:
|
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"]))
|
error_test_case = list(filter(lambda case: case["result"] != 0, resp["data"]))
|
||||||
# 多个测试点全部正确AC,否则 ACM模式下取第一个错误的测试点状态, OI模式对应为部分正确
|
# 多个测试点全部正确AC,否则 ACM模式下取第一个错误的测试点状态, OI模式对应为部分正确
|
||||||
if not error_test_case:
|
if not error_test_case:
|
||||||
self.submission_obj.result = JudgeStatus.ACCEPTED
|
self.submission_obj.result = JudgeStatus.ACCEPTED
|
||||||
# AC 用时保存为多个测试点中最长的那个
|
|
||||||
self.submission_obj.accepted_time = max([x["cpu_time"] for x in resp["data"]])
|
|
||||||
elif self.problem_obj.rule_type == ProblemRuleType.ACM:
|
elif self.problem_obj.rule_type == ProblemRuleType.ACM:
|
||||||
self.submission_obj.result = error_test_case[0]["result"]
|
self.submission_obj.result = error_test_case[0]["result"]
|
||||||
else:
|
else:
|
||||||
|
@ -16,7 +16,7 @@ class ProblemAPI(APIView):
|
|||||||
problem_id = request.GET.get("id")
|
problem_id = request.GET.get("id")
|
||||||
if problem_id:
|
if problem_id:
|
||||||
try:
|
try:
|
||||||
problem = Problem.objects.get(id=problem_id, visible=True)
|
problem = Problem.objects.get(_id=problem_id, visible=True)
|
||||||
return self.success(ProblemSerializer(problem).data)
|
return self.success(ProblemSerializer(problem).data)
|
||||||
except Problem.DoesNotExist:
|
except Problem.DoesNotExist:
|
||||||
return self.error("Problem does not exist")
|
return self.error("Problem does not exist")
|
||||||
|
24
submission/migrations/0003_auto_20170704_1243.py
Normal file
24
submission/migrations/0003_auto_20170704_1243.py
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# Generated by Django 1.9.6 on 2017-07-04 12:43
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
from django.db import migrations
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('submission', '0002_auto_20170509_1203'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.RenameField(
|
||||||
|
model_name='submission',
|
||||||
|
old_name='accepted_info',
|
||||||
|
new_name='statistic_info',
|
||||||
|
),
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name='submission',
|
||||||
|
name='accepted_time',
|
||||||
|
),
|
||||||
|
]
|
@ -30,9 +30,8 @@ class Submission(models.Model):
|
|||||||
info = JSONField(default={})
|
info = JSONField(default={})
|
||||||
language = models.CharField(max_length=20)
|
language = models.CharField(max_length=20)
|
||||||
shared = models.BooleanField(default=False)
|
shared = models.BooleanField(default=False)
|
||||||
# 题目状态为 Accepted 时才会存储相关info
|
# 存储该提交所用时间和内存值,方便提交列表显示
|
||||||
accepted_time = models.IntegerField(blank=True, null=True)
|
statistic_info = JSONField(default={})
|
||||||
accepted_info = JSONField(default={})
|
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
db_table = "submission"
|
db_table = "submission"
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
from .models import Submission
|
from .models import Submission
|
||||||
|
from account.models import User
|
||||||
from utils.api import serializers
|
from utils.api import serializers
|
||||||
from judge.languages import language_names
|
from judge.languages import language_names
|
||||||
|
|
||||||
@ -10,8 +11,13 @@ class CreateSubmissionSerializer(serializers.Serializer):
|
|||||||
|
|
||||||
|
|
||||||
class SubmissionModelSerializer(serializers.ModelSerializer):
|
class SubmissionModelSerializer(serializers.ModelSerializer):
|
||||||
|
username = serializers.SerializerMethodField()
|
||||||
info = serializers.JSONField()
|
info = serializers.JSONField()
|
||||||
accepted_info = serializers.JSONField()
|
statistic_info = serializers.JSONField()
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Submission
|
model = Submission
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def get_username(obj):
|
||||||
|
return User.objects.get(id=obj.user_id).username
|
||||||
|
@ -28,14 +28,14 @@ def _submit(response, user, problem_id, language, code, contest_id=None):
|
|||||||
return response.error("Please wait %d seconds" % int(bucket.expected_time() + 1))
|
return response.error("Please wait %d seconds" % int(bucket.expected_time() + 1))
|
||||||
|
|
||||||
try:
|
try:
|
||||||
problem = Problem.objects.get(id=problem_id)
|
problem = Problem.objects.get(_id=problem_id)
|
||||||
except Problem.DoesNotExist:
|
except Problem.DoesNotExist:
|
||||||
return response.error("Problem not exist")
|
return response.error("Problem not exist")
|
||||||
|
|
||||||
submission = Submission.objects.create(user_id=user.id,
|
submission = Submission.objects.create(user_id=user.id,
|
||||||
language=language,
|
language=language,
|
||||||
code=code,
|
code=code,
|
||||||
problem_id=problem.id,
|
problem_id=problem._id,
|
||||||
contest_id=contest_id)
|
contest_id=contest_id)
|
||||||
# todo 暂时保留 方便排错
|
# todo 暂时保留 方便排错
|
||||||
# JudgeDispatcher(submission.id, problem.id).judge()
|
# JudgeDispatcher(submission.id, problem.id).judge()
|
||||||
@ -60,8 +60,13 @@ class SubmissionAPI(APIView):
|
|||||||
return self.error("Submission not exist")
|
return self.error("Submission not exist")
|
||||||
return self.success(SubmissionModelSerializer(submission).data)
|
return self.success(SubmissionModelSerializer(submission).data)
|
||||||
|
|
||||||
problem_id = request.GET.get("problem_id")
|
contest_id = request.GET.get("contest_id")
|
||||||
|
if contest_id:
|
||||||
|
subs = Submission.objects.filter(contest_id__isnull=False)
|
||||||
|
else:
|
||||||
subs = Submission.objects.filter(contest_id__isnull=True)
|
subs = Submission.objects.filter(contest_id__isnull=True)
|
||||||
|
|
||||||
|
problem_id = request.GET.get("problem_id")
|
||||||
if problem_id:
|
if problem_id:
|
||||||
subs = subs.filter(problem_id=problem_id)
|
subs = subs.filter(problem_id=problem_id)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user