def process_pending_task(): if cache.llen(CacheKey.waiting_queue): # 防止循环引入 from judge.tasks import judge_task tmp_data = cache.rpop(CacheKey.waiting_queue) if tmp_data: data = json.loads(tmp_data.decode("utf-8")) judge_task.send(**data)
def post(self, request): data = request.data hide_id = False if data.get("contest_id"): error = self.check_contest_permission(request) if error: return error contest = self.contest if not contest.problem_details_permission(request.user): hide_id = True if data.get("captcha"): if not Captcha(request).check(data["captcha"]): return self.error("Invalid captcha") error = self.throttling(request) if error: return self.error(error) try: problem = Problem.objects.get(id=data["problem_id"], contest_id=data.get("contest_id"), visible=True) except Problem.DoesNotExist: return self.error("Problem not exist") if data["language"] not in problem.languages: return self.error( f"{data['language']} is now allowed in the problem") forbid_keywords = problem.forbid_keyword.split(",") for kw in forbid_keywords: kw = kw.strip() if kw != "" and kw in data["code"]: return self.error( "Keyword \"%s\" is not allowed in the code of this problem" % kw) if data["language"] in ["C"]: flag, msg = self.check_code(data["code"]) if not flag: return self.error(msg) submission = Submission.objects.create( user_id=request.user.id, username=request.user.username, language=data["language"], code=data["code"], problem_id=problem.id, ip=request.session["ip"], contest_id=data.get("contest_id")) # use this for debug # JudgeDispatcher(submission.id, problem.id).judge() judge_task.send(submission.id, problem.id) if hide_id: return self.success() else: return self.success({"submission_id": submission.id})
def get(self, request): id = request.GET.get("id") if not id: return self.error("Parameter error, id is required") try: submission = Submission.objects.select_related("problem").get(id=id, contest_id__isnull=True) except Submission.DoesNotExist: return self.error("Submission does not exists") submission.statistic_info = {} submission.save() judge_task.send(submission.id, submission.problem.id) return self.success()
def post(self, request): data = request.data hide_id = False if data.get("contest_id"): error = self.check_contest_permission(request) if error: return error contest = self.contest if not contest.problem_details_permission(request.user): hide_id = True if data.get("captcha"): if not Captcha(request).check(data["captcha"]): return self.error("Invalid captcha") error = self.throttling(request) if error: return self.error(error) try: problem = Problem.objects.get(id=data["problem_id"], contest_id=data.get("contest_id"), visible=True) except Problem.DoesNotExist: return self.error("Problem not exist") if data["language"] not in problem.languages: return self.error(f"{data['language']} is now allowed in the problem") submission = Submission.objects.create(user_id=request.user.id, username=request.user.username, language=data["language"], code=data["code"], problem_id=problem.id, ip=request.session["ip"], contest_id=data.get("contest_id")) print("Submission created!") # use this for debug # JudgeDispatcher(submission.id, problem.id).judge() judge_task.send(submission.id, problem.id) if hide_id: return self.success() else: return self.success({"submission_id": submission.id})