예제 #1
0
    def pack(self):
        try:
            original_package = OriginalPackage.objects.get(
                    problem=self.problem)
            if original_package.problem_package.package_file:
                return stream_file(original_package.
                        problem_package.package_file)
        except OriginalPackage.DoesNotExist:
            pass

        # If the original package is not available, produce the most basic
        # output: tests, statements, model solutions.
        fd, tmp_filename = tempfile.mkstemp()
        try:
            self.zip = zipfile.ZipFile(os.fdopen(fd, 'wb'), 'w',
                    zipfile.ZIP_DEFLATED)
            self._pack_statement()
            self._pack_tests()
            self._pack_model_solutions()
            self.zip.close()
            zip_filename = '%s.zip' % self.short_name
            return stream_file(File(open(tmp_filename, 'rb'),
                    name=zip_filename))
        finally:
            os.unlink(tmp_filename)
예제 #2
0
def problem_attachment_view(request, attachment_id):
    attachment = get_object_or_404(ProblemAttachment, id=attachment_id)
    problem_instances = visible_problem_instances(request)
    problem_ids = [pi.problem_id for pi in problem_instances]
    if attachment.problem_id not in problem_ids:
        raise PermissionDenied
    return stream_file(attachment.content, attachment.download_name)
예제 #3
0
파일: views.py 프로젝트: sio2project/oioioi
def problem_statement_view(request, problem_instance):
    controller = request.contest.controller
    pi = get_object_or_404(ProblemInstance, round__contest=request.contest,
            short_name=problem_instance)

    if not controller.can_see_problem(request, pi) or \
            not controller.can_see_statement(request, pi):
        raise PermissionDenied

    if not pi.problem.controller.supports_problem_statement():
        # if the problem doesn't support having a problem statement,
        # redirect to submission
        return redirect('submit', problem_instance_id=pi.id)

    statement = query_statement(pi.problem)

    if not statement:
        return TemplateResponse(request, 'contests/no_problem_statement.html',
                    {'problem_instance': pi})

    if statement.extension == '.zip':
        return redirect('problem_statement_zip_index',
                contest_id=request.contest.id,
                problem_instance=problem_instance, statement_id=statement.id)
    return stream_file(statement.content, statement.download_name)
예제 #4
0
파일: views.py 프로젝트: sio2project/oioioi
def problem_site_external_statement_view(request, site_key):
    problem = get_object_or_404(Problem, problemsite__url_key=site_key)
    statement = query_statement(problem.id)
    if statement.extension == '.zip' \
            and not can_admin_problem(request, problem):
        raise PermissionDenied
    return stream_file(statement.content, statement.download_name)
def contest_attachment_view(request, contest_id, attachment_id):
    attachment = get_object_or_404(ContestAttachment,
                                   contest_id=contest_id,
                                   id=attachment_id)
    if attachment.round and attachment.round not in visible_rounds(request):
        raise PermissionDenied
    return stream_file(attachment.content)
예제 #6
0
def problem_statement_view(request, problem_instance):
    controller = request.contest.controller
    pi = get_object_or_404(ProblemInstance,
                           round__contest=request.contest,
                           short_name=problem_instance)

    if not controller.can_see_problem(request, pi) or \
            not controller.can_see_statement(request, pi):
        raise PermissionDenied

    if not pi.problem.controller.supports_problem_statement():
        # if the problem doesn't support having a problem statement,
        # redirect to submission
        return redirect('submit', problem_instance_id=pi.id)

    statement = query_statement(pi.problem)

    if not statement:
        return TemplateResponse(request, 'contests/no_problem_statement.html',
                                {'problem_instance': pi})

    if statement.extension == '.zip':
        return redirect('problem_statement_zip_index',
                        contest_id=request.contest.id,
                        problem_instance=problem_instance,
                        statement_id=statement.id)
    return stream_file(statement.content, statement.download_name)
예제 #7
0
파일: views.py 프로젝트: matrach/oioioi
def generate_pdfreport(request, report_form):
    report = _report_text(request, 'oireports/pdfreport.tex', report_form)
    # Create temporary file and folder
    tmp_folder = mkdtemp()
    try:
        tex_file, tex_filename = mkstemp(dir=tmp_folder)

        # Pass the TeX template through Django templating engine
        # and into the temp file
        os.write(tex_file, report.encode('utf-8'))
        os.close(tex_file)

        # Compile the TeX file with PDFLaTeX
        # \write18 is disabled by default, so no LaTeX injection should happen
        for i in xrange(3):
            p = subprocess.Popen([
                    'pdflatex',
                    '-output-directory=' + tmp_folder,
                    tex_filename
                ],
                stdin=open('/dev/null'),
                stdout=subprocess.PIPE,
                stderr=subprocess.STDOUT)
            stdout, stderr = p.communicate()
            if p.returncode:
                raise RuntimeError('pdflatex failed: ' + stdout)

        # Get PDF file contents
        pdf_file = open(tex_filename + '.pdf', 'r')
        filename = '%s-%s-%s.pdf' % (request.contest.id,
            report_form.cleaned_data['report_round'],
            report_form.cleaned_data['report_region'])
        return stream_file(File(pdf_file), filename)
    finally:
        shutil.rmtree(tmp_folder)
예제 #8
0
def download_user_all_output_view(request, submission_report_id):
    submission_report = get_object_or_404(SubmissionReport,
                                          id=submission_report_id)
    _check_generate_out_permission(request, submission_report)

    testreports = TestReport.objects.filter(
        submission_report=submission_report)
    if not all(bool(report.output_file) for report in testreports):
        raise Http404

    if not is_contest_basicadmin(request):
        for report in testreports:
            _check_generated_out_visibility_for_user(report)

    zipfd, tmp_zip_filename = tempfile.mkstemp()
    with zipfile.ZipFile(os.fdopen(zipfd, 'wb'), 'w') as zip:
        for report in testreports:
            arcname = _userout_filename(report)
            testfd, tmp_test_filename = tempfile.mkstemp()
            fileobj = os.fdopen(testfd, 'wb')
            try:
                shutil.copyfileobj(report.output_file, fileobj)
                fileobj.close()
                zip.write(tmp_test_filename, arcname)
            finally:
                os.unlink(tmp_test_filename)

        name = submission_report.submission.problem_instance.problem.short_name
        return stream_file(
            File(
                open(tmp_zip_filename, 'rb'),
                name=name + '_' + str(submission_report.submission.user) +
                '_' + str(submission_report.id) + '_user_outs.zip',
            ))
예제 #9
0
파일: views.py 프로젝트: papedaniel/oioioi
def test_view(request, package_id):
    tp = get_object_or_404(TestsPackage, id=package_id)
    if not is_contest_admin(request) and not tp.is_visible(request.timestamp):
        raise PermissionDenied
    file_name = '%s.zip' % tp.name
    file_name = file_name.encode('utf-8')
    return stream_file(tp.package, name=file_name)
예제 #10
0
파일: views.py 프로젝트: papedaniel/oioioi
def download_user_all_output_view(request, submission_report_id):
    submission_report = get_object_or_404(SubmissionReport,
                                          id=submission_report_id)
    _check_generate_out_permission(request, submission_report)

    testreports = TestReport.objects.filter(
                                        submission_report=submission_report)
    if not all(bool(report.output_file) for report in testreports):
        raise Http404

    if not is_contest_admin(request):
        for report in testreports:
            _check_generated_out_visibility_for_user(report)

    zipfd, tmp_zip_filename = tempfile.mkstemp()
    with zipfile.ZipFile(os.fdopen(zipfd, 'wb'), 'w') as zip:
        for report in testreports:
            arcname = _userout_filename(report)
            testfd, tmp_test_filename = tempfile.mkstemp()
            fileobj = os.fdopen(testfd, 'wb')
            try:
                shutil.copyfileobj(report.output_file, fileobj)
                fileobj.close()
                zip.write(tmp_test_filename, arcname)
            finally:
                os.unlink(tmp_test_filename)

        name = submission_report.submission.problem_instance.problem.short_name
        return stream_file(File(open(tmp_zip_filename, 'rb'),
            name=name + '_' + str(submission_report.submission.user) +
            '_' + str(submission_report.id) + '_user_outs.zip'))
예제 #11
0
파일: views.py 프로젝트: mahrud/oioioi
def problem_attachment_view(request, contest_id, attachment_id):
    attachment = get_object_or_404(ProblemAttachment, id=attachment_id)
    problem_instances = visible_problem_instances(request)
    problem_ids = [pi.problem_id for pi in problem_instances]
    if attachment.problem_id not in problem_ids:
        raise PermissionDenied
    return stream_file(attachment.content)
예제 #12
0
파일: views.py 프로젝트: papedaniel/oioioi
def download_checker_exe_view(request, checker_id):
    checker = get_object_or_404(OutputChecker, id=checker_id)
    if not can_admin_problem_instance(request, checker.problem):
        raise PermissionDenied
    if not checker.exe_file:
        raise Http404
    return stream_file(checker.exe_file)
예제 #13
0
파일: views.py 프로젝트: mahrud/oioioi
def problem_statement_view(request, contest_id, problem_instance):
    controller = request.contest.controller
    pi = get_object_or_404(ProblemInstance, round__contest=request.contest,
            short_name=problem_instance)

    if not controller.can_see_problem(request, pi):
        raise PermissionDenied

    statements = ProblemStatement.objects.filter(problem=pi.problem)
    if not statements:
        return TemplateResponse(request, 'contests/no_problem_statement.html',
                    {'problem_instance': pi})

    lang_prefs = [translation.get_language()] + ['', None] + \
            [l[0] for l in settings.LANGUAGES]
    ext_prefs = ['.pdf', '.ps', '.html', '.txt']

    def sort_key(statement):
        try:
            lang_pref = lang_prefs.index(statement.language)
        except ValueError:
            lang_pref = sys.maxint
        try:
            ext_pref = (ext_prefs.index(statement.extension), '')
        except ValueError:
            ext_pref = (sys.maxint, statement.extension)
        return lang_pref, ext_pref

    statement = sorted(statements, key=sort_key)[0]
    return stream_file(statement.content)
예제 #14
0
파일: views.py 프로젝트: neeraj9/oioioi
def download_checker_exe_view(request, checker_id):
    checker = get_object_or_404(OutputChecker, id=checker_id)
    if not request.user.has_perm("problems.problem_admin", checker.problem):
        raise PermissionDenied
    if not checker.exe_file:
        raise Http404
    return stream_file(checker.exe_file)
예제 #15
0
파일: views.py 프로젝트: sio2project/oioioi
def download_input_file_view(request, test_id):
    test = get_object_or_404(Test, id=test_id)

    if not can_admin_instance_of_problem(request, test.problem):
        raise PermissionDenied
    return stream_file(test.input_file,
                       strip_num_or_hash(test.input_file.name))
예제 #16
0
def generate_xmlreport(request, report_form):
    report = _report_text(request, 'oireports/xmlreport.xml', report_form)
    filename = '%s-%s-%s.xml' % (
        request.contest.id,
        report_form.cleaned_data['report_round'],
        report_form.cleaned_data['report_region'],
    )
    return stream_file(ContentFile(report.encode('utf-8')), filename)
예제 #17
0
def download_checker_exe_view(request, checker_id):
    checker = get_object_or_404(OutputChecker, id=checker_id)
    if not can_admin_instance_of_problem(request, checker.problem):
        raise PermissionDenied
    if not checker.exe_file:
        raise Http404
    return stream_file(checker.exe_file,
                       strip_num_or_hash(checker.exe_file.name))
예제 #18
0
def download_checker_exe_view(request, checker_id):
    checker = get_object_or_404(OutputChecker, id=checker_id)
    if not test.problem_instance.controller.can_see_checker_exe(request, test):
        raise PermissionDenied
    if not checker.exe_file:
        raise Http404
    return stream_file(checker.exe_file,
                       strip_num_or_hash(checker.exe_file.name))
예제 #19
0
def download_package_traceback_view(request, package_id):
    package = _get_package(request, package_id, 'contests.contest_basicadmin')
    if not package.traceback:
        raise Http404
    return stream_file(
        package.traceback,
        'package_%s_%d_traceback.txt' % (package.problem_name, package.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')
예제 #21
0
def problem_site_external_statement_view(request, site_key):
    problem = get_object_or_404(Problem, problemsite__url_key=site_key)
    statement = query_statement(problem.id)
    if not statement:
        raise Http404
    if statement.extension == '.zip' \
            and not can_admin_problem(request, problem):
        raise PermissionDenied
    return stream_file(statement.content, statement.download_name)
예제 #22
0
파일: archive.py 프로젝트: pragacz/oioioi
 def _resolve_streamed_files(file, ext):
     if isinstance(file, six.string_types) or hasattr(
             file, 'seek') or hasattr(file, 'tell'):
         return file, False
     lookup_filename = file.name + ext
     base, tail_ext = os.path.splitext(lookup_filename.lower())
     f = tempfile.NamedTemporaryFile(suffix=tail_ext, delete=False)
     f.writelines(stream_file(file, file.name).streaming_content)
     f.close()
     return f.name, True
예제 #23
0
 def pack(self):
     try:
         original_package = OriginalPackage.objects.get(
             problem=self.problem)
         return stream_file(original_package.package_file)
     except OriginalPackage.DoesNotExist:
         # If the original package is not available, produce the most basic
         # output: tests, statements, model solutions.
         fd, tmp_filename = tempfile.mkstemp()
         try:
             self.zip = zipfile.ZipFile(os.fdopen(fd, 'wb'), 'w')
             self._pack_statement()
             self._pack_tests()
             self._pack_model_solutions()
             self.zip.close()
             zip_filename = '%s.zip' % (self.short_name, )
             return stream_file(
                 File(open(tmp_filename, 'rb'), name=zip_filename))
         finally:
             os.unlink(tmp_filename)
예제 #24
0
파일: views.py 프로젝트: sio2project/oioioi
def contest_attachment_view(request, attachment_id):
    attachment = get_object_or_404(ContestAttachment,
            contest_id=request.contest.id, id=attachment_id)

    if (attachment.round and
            attachment.round not in visible_rounds(request)) or \
       (not is_contest_admin(request) and
           attachment.pub_date and attachment.pub_date > request.timestamp):
        raise PermissionDenied

    return stream_file(attachment.content, attachment.download_name)
예제 #25
0
def contest_attachment_view(request, attachment_id):
    attachment = get_object_or_404(ContestAttachment,
            contest_id=request.contest.id, id=attachment_id)

    if (attachment.round and
            attachment.round not in visible_rounds(request)) or \
       (not is_contest_basicadmin(request) and
           attachment.pub_date and attachment.pub_date > request.timestamp):
        raise PermissionDenied

    return stream_file(attachment.content, attachment.download_name)
예제 #26
0
def download_problem_package_file_view(request, package_id, file_name):
    package = _get_package(request, package_id, 'contests.contest_admin')
    archive = Archive(package.package_file)
    dir_path = tempfile.mkdtemp(dir=tempfile.gettempdir())
    try:
        archive.extract(to_path=dir_path)
        filepath = os.path.join(dir_path, file_name)
        if os.path.isfile(filepath):
            return stream_file(File(open(filepath)),
                               os.path.basename(os.path.normpath(file_name)))
    finally:
        shutil.rmtree(dir_path)
예제 #27
0
파일: views.py 프로젝트: wczyz/oioioi
def picture_view(request, mode, picture_id):
    modes = {
        'a': QuizAnswerPicture,
        'q': QuizQuestionPicture,
    }
    if mode not in modes:
        return HttpResponseNotFound()
    picture = get_object_or_404(modes[mode], id=picture_id)
    if not any([pi.controller.can_submit(request, pi) or can_admin_problem_instance(request, pi) \
        for pi in picture.quiz.probleminstance_set.filter(contest=request.contest)]):
        raise PermissionDenied
    return stream_file(picture.file)
예제 #28
0
파일: views.py 프로젝트: papedaniel/oioioi
def download_user_one_output_view(request, testreport_id):
    testreport = get_object_or_404(TestReport, id=testreport_id)

    if not is_contest_admin(request):
        _check_generated_out_visibility_for_user(testreport)

    submission_report = testreport.submission_report
    _check_generate_out_permission(request, submission_report)

    if not bool(testreport.output_file):
        raise Http404

    return stream_file(testreport.output_file, _userout_filename(testreport))
예제 #29
0
def download_user_one_output_view(request, testreport_id):
    testreport = get_object_or_404(TestReport, id=testreport_id)

    if not is_contest_admin(request):
        _check_generated_out_visibility_for_user(testreport)

    submission_report = testreport.submission_report
    _check_generate_out_permission(request, submission_report)

    if not bool(testreport.output_file):
        raise Http404

    return stream_file(testreport.output_file, _userout_filename(testreport))
예제 #30
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')
예제 #31
0
파일: package.py 프로젝트: AdiNar/oioioi
    def pack(self):
        """:returns: Archive from original package if such file exists,
           otherwise new archive with test, statements and model solutions.
        """
        try:
            original_package = OriginalPackage.objects.get(
                problem=self.problem)
            if original_package.problem_package.package_file:
                return stream_file(
                    original_package.problem_package.package_file)
        except OriginalPackage.DoesNotExist:
            pass

        return self._create_basic_archive()
예제 #32
0
    def pack(self):
        """:returns: Archive from original package if such file exists,
           otherwise new archive with test, statements and model solutions.
        """
        try:
            original_package = OriginalPackage.objects.get(
                    problem=self.problem)
            if original_package.problem_package.package_file:
                return stream_file(original_package.
                        problem_package.package_file)
        except OriginalPackage.DoesNotExist:
            pass

        return self._create_basic_archive()
예제 #33
0
 def _create_basic_archive(self):
     """Produce the most basic output: tests, statements, model solutions."""
     fd, tmp_filename = tempfile.mkstemp()
     try:
         self.zip = zipfile.ZipFile(os.fdopen(fd, 'wb'), 'w',
                                    zipfile.ZIP_DEFLATED)
         self._pack_statement()
         self._pack_tests()
         self._pack_model_solutions()
         self.zip.close()
         zip_filename = '%s.zip' % self.short_name
         return stream_file(
             File(open(tmp_filename, 'rb'), name=zip_filename))
     finally:
         os.unlink(tmp_filename)
예제 #34
0
 def _create_basic_archive(self):
     """Produce the most basic output: tests, statements, model solutions.
     """
     fd, tmp_filename = tempfile.mkstemp()
     try:
         self.zip = zipfile.ZipFile(os.fdopen(fd, 'wb'), 'w',
                                    zipfile.ZIP_DEFLATED)
         self._pack_statement()
         self._pack_tests()
         self._pack_model_solutions()
         self.zip.close()
         zip_filename = '%s.zip' % self.short_name
         return stream_file(File(open(tmp_filename, 'rb'),
                                 name=zip_filename))
     finally:
         os.unlink(tmp_filename)
예제 #35
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')
예제 #36
0
파일: views.py 프로젝트: papedaniel/oioioi
def problem_statement_view(request, problem_instance):
    controller = request.contest.controller
    pi = get_object_or_404(ProblemInstance, round__contest=request.contest,
            short_name=problem_instance)

    if not controller.can_see_problem(request, pi) or \
            not controller.can_see_statement(request, pi):
        raise PermissionDenied

    statement = query_statement(pi.problem)

    if not statement:
        return TemplateResponse(request, 'contests/no_problem_statement.html',
                    {'problem_instance': pi})

    if statement.extension == '.zip':
        return redirect('problem_statement_zip_index',
                contest_id=request.contest.id,
                problem_instance=problem_instance, statement_id=statement.id)
    return stream_file(statement.content)
예제 #37
0
def generate_pdf(tex_code, filename, extra_args=[], num_passes=3):
    # Create temporary file and folder
    tmp_folder = tempfile.mkdtemp()
    try:
        tex_filename = 'doc.tex'
        tex_path = os.path.join(tmp_folder, tex_filename)

        with codecs.open(tex_path, 'w', 'utf-8') as f:
            f.write(tex_code)

        command = ['pdflatex']
        command.extend(extra_args)
        command.append(tex_filename)
        for _i in xrange(num_passes):
            execute(command, cwd=tmp_folder)

        # Get PDF file contents
        pdf_file = open(os.path.splitext(tex_path)[0] + '.pdf')
        return stream_file(File(pdf_file), filename)
    finally:
        shutil.rmtree(tmp_folder)
예제 #38
0
파일: pdf.py 프로젝트: sio2project/oioioi
def generate_pdf(tex_code, filename, extra_args=[], num_passes=3):
    # Create temporary file and folder
    tmp_folder = tempfile.mkdtemp()
    try:
        tex_filename = 'doc.tex'
        tex_path = os.path.join(tmp_folder, tex_filename)

        with codecs.open(tex_path, 'w', 'utf-8') as f:
            f.write(tex_code)

        command = ['pdflatex']
        command.extend(extra_args)
        command.append(tex_filename)
        for _i in range(num_passes):
            execute(command, cwd=tmp_folder)

        # Get PDF file contents
        pdf_file = open(os.path.splitext(tex_path)[0] + '.pdf')
        return stream_file(File(pdf_file), filename)
    finally:
        shutil.rmtree(tmp_folder)
def problem_statement_view(request, contest_id, problem_instance):
    controller = request.contest.controller
    pi = get_object_or_404(ProblemInstance,
                           round__contest=request.contest,
                           short_name=problem_instance)

    if not controller.can_see_problem(request, pi):
        raise PermissionDenied

    statements = ProblemStatement.objects.filter(problem=pi.problem)
    if not statements:
        return TemplateResponse(request, 'contests/no_problem_statement.html',
                                {'problem_instance': pi})

    lang_prefs = [translation.get_language()] + ['', None] + \
            [l[0] for l in settings.LANGUAGES]
    ext_prefs = ['.zip', '.pdf', '.ps', '.html', '.txt']

    def sort_key(statement):
        try:
            lang_pref = lang_prefs.index(statement.language)
        except ValueError:
            lang_pref = sys.maxint
        try:
            ext_pref = (ext_prefs.index(statement.extension), '')
        except ValueError:
            ext_pref = (sys.maxint, statement.extension)
        return lang_pref, ext_pref

    statement = sorted(statements, key=sort_key)[0]
    if statement.extension == '.zip':
        return redirect('problem_statement_zip_index',
                        contest_id=contest_id,
                        problem_instance=problem_instance,
                        statement_id=statement.id)
    return stream_file(statement.content)
예제 #40
0
def download_output_file_view(request, test_id):
    test = get_object_or_404(Test, id=test_id)
    if not request.user.has_perm('problems.problem_admin', test.problem):
        raise PermissionDenied
    return stream_file(test.output_file)
예제 #41
0
def download_submission_source_view(request, contest_id, submission_id):
    submission = get_object_or_404(ProgramSubmission, id=submission_id)
    if contest_id != submission.problem_instance.contest_id:
        raise Http404
    check_submission_access(request, submission)
    return stream_file(submission.source_file)
예제 #42
0
파일: views.py 프로젝트: sio2project/oioioi
def show_problem_attachment_view(request, attachment_id):
    attachment = get_object_or_404(ProblemAttachment, id=attachment_id)
    if not can_admin_instance_of_problem(request, attachment.problem):
        raise PermissionDenied
    return stream_file(attachment.content, attachment.download_name)
예제 #43
0
파일: views.py 프로젝트: sio2project/oioioi
def show_statement_view(request, statement_id):
    statement = get_object_or_404(ProblemStatement, id=statement_id)
    if not can_admin_instance_of_problem(request, statement.problem):
        raise PermissionDenied
    return stream_file(statement.content, statement.download_name)
예제 #44
0
파일: views.py 프로젝트: sio2project/oioioi
def problem_site_external_attachment_view(request, site_key, attachment_id):
    problem = get_object_or_404(Problem, problemsite__url_key=site_key)
    attachment = get_object_or_404(ProblemAttachment, id=attachment_id)
    if attachment.problem.id != problem.id:
        raise PermissionDenied
    return stream_file(attachment.content, attachment.download_name)
예제 #45
0
파일: views.py 프로젝트: mahrud/oioioi
def contest_attachment_view(request, contest_id, attachment_id):
    attachment = get_object_or_404(ContestAttachment, contest_id=contest_id,
        id=attachment_id)
    return stream_file(attachment.content)
예제 #46
0
파일: views.py 프로젝트: matrach/oioioi
def download_submission_source_view(request, contest_id, submission_id):
    submission = get_submission_or_404(request, contest_id, submission_id,
                                       ProgramSubmission)
    return stream_file(submission.source_file)
예제 #47
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')
예제 #48
0
파일: views.py 프로젝트: matrach/oioioi
def download_input_file_view(request, contest_id, submission_id):
    submission = get_submission_or_404(request, contest_id, submission_id,
                                       TestRunProgramSubmission)

    return stream_file(submission.input_file, name='input.in')
예제 #49
0
def download_output_file_view(request, test_id):
    test = get_object_or_404(Test, id=test_id)
    if not can_admin_instance_of_problem(request, test.problem):
        raise PermissionDenied
    return stream_file(test.output_file,
                       strip_num_or_hash(test.output_file.name))
예제 #50
0
def download_submission_source_view(request, submission_id):
    source_file = get_submission_source_file_or_error(request, submission_id)
    return stream_file(source_file)
예제 #51
0
파일: views.py 프로젝트: sio2project/oioioi
def download_report_view(request, pg_id):
    pg = get_object_or_404(PrizeGiving, id=pg_id)
    if not pg.report:
        raise Http404
    return stream_file(pg.report, name="prizes_report.csv")
예제 #52
0
파일: views.py 프로젝트: mitrandir77/oioioi
def show_statement_view(request, statement_id):
    statement = get_object_or_404(ProblemStatement, id=statement_id)
    if not request.user.has_perm('problems.problem_admin', statement.problem):
        raise PermissionDenied
    return stream_file(statement.content)
예제 #53
0
파일: views.py 프로젝트: sio2project/oioioi
def download_package_traceback_view(request, package_id):
    package = _get_package(request, package_id)
    if not package.traceback:
        raise Http404
    return stream_file(package.traceback, 'package_%s_%d_traceback.txt' % (
            package.problem_name, package.id))
예제 #54
0
파일: views.py 프로젝트: papedaniel/oioioi
def generate_xmlreport(request, report_form):
    report = _report_text(request, 'oireports/xmlreport.xml', report_form)
    filename = '%s-%s-%s.xml' % (request.contest.id,
        report_form.cleaned_data['report_round'],
        report_form.cleaned_data['report_region'])
    return stream_file(ContentFile(report.encode('utf-8')), filename)
예제 #55
0
def show_problem_attachment_view(request, attachment_id):
    attachment = get_object_or_404(ProblemAttachment, id=attachment_id)
    if not can_admin_instance_of_problem(request, attachment.problem):
        raise PermissionDenied
    return stream_file(attachment.content, attachment.download_name)
예제 #56
0
파일: views.py 프로젝트: matrach/oioioi
def download_output_file_view(request, contest_id, submission_id,
                              testrun_report_id=None):
    submission = get_submission_or_404(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')
예제 #57
0
파일: views.py 프로젝트: sio2project/oioioi
def download_problem_package_view(request, package_id):
    package = _get_package(request, package_id)
    return stream_file(package.package_file, package.download_name)
예제 #58
0
def stream_if_changed(request, image_object):
    return stream_file(image_object.image)
예제 #59
0
def show_statement_view(request, statement_id):
    statement = get_object_or_404(ProblemStatement, id=statement_id)
    if not request.user.has_perm('problems.problem_admin', statement.problem):
        raise PermissionDenied
    return stream_file(statement.content)