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, }, )
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, }, )
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})
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)
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')
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)
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))
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')
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)
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)
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 })
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)
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)
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 })
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 })
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')
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')
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)
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')
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)
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))
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))
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')