def test_view_contest_uploadcodeform(self): self.client.login(username='******', password='******') user = auth.get_user(self.client) assert user.is_authenticated() test_contest = Contest.objects.get(id=22) test_team = Team.objects.get(id=3) participant = Participant(contest=test_contest, team=test_team) participant.save() problem = Problem.objects.get(id=1) test_submission = Submission(run_id=1, team=test_team, problem=problem, timestamp=datetime.now(timezone.utc), state="YES", result="YES") test_submission.save() data = {"problem": 1, "submit": "Submit", "instance": 1} files = {"code_file": SimpleUploadedFile("foo.txt", b"foo")} request = self.factory.post( reverse("contests:contest", kwargs={'contest_id': 22}), data) request.user = user request.FILES.update(files) resp = displayContest(request, 22) self.assertEqual(resp.status_code, 200)
def test_view_stat_participant(self): self.client.login(username='******', password='******') user = auth.get_user(self.client) assert user.is_authenticated() test_contest = Contest.objects.get(id=22) test_team = Team.objects.get(id=3) participant = Participant(contest=test_contest, team=test_team) participant.save() problem = Problem.objects.get(id=1) test_submission = Submission(run_id=1, team=test_team, problem=problem, timestamp=datetime.now(timezone.utc), state="YES", result="YES") test_submission.save() self.assertEqual(len(test_team.members.all()), 1) test_teammate = User.objects.get(id=9) test_team.members.add(test_teammate) self.assertEqual(len(test_team.members.all()), 2) test_team2 = Team.objects.get(id=4) self.assertEqual(len(test_team2.members.all()), 1) test_team2.members.add(user) self.assertEqual(len(test_team2.members.all()), 2) url = reverse("stats:index") resp = self.client.get(url) self.assertEqual(resp.status_code, 200)
def mutate(root, info, problem_id, language_id, source_code): user = info.context.user my_permissions = list( map(lambda perm: perm.code, user.permissions.all())) if 'create:submissions' not in my_permissions: raise ValueError("You Don't Have Permission To Submit Problem") try: problem = Problem.objects.filter(contest__id=user.contest.id, id=problem_id).get() except Problem.DoesNotExist: raise ValueError("No Such Problem") try: language = Language.objects.get(pk=language_id) except Language.DoesNotExist: raise ValueError("No Such Language") contest = user.contest permitted_langs = list( map(lambda lang: lang.id, contest.permitted_languages.all())) if language.id not in permitted_langs: raise ValueError("Language Is Not Permitted") sub = Submission(problem=problem, language=language, issuer=user) sub.save() filename = "submissions/submission-{}".format(sub.id) default_storage.save(filename, source_code) return sub
def test_close_notification(self): self.client.login(username='******', password='******') user = auth.get_user(self.client) assert user.is_authenticated() test_contest = Contest.objects.get(id=7) test_team = Team.objects.get(id=1) participant = Participant(contest=test_contest, team=test_team) participant.save() problems = test_contest.problem_set.all() problem = list(problems)[0] test_submission = Submission(run_id=1, team=test_team, problem=problem, timestamp=datetime.now(timezone.utc), state="NEW") test_submission.save() test_notification = Notification(submission=test_submission) test_notification.save() self.assertEqual(test_notification.id, 1) data = {"id": 1} resp = self.client.post(reverse("contests:close_notification"), data=data) self.assertEqual(resp.status_code, 200)
def submit_solution(user: User, problem_id: int, language_id: int, source_code: File) -> Submission: problem = get_problem_by_id(user, problem_id) language = get_language_by_id(language_id) contest = user.contest permitted_langs = list( map(lambda lang: lang.id, contest.permitted_languages.all())) if language.id not in permitted_langs: raise ForbiddenLanguageError() sub = Submission(problem=problem, solution_source=source_code, solution_language=language, issuer=user) sub.save() # grade_submission.delay(sub) grade_submission(sub) return sub
def test_view_all_judge(self): self.client.login(username='******', password='******') user = auth.get_user(self.client) assert user.is_authenticated() test_contest = Contest.objects.get(id=7) test_team = Team.objects.get(id=1) participant = Participant(contest=test_contest, team=test_team) participant.save() problems = test_contest.problem_set.all() problem = list(problems)[0] test_submission = Submission(run_id=1, team=test_team, problem=problem, timestamp=datetime.now(timezone.utc), state="NEW") test_submission.save() url = reverse("contests:contest_judge_submissions", kwargs={'contest_id': 7}) resp = self.client.get(url) self.assertEqual(resp.status_code, 200)
def test_view_contest_with_wrong_submission(self): self.client.login(username='******', password='******') user = auth.get_user(self.client) assert user.is_authenticated() test_contest = Contest.objects.get(id=22) test_team = Team.objects.get(id=3) participant = Participant(contest=test_contest, team=test_team) participant.save() problems = test_contest.problem_set.all() problem = list(problems)[0] self.assertEqual(len(problems), 2) test_submission = Submission(run_id=1, team=test_team, problem=problem, timestamp=datetime.now(timezone.utc), state="NO", result="WRONG") test_submission.save() url = reverse("contests:contest", kwargs={'contest_id': 22}) resp = self.client.get(url) self.assertEqual(resp.status_code, 200)
def problem(request, pk): language = [ 'Java', 'NodeJS', 'C', 'C++', 'PHP', 'Python 2', 'Python 3', 'Kotlin', 'GO Lang', 'C#' ] details = Problem.objects.get(pk=pk) cleanr = re.compile(r'<[^>]+>') input = details.psinput input = re.sub(cleanr, '', input) output = details.psoutput output = re.sub(cleanr, '', output) input = input.split(";") output = output.split(";") p = details.pexinput cleanr = re.compile(r'<[^>]+>') p = re.sub(cleanr, '', p) if request.method == 'POST': #Submissionid usr = request.user.username bb = Submission(user=usr) bb.save() subid = bb.submissionid lan = request.POST.get('language') code = request.POST.get('code') #lang = 'cpp17' ver = 0 if lan == 'Java': lan = 'java' ver = 3 elif lan == 'C': lan = 'c' ver = 4 elif lan == 'C++': lan = 'cpp17' ver = 0 elif lan == 'PHP': lan = 'php' ver = 3 elif lan == 'Python 2': lan = 'python2' ver = 2 elif lan == 'Python 3': lan = 'python3' ver = 3 elif lan == 'GO Lang': lan = 'go' ver = 3 elif lan == 'C#': lan = 'csharp' ver = 3 elif lan == 'Kotlin': lan = 'kotlin' ver = 2 elif lan == 'NodeJS': lan = 'nodejs' ver = 3 #submission language bb.language = lan bb.code = code bb.problemid = pk bb.save() details = Problem.objects.get(pk=pk) bb.problemtitle = details.ptitle bb.save() p = details.pexinput cleanr = re.compile(r'<[^>]+>') p = re.sub(cleanr, '', p) #output q = details.pexoutput cleanr = re.compile(r'<[^>]+>') q = re.sub(cleanr, '', q) p = p.split(";") q = q.split(";") ac = True pro = Profile.objects.get(uname=usr) for i in range(0, len(p)): inp = p[i] out = q[i] cleanr = re.compile(r'<[^>]+>') inp = re.sub(cleanr, '', inp) out = re.sub(cleanr, '', out) print(inp) print(out) print(code) task = { "clientId": "827646b49b0d2e078eb637d28a3d4202", "clientSecret": "f81ec97b9f03ef577968c605fd1b53fe67a6b3e74bc64f3eb3435e45cb5f0779", "script": code, "stdin": inp, "language": lan, "versionIndex": ver } resp = requests.post("https://api.jdoodle.com/v1/execute", headers=headers, json=json.dumps(task)) resp = resp.json() #input print(resp) if resp['statusCode'] == 200: print(200) op = resp['output'] timelimit = resp['cpuTime'] memorylimit = resp['memory'] cleanr = re.compile(r'<[^>]+>') op = re.sub(cleanr, '', op) gtl = float(details.ptimelimit) stl = (resp['cpuTime']) gml = float(details.pmemorylimit) * 1024 sml = (resp['memory']) if str(stl) == 'None' or str(sml) == 'None': bb.status = 'Syntex Error' bb.save() sub = pro.totalsub sub += 1 pro.totalsub = sub wa = pro.totalwa wa += 1 pro.totalwa = wa pro.save() messages.info(request, "Syntex Error") return redirect('problem', pk=pk) ac = False break else: if float(stl) <= gtl: print(1) if float(sml) <= gml: print(2) if cmp(op, out) == True: print(3) continue else: bb.status = 'Worng Answer' bb.save() sub = pro.totalsub sub += 1 pro.totalsub = sub wa = pro.totalwa wa += 1 pro.totalwa = wa pro.save() ac = False messages.error(request, 'Wrong Answer') break else: bb.status = 'Memory Limit' bb.save() sub = pro.totalsub sub += 1 pro.totalsub = sub me = pro.totalme me += 1 pro.totalme = me pro.save() ac = False messages.error(request, 'Memory Limit') break else: bb.status = 'Time Limit' bb.save() sub = pro.totalsub sub += 1 pro.totalsub = sub tl = pro.totaltle tl += 1 pro.totaltle = tl pro.save() ac = False messages.error(request, 'Time Limit') break else: bb.status = 'Worng Answer' bb.save() sub = pro.totalsub sub += 1 pro.totalsub = sub wa = pro.totalwa wa += 1 pro.totalwa = wa pro.save() ac = False messages.erroe(request, 'Wrong Answer') break if ac == True: print("ac") bb.status = 'Accepted' bb.save() sub = pro.totalsub sub += 1 pro.totalsub = sub ac = pro.totalac ac += 1 pro.totalac = ac pro.save() messages.success(request, 'Accepted') return redirect('profile') return render(request, 'front/problem.html', { 'details': details, 'language': language, 'input': input, 'output': output })
def practice_problem_page(request, pk): problem_id = pk context = { 'current_user': None, 'current_challenge': 'Practice', 'problem': Problem.objects.get(pk=problem_id), } if request.user.is_authenticated: context['current_user'] = request.user if request.method == 'GET': # Display a single problem return render(request, 'contests/prob-placeholder.html', context) elif request.method == 'POST': # Code Submission and Evaluation submission = Submission() submission.user = request.user submission.problem = Problem.objects.get(pk=problem_id) submission.language = request.POST['language-choice'] submission.source_file = request.FILES['src-file'] submission.status = 'Checking' submission.save() result = falcon.eval_submission( problem_code=submission.problem.problem_code, src_file_name=submission.source_file.name, language=submission.language) submission.status = context['response'] = result[0] submission.save() return render(request, 'contests/sub_response.html', context)