OnlineJudge/submission/models.py

53 lines
1.7 KiB
Python
Raw Normal View History

2017-05-08 09:29:01 +00:00
from django.db import models
2017-10-11 13:43:29 +00:00
from utils.models import JSONField
2017-09-24 01:48:17 +00:00
from problem.models import Problem
from contest.models import Contest
2017-05-08 09:29:01 +00:00
from utils.shortcuts import rand_str
class JudgeStatus:
COMPILE_ERROR = -2
WRONG_ANSWER = -1
ACCEPTED = 0
CPU_TIME_LIMIT_EXCEEDED = 1
REAL_TIME_LIMIT_EXCEEDED = 2
MEMORY_LIMIT_EXCEEDED = 3
RUNTIME_ERROR = 4
SYSTEM_ERROR = 5
PENDING = 6
JUDGING = 7
PARTIALLY_ACCEPTED = 8
2017-05-08 09:29:01 +00:00
class Submission(models.Model):
id = models.CharField(max_length=32, default=rand_str, primary_key=True, db_index=True)
2017-09-24 01:48:17 +00:00
contest = models.ForeignKey(Contest, null=True)
problem = models.ForeignKey(Problem)
create_time = models.DateTimeField(auto_now_add=True)
2017-05-08 09:29:01 +00:00
user_id = models.IntegerField(db_index=True)
username = models.CharField(max_length=30)
code = models.TextField()
result = models.IntegerField(db_index=True, default=JudgeStatus.PENDING)
2017-10-15 10:36:55 +00:00
# 从JudgeServer返回的判题详情
2017-10-11 13:43:29 +00:00
info = JSONField(default=dict)
2017-05-08 09:29:01 +00:00
language = models.CharField(max_length=20)
shared = models.BooleanField(default=False)
# 存储该提交所用时间和内存值,方便提交列表显示
2017-07-06 13:08:34 +00:00
# {time_cost: "", memory_cost: "", err_info: "", score: 0}
2017-10-11 13:43:29 +00:00
statistic_info = JSONField(default=dict)
2017-05-08 09:29:01 +00:00
2017-10-15 10:36:55 +00:00
def check_user_permission(self, user, check_share=True):
return self.user_id == user.id or \
2017-10-15 10:36:55 +00:00
(check_share and self.shared is True) or \
user.is_super_admin() or \
user.can_mgmt_all_problem() or \
self.problem.created_by_id == user.id
2017-05-08 09:29:01 +00:00
class Meta:
db_table = "submission"
ordering = ("-create_time",)
2017-05-08 09:29:01 +00:00
def __str__(self):
return self.id