Example #1
0
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
    })
Example #2
0
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")
Example #3
0
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")
Example #4
0
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
        })
Example #5
0
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
        })