def public_submit(request): problem_list = Problem.objects.filter(is_public=True).order_by('title') if request.method == "POST": form = SubmitAnswer(request.POST, request.FILES) form.fields['problem'].queryset = problem_list if form.is_valid(): post = form.save(commit=False) post.submit_time = timezone.now() post.user = request.user post.submit_file = None post.save() post.submit_file = request.FILES.get('submit_file') post.save() result = judge(file_name=post.submit_file.path, problem=post.problem, language=post.language, submit=post) post.result = result post.save() update_statistics(post) return redirect('public_submit') else: form = SubmitAnswer() form.fields['problem'].queryset = problem_list all_submits = Submit.objects.filter( user=request.user).order_by('submit_time').reverse() for i in all_submits: i.source_code = read_source_code(i.submit_file) i.language_mode = i.language.editor_mode return render(request, 'public_submit.html', { 'form': form, 'all_submits': all_submits })
def ajax_public_rejudge(request): total_submits = request.GET.getlist('total_submit[]') rejudge_submits = [int(i) for i in total_submits] result_dict = {} for submit_id in rejudge_submits: try: submit = Submit.objects.get(pk=submit_id) previous_result = submit.result try: result = judge(file_name=submit.submit_file.path, problem=submit.problem, language=submit.language, submit=submit, rejudge=True) submit.result = result submit.save() update_rejudge_statistics(submit, previous_result) except ValueError: result = "file not found" except Submit.DoesNotExist: result = 'no submitted' result_dict[submit_id] = result response_data = {'result': result_dict} return JsonResponse(response_data, content_type="application/json")
def site_ajax_rejudge(request): refresh_contest_session_admin(request) # refersh the contest session total_submits = request.GET.getlist('total_submit[]') contest_id = request.GET.get('contest_id') try: contest = Contest.objects.get(pk=contest_id) if contest.created_by != request.user.campus: return redirect('homepage') except Contest.DoesNotExist: return redirect('homepage') rejudge_submits = [int(i) for i in total_submits] result_dict = {} for submit_id in rejudge_submits: try: submit = Submit.objects.get(pk=submit_id) try: result = judge(file_name=submit.submit_file.path, problem=submit.problem, language=submit.language, submit=submit, rejudge=True) submit.result = result submit.save() update_score_and_rank(submit) except ValueError: result = "file not found" except Submit.DoesNotExist: result = "not submitted" result_dict[submit_id] = submit.result contest.last_update = timezone.now() contest.save() response_data = {'result': result_dict} return JsonResponse(response_data, content_type="application/json")
def submit_specific_problem(request, problem_id): problem = Problem.objects.get(pk=problem_id) initial_info = {'specific_problem': problem.title} if request.method == "POST": form = SubmitSpecificProblem(request.POST, request.FILES, initial=initial_info) if form.is_valid(): post = form.save(commit=False) post.submit_time = timezone.now() post.user = request.user post.problem = problem post.submit_file = None post.save() post.submit_file = request.FILES.get('submit_file') post.save() result = judge(file_name=post.submit_file.path, problem=post.problem, language=post.language, submit=post) post.result = result post.save() update_statistics(post) return redirect('submit_specific_problem', problem_id) else: form = SubmitSpecificProblem(initial=initial_info) all_submits = Submit.objects.filter( user=request.user, problem=problem, problem__is_public=True).order_by('submit_time').reverse() for i in all_submits: i.source_code = read_source_code(i.submit_file) i.language_mode = i.language.editor_mode form1 = SubmitSpecificProblemWithEditor(initial=initial_info) form1.fields['language'].choices = [(None, '----------')] + [ (i.id, i) for i in Language.objects.all() ] return render( request, 'public_specific_problem_submit.html', { 'form': form, 'form1': form1, 'problem': problem, 'all_submits': all_submits })
def submit_specific_problem_with_editor(request, problem_id): problem = Problem.objects.get(pk=problem_id) initial_info = {'specific_problem': problem.title} if request.method == "POST": form1 = SubmitSpecificProblemWithEditor(request.POST, initial=initial_info) form1.fields['language'].choices = [(None, '----------')] + [ (i.id, i) for i in Language.objects.all() ] if form1.is_valid(): post = Submit() now = timezone.now() post.submit_time = now post.user = request.user lang = Language.objects.get(pk=int(request.POST['language'])) post.language = lang post.problem = problem post.submit_file = None post.save() path = problem.title + '_' + str( request.user.id) + '_' + str(now) + '.' + lang.extension path = path.replace(' ', '').replace('/', '') source = request.POST['source'] if lang.name == 'Java': path = java_class_name_find(source, path) code = open(path, 'w') code.write(source) code.close() code = open(path, 'rb') source_code = code.read() code.close() submit_file = InMemoryUploadedFile(BytesIO(source_code), 'file', path, 'file/text', sys.getsizeof(source_code), None) post.submit_file = submit_file post.save() result = judge(file_name=post.submit_file.path, problem=post.problem, language=post.language, submit=post) post.result = result post.save() os.system(f'rm "{path}"') update_statistics(post) return redirect('submit_specific_problem', problem_id) else: form1 = SubmitSpecificProblemWithEditor(initial=initial_info) form1.fields['language'].choices = [(None, '----------')] + [ (i.id, i) for i in Language.objects.all() ] all_submits = Submit.objects.filter( user=request.user).order_by('submit_time').reverse() for i in all_submits: i.source_code = read_source_code(i.submit_file) i.language_mode = i.language.editor_mode form = SubmitSpecificProblem(initial=initial_info) return render( request, 'public_specific_problem_submit.html', { 'form': form, 'form1': form1, 'problem': problem, 'all_submits': all_submits })