예제 #1
0
def submission_view(request, submission_id):
    submission = get_submission_or_error(request, submission_id)
    pi = submission.problem_instance
    controller = pi.controller
    can_admin = can_admin_problem_instance(request, pi)

    header = controller.render_submission(request, submission)
    footer = controller.render_submission_footer(request, submission)
    reports = []
    queryset = SubmissionReport.objects.filter(submission=submission).prefetch_related(
        'scorereport_set'
    )
    for report in controller.filter_visible_reports(
        request, submission, queryset.filter(status='ACTIVE')
    ):
        reports.append(controller.render_report(request, report))

    if can_admin:
        all_reports = controller.filter_visible_reports(request, submission, queryset)
    else:
        all_reports = []

    return TemplateResponse(
        request,
        'contests/submission.html',
        {
            'submission': submission,
            'header': header,
            'footer': footer,
            'reports': reports,
            'all_reports': all_reports,
            'can_admin': can_admin,
        },
    )
예제 #2
0
def show_output_file_view(request, submission_id, testrun_report_id=None):
    submission = get_submission_or_error(request, submission_id,
                                         TestRunProgramSubmission)
    result = get_testrun_report_or_404(request, submission, testrun_report_id)
    data = result.output_file.read(get_preview_size_limit())
    data, decode_error = decode_str(data)
    size = result.output_file.size
    download_url = reverse(
        'download_testrun_output',
        kwargs={
            'contest_id': request.contest.id,
            'submission_id': submission_id
        },
    )
    return TemplateResponse(
        request,
        'testrun/data.html',
        {
            'header': _("Output"),
            'data': data,
            'left': size - get_preview_size_limit(),
            'decode_error': decode_error,
            'download_url': download_url,
        },
    )
예제 #3
0
파일: views.py 프로젝트: sio2project/oioioi
def submission_view(request, submission_id):
    submission = get_submission_or_error(request, submission_id)
    pi = submission.problem_instance
    controller = pi.controller
    can_admin = can_admin_problem_instance(request, pi)

    header = controller.render_submission(request, submission)
    footer = controller.render_submission_footer(request, submission)
    reports = []
    queryset = SubmissionReport.objects.filter(submission=submission). \
        prefetch_related('scorereport_set')
    for report in controller.filter_visible_reports(request, submission,
            queryset.filter(status='ACTIVE')):
        reports.append(controller.render_report(request, report))

    if can_admin:
        all_reports = \
            controller.filter_visible_reports(request, submission, queryset)
    else:
        all_reports = []

    return TemplateResponse(request, 'contests/submission.html',
                {'submission': submission, 'header': header, 'footer': footer,
                 'reports': reports, 'all_reports': all_reports,
                 'can_admin': can_admin})
예제 #4
0
def generate_user_output_view(request, testreport_id=None,
                              submission_report_id=None):
    """Prepares re-submission for generating user outputs and runs judging.

       If there are no test reports' ids given as argument, then all tests from
       reports with the ``submission_report_id`` would be used for generating
       user outs. In that case ``submission_report_id`` is required.
       Note that it uses only tests without already generated outs.

       Also adjusts already generated outs visibility for users
       on tests originally generated by admin.
    """
    assert testreport_id or submission_report_id, \
            _("Not enough information given")

    # taking test report with given id
    if testreport_id is not None:
        testreport = get_object_or_404(TestReport,
                                       id=testreport_id)

        if submission_report_id is not None:
            # testreport_id is not related to given submission_report_id
            if submission_report_id != testreport.submission_report.id:
                raise SuspiciousOperation
        else:
            submission_report_id = testreport.submission_report.id
        testreports = [testreport]
    # taking all test reports related to submission report
    elif submission_report_id is not None:
        testreports = TestReport.objects \
                .filter(submission_report__id=submission_report_id)

    # check download out permission
    submission_report = get_object_or_404(SubmissionReport,
                                          id=submission_report_id)
    _check_generate_out_permission(request, submission_report)

    # filtering tests for judge
    test_ids = _testreports_to_generate_outs(request, testreports)

    # creating re-submission with appropriate tests
    s_id = submission_report.submission.id
    submission = get_submission_or_error(request, s_id,
                                         submission_class=ProgramSubmission)
    if test_ids:
        # Note that submission comment should not be copied to re-submission!
        # It will be overwritten in handler anyway.
        resubmission = ProgramSubmission(problem_instance=submission.
                                            problem_instance,
                                         user=request.user,
                                         date=request.timestamp,
                                         kind='USER_OUTS',
                                         source_file=submission.source_file)
        resubmission.save()
        resubmission.problem_instance.controller.judge(resubmission,
                extra_args={'tests_subset': test_ids,
                            'submission_report_id': submission_report.id})

    return redirect('submission', contest_id=request.contest.id,
                    submission_id=submission.id)
예제 #5
0
파일: views.py 프로젝트: papedaniel/oioioi
def generate_user_output_view(request, testreport_id=None,
                              submission_report_id=None):
    """Prepares re-submission for generating user outputs and runs judging.

       If there are no test reports' ids given as argument, then all tests from
       reports with the ``submission_report_id`` would be used for generating
       user outs. In that case ``submission_report_id`` is required.
       Note that it uses only tests without already generated outs.

       Also adjusts already generated outs visibility for users
       on tests originally generated by admin.
    """
    assert testreport_id or submission_report_id, \
            _("Not enough information given")

    # taking test report with given id
    if testreport_id is not None:
        testreport = get_object_or_404(TestReport,
                                       id=testreport_id)

        if submission_report_id is not None:
            # testreport_id is not related to given submission_report_id
            if submission_report_id != testreport.submission_report.id:
                raise SuspiciousOperation
        else:
            submission_report_id = testreport.submission_report.id
        testreports = [testreport]
    # taking all test reports related to submission report
    elif submission_report_id is not None:
        testreports = TestReport.objects \
                .filter(submission_report__id=submission_report_id)

    # check download out permission
    submission_report = get_object_or_404(SubmissionReport,
                                          id=submission_report_id)
    _check_generate_out_permission(request, submission_report)

    # filtering tests for judge
    test_ids = _testreports_to_generate_outs(request, testreports)

    # creating re-submission with appropriate tests
    s_id = submission_report.submission.id
    submission = get_submission_or_error(request, s_id,
                                         submission_class=ProgramSubmission)
    if test_ids:
        # Note that submission comment should not be copied to re-submission!
        # It will be overwritten in handler anyway.
        resubmission = ProgramSubmission(problem_instance=submission.
                                            problem_instance,
                                         user=request.user,
                                         date=request.timestamp,
                                         kind='USER_OUTS',
                                         source_file=submission.source_file)
        resubmission.save()
        resubmission.problem_instance.controller.judge(resubmission,
                extra_args={'tests_subset': test_ids,
                            'submission_report_id': submission_report.id})

    return redirect('submission', contest_id=request.contest.id,
                    submission_id=submission.id)
예제 #6
0
def publish_solution_view(request, submission_id):
    submission = get_submission_or_error(request, submission_id)

    _pub, _created = VoluntarySolutionPublication.objects \
        .get_or_create(submission=submission)

    return redirect('publish_solutions', contest_id=request.contest.id)
def rejudge_submission_view(request, contest_id, submission_id):
    submission = get_submission_or_error(request, contest_id, submission_id)
    controller = request.contest.controller
    controller.judge(submission, request.GET.dict())
    messages.info(request, _("Rejudge request received."))
    return redirect('submission',
                    contest_id=contest_id,
                    submission_id=submission_id)
def unpublish_solution_view(request, contest_id, submission_id):
    submission = get_submission_or_error(request, contest_id, submission_id)

    pub, _created = VoluntarySolutionPublication.objects \
            .get_or_create(submission=submission)

    pub.delete()
    return redirect('publish_solutions', contest_id=contest_id)
def download_output_file_view(request,
                              contest_id,
                              submission_id,
                              testrun_report_id=None):
    submission = get_submission_or_error(request, contest_id, submission_id,
                                         TestRunProgramSubmission)
    result = get_testrun_report_or_404(request, submission, testrun_report_id)
    return stream_file(result.output_file, name='output.out')
예제 #10
0
def rejudge_submission_view(request, submission_id):
    submission = get_submission_or_error(request, submission_id)
    pi = submission.problem_instance
    if not can_admin_problem_instance(request, pi):
        raise PermissionDenied

    pi.controller.judge(submission, request.GET.dict(), is_rejudge=True)
    messages.info(request, _("Rejudge request received."))
    return redirect('submission', submission_id=submission_id)
예제 #11
0
def rejudge_submission_view(request, submission_id):
    submission = get_submission_or_error(request, submission_id)
    pi = submission.problem_instance
    if not can_admin_problem_instance(request, pi):
        raise PermissionDenied

    pi.controller.judge(submission, request.GET.dict(), is_rejudge=True)
    messages.info(request, _("Rejudge request received."))
    return redirect('submission', submission_id=submission_id)
예제 #12
0
파일: views.py 프로젝트: sio2project/oioioi
def report_view(request, submission_id, report_id):
    submission = get_submission_or_error(request, submission_id)
    pi = submission.problem_instance
    if not can_admin_problem_instance(request, pi):
        raise PermissionDenied

    queryset = SubmissionReport.objects.filter(submission=submission)
    report = get_object_or_404(queryset, id=report_id)
    return HttpResponse(pi.controller.render_report(request, report))
예제 #13
0
def report_view(request, submission_id, report_id):
    submission = get_submission_or_error(request, submission_id)
    pi = submission.problem_instance
    if not can_admin_problem_instance(request, pi):
        raise PermissionDenied

    queryset = SubmissionReport.objects.filter(submission=submission)
    report = get_object_or_404(queryset, id=report_id)
    return HttpResponse(pi.controller.render_report(request, report))
예제 #14
0
파일: views.py 프로젝트: papedaniel/oioioi
def download_output_file_view(request, submission_id,
        testrun_report_id=None):
    submission = get_submission_or_error(request, submission_id,
            ZeusTestRunProgramSubmission)
    result = get_testrun_report_or_404(request, submission, testrun_report_id,
            ZeusTestRunReport)

    if result.output_file.size != result.full_out_size:
        zeus_server = get_zeus_server(
                submission.problem_instance.problem.zeusproblemdata.zeus_id)
        file = zeus_server.download_output(int(result.full_out_handle))
        result.output_file.save('full_out', ContentFile(file))

    return stream_file(result.output_file, name='output.out')
예제 #15
0
파일: views.py 프로젝트: marmistrz/oioioi
def score_reveal_view(request, submission_id):
    submission = get_submission_or_error(request, submission_id)
    controller = request.contest.controller
    if not has_scores_reveal(submission.problem):
        raise Http404
    decision, reason = controller.can_reveal(request, submission)
    if not decision:
        messages.error(request, reason)
    else:
        controller.reveal_score(request, submission)
        messages.success(request, _("Submission score has been revealed."))

    return redirect('submission',
                    contest_id=submission.problem_instance.contest_id,
                    submission_id=submission.id)
예제 #16
0
파일: views.py 프로젝트: papedaniel/oioioi
def score_reveal_view(request, submission_id):
    submission = get_submission_or_error(request, submission_id)
    controller = request.contest.controller
    if not has_scores_reveal(submission.problem):
        raise Http404
    decision, reason = controller.can_reveal(request, submission)
    if not decision:
        messages.error(request, reason)
    else:
        controller.reveal_score(request, submission)
        messages.success(request, _("Submission score has been revealed."))

    return redirect('submission',
        contest_id=submission.problem_instance.contest_id,
        submission_id=submission.id)
예제 #17
0
def change_submission_kind_view(request, submission_id, kind):
    submission = get_submission_or_error(request, submission_id)
    pi = submission.problem_instance
    if not can_admin_problem_instance(request, pi):
        raise PermissionDenied

    controller = pi.controller
    if kind in controller.valid_kinds_for_submission(submission):
        controller.change_submission_kind(submission, kind)
        messages.success(request, _("Submission kind has been changed."))
    else:
        messages.error(request,
            _("%(kind)s is not valid kind for submission %(submission_id)d.")
            % {'kind': kind, 'submission_id': submission.id})
    return redirect('submission', submission_id=submission_id)
예제 #18
0
파일: views.py 프로젝트: sio2project/oioioi
def change_submission_kind_view(request, submission_id, kind):
    submission = get_submission_or_error(request, submission_id)
    pi = submission.problem_instance
    if not can_admin_problem_instance(request, pi):
        raise PermissionDenied

    controller = pi.controller
    if kind in controller.valid_kinds_for_submission(submission):
        controller.change_submission_kind(submission, kind)
        messages.success(request, _("Submission kind has been changed."))
    else:
        messages.error(request,
            _("%(kind)s is not valid kind for submission %(submission_id)d.")
            % {'kind': kind, 'submission_id': submission.id})
    return redirect('submission', submission_id=submission_id)
예제 #19
0
파일: views.py 프로젝트: papedaniel/oioioi
def show_library_file_view(request, submission_id):
    submission = get_submission_or_error(request, submission_id,
            ZeusTestRunProgramSubmission)
    data = submission.library_file.read(get_preview_size_limit())
    data, decode_error = decode_str(data)
    size = submission.library_file.size
    download_url = reverse('zeus_download_testrun_library',
        kwargs={'contest_id': request.contest.id,
                'submission_id': submission_id})
    return TemplateResponse(request, 'testrun/data.html', {
        'header': _("Library"),
        'data': data,
        'left': size - get_preview_size_limit(),
        'decode_error': decode_error,
        'download_url': download_url
    })
예제 #20
0
def download_output_file_view(request,
                              contest_id,
                              submission_id,
                              testrun_report_id=None):
    submission = get_submission_or_error(request, contest_id, submission_id,
                                         ZeusTestRunProgramSubmission)
    result = get_testrun_report_or_404(request, submission, testrun_report_id,
                                       ZeusTestRunReport)

    if result.output_file.size != result.full_out_size:
        zeus_server = get_zeus_server(
            submission.problem_instance.problem.zeusproblemdata.zeus_id)
        file = zeus_server.download_output(int(result.full_out_handle))
        result.output_file.save('full_out', ContentFile(file))

    return stream_file(result.output_file, name='output.out')
def change_submission_kind_view(request, contest_id, submission_id, kind):
    submission = get_submission_or_error(request, contest_id, submission_id)
    controller = request.contest.controller
    if kind in controller.valid_kinds_for_submission(submission):
        controller.change_submission_kind(submission, kind)
        messages.success(request, _("Submission kind has been changed."))
    else:
        messages.error(
            request,
            _("%(kind)s is not valid kind for submission %(submission_id)d.") %
            {
                'kind': kind,
                'submission_id': submission.id
            })
    return redirect('submission',
                    contest_id=contest_id,
                    submission_id=submission_id)
예제 #22
0
파일: views.py 프로젝트: sio2project/oioioi
def rejudge_submission_view(request, submission_id):
    submission = get_submission_or_error(request, submission_id)
    pi = submission.problem_instance
    if not can_admin_problem_instance(request, pi):
        raise PermissionDenied

    extra_args = {}
    supported_extra_args = pi.controller.get_supported_extra_args(submission)
    for flag in request.GET:
        if flag in supported_extra_args:
            extra_args[flag] = True
        else:
            raise SuspiciousOperation

    pi.controller.judge(submission, extra_args, is_rejudge=True)
    messages.info(request, _("Rejudge request received."))
    return redirect('submission', submission_id=submission_id)
예제 #23
0
def rejudge_submission_view(request, submission_id):
    submission = get_submission_or_error(request, submission_id)
    pi = submission.problem_instance
    if not can_admin_problem_instance(request, pi):
        raise PermissionDenied

    extra_args = {}
    supported_extra_args = pi.controller.get_supported_extra_args(submission)
    for flag in request.GET:
        if flag in supported_extra_args:
            extra_args[flag] = True
        else:
            raise SuspiciousOperation

    pi.controller.judge(submission, extra_args, is_rejudge=True)
    messages.info(request, _("Rejudge request received."))
    return redirect('submission', submission_id=submission_id)
예제 #24
0
파일: views.py 프로젝트: sio2project/oioioi
def show_output_file_view(request, submission_id,
                          testrun_report_id=None):
    submission = get_submission_or_error(request, submission_id,
                                         TestRunProgramSubmission)
    result = get_testrun_report_or_404(request, submission, testrun_report_id)
    data = result.output_file.read(get_preview_size_limit())
    data, decode_error = decode_str(data)
    size = result.output_file.size
    download_url = reverse('download_testrun_output',
            kwargs={'contest_id': request.contest.id,
                    'submission_id': submission_id})
    return TemplateResponse(request, 'testrun/data.html', {
        'header': _("Output"),
        'data': data,
        'left': size - get_preview_size_limit(),
        'decode_error': decode_error,
        'download_url': download_url
    })
예제 #25
0
파일: views.py 프로젝트: marmistrz/oioioi
def show_input_file_view(request, submission_id):
    submission = get_submission_or_error(request, submission_id,
                                         TestRunProgramSubmission)
    data = submission.input_file.read(get_preview_size_limit())
    data, decode_error = decode_str(data)
    size = submission.input_file.size
    download_url = reverse('download_testrun_input',
                           kwargs={
                               'contest_id': request.contest.id,
                               'submission_id': submission_id
                           })
    return TemplateResponse(
        request, 'testrun/data.html', {
            'header': _("Input"),
            'data': data,
            'left': size - get_preview_size_limit(),
            'decode_error': decode_error,
            'download_url': download_url
        })
def submission_view(request, contest_id, submission_id):
    submission = get_submission_or_error(request, contest_id, submission_id)
    controller = request.contest.controller
    header = controller.render_submission(request, submission)
    footer = controller.render_submission_footer(request, submission)
    reports = []
    queryset = SubmissionReport.objects.filter(submission=submission). \
        prefetch_related('scorereport_set')
    for report in controller.filter_visible_reports(
            request, submission, queryset.filter(status='ACTIVE')):
        reports.append(controller.render_report(request, report))

    all_reports = is_contest_admin(request) and \
        controller.filter_visible_reports(request, submission, queryset) or \
        []

    return TemplateResponse(
        request, 'contests/submission.html', {
            'submission': submission,
            'header': header,
            'footer': footer,
            'reports': reports,
            'all_reports': all_reports
        })
예제 #27
0
파일: views.py 프로젝트: sio2project/oioioi
def download_output_file_view(request, submission_id,
                              testrun_report_id=None):
    submission = get_submission_or_error(request, submission_id,
                                         TestRunProgramSubmission)
    result = get_testrun_report_or_404(request, submission, testrun_report_id)
    return stream_file(result.output_file, name='output.out')
예제 #28
0
파일: views.py 프로젝트: sio2project/oioioi
def download_input_file_view(request, submission_id):
    submission = get_submission_or_error(request, submission_id,
                                         TestRunProgramSubmission)
    return stream_file(submission.input_file, name='input.in')
예제 #29
0
파일: views.py 프로젝트: marmistrz/oioioi
def download_input_file_view(request, submission_id):
    submission = get_submission_or_error(request, submission_id,
                                         TestRunProgramSubmission)
    return stream_file(submission.input_file, name='input.in')
예제 #30
0
파일: views.py 프로젝트: papedaniel/oioioi
def change_submission_kind_view(request, submission_id, kind):
    submission = get_submission_or_error(request, submission_id)
    change_submission_kind_view_unsafe(request, submission, kind)
    return redirect('submission', contest_id=request.contest.id,
                    submission_id=submission_id)
예제 #31
0
def download_library_file_view(request, contest_id, submission_id):
    submission = get_submission_or_error(request, contest_id, submission_id,
                                         ZeusTestRunProgramSubmission)

    # TODO: filename
    return stream_file(submission.library_file, name='lib.h')
예제 #32
0
파일: views.py 프로젝트: papedaniel/oioioi
def rejudge_submission_view(request, submission_id):
    submission = get_submission_or_error(request, submission_id)
    rejudge_submission_view_unsafe(request, submission)
    return redirect('submission', contest_id=request.contest.id,
            submission_id=submission_id)
예제 #33
0
파일: views.py 프로젝트: papedaniel/oioioi
def report_view(request, submission_id, report_id):
    submission = get_submission_or_error(request, submission_id)
    controller = request.contest.controller
    queryset = SubmissionReport.objects.filter(submission=submission)
    report = get_object_or_404(queryset, id=report_id)
    return HttpResponse(controller.render_report(request, report))
예제 #34
0
파일: views.py 프로젝트: papedaniel/oioioi
def submission_view(request, submission_id):
    return submission_view_unsafe(request,
                get_submission_or_error(request, submission_id))
def report_view(request, contest_id, submission_id, report_id):
    submission = get_submission_or_error(request, contest_id, submission_id)
    controller = request.contest.controller
    queryset = SubmissionReport.objects.filter(submission=submission)
    report = get_object_or_404(queryset, id=report_id)
    return HttpResponse(controller.render_report(request, report))
예제 #36
0
파일: views.py 프로젝트: papedaniel/oioioi
def download_library_file_view(request, submission_id):
    submission = get_submission_or_error(request, submission_id,
            ZeusTestRunProgramSubmission)

    # TODO: filename
    return stream_file(submission.library_file, name='lib.h')