Esempio n. 1
0
 def unpack(self, env):
     pp = ProblemPackage.objects.get(id=env['package_id'])
     p = Problem.create(name='foo', short_name='bar',
             controller_name=
                     'oioioi.problems.controllers.ProblemController')
     env['problem_id'] = p.id
     if 'FAIL' in pp.package_file.name:
         raise DummyPackageException("DUMMY_FAILURE")
     return env
Esempio n. 2
0
    def _create_problem_instance(self):
        author_username = self.env.get('author')
        if author_username:
            author = User.objects.get(username=author_username)
        else:
            author = None

        return Problem.create(name=self.short_name,
                              short_name=self.short_name,
                              controller_name=self.controller_name,
                              contest=self.package.contest,
                              is_public=(author is None),
                              author=author)
Esempio n. 3
0
    def _create_problem_instance(self):
        author_username = self.env.get('author')
        if author_username:
            author = User.objects.get(username=author_username)
        else:
            author = None

        return Problem.create(
            name=self.short_name,
            short_name=self.short_name,
            controller_name=self.controller_name,
            contest=self.package.contest,
            is_public=(author is None),
            author=author)
Esempio n. 4
0
    def unpack(self, env, package):
        self.short_name = self._find_main_folder()
        self.env = env
        self.package = package
        existing_problem = self.package.problem
        if existing_problem:
            self.problem = existing_problem
            self.main_problem_instance = self.problem.main_problem_instance
            if existing_problem.short_name != self.short_name:
                raise ProblemPackageError(_("Tried to replace problem "
                    "'%(oldname)s' with '%(newname)s'. For safety, changing "
                    "problem short name is not possible.") %
                    dict(oldname=existing_problem.short_name,
                        newname=self.short_name))
        else:
            author_username = env.get('author')
            if author_username:
                author = User.objects.get(username=author_username)
            else:
                author = None

            self.problem = Problem.create(
                    name=self.short_name,
                    short_name=self.short_name,
                    controller_name=self.controller_name,
                    contest=self.package.contest,
                    is_public=(author is None),
                    author=author)
            problem_site = ProblemSite(problem=self.problem,
                                       url_key=generate_key())
            problem_site.save()
            self.problem.problem_site = problem_site
            self.main_problem_instance = self.problem.main_problem_instance

        self.problem.package_backend_name = self.package_backend_name
        self.problem.save()
        tmpdir = tempfile.mkdtemp()
        logger.info("%s: tmpdir is %s", self.filename, tmpdir)
        try:
            self.archive.extract(to_path=tmpdir)
            self.rootdir = os.path.join(tmpdir, self.short_name)
            self.process_package()

            return self.problem
        finally:
            shutil.rmtree(tmpdir)
            if self.prog_archive:
                get_client().delete_file(self.prog_archive)
Esempio n. 5
0
    def _create_problem_instance(self):
        author_username = self.env.get('author')
        if author_username:
            author = User.objects.get(username=author_username)
        else:
            author = None

        return Problem.create(
            name=self.short_name,
            short_name=self.short_name,
            controller_name=self.controller_name,
            contest=self.package.contest,
            visibility=(Problem.VISIBILITY_PUBLIC
                        if author is None else self.env.get(
                            'visibility', Problem.VISIBILITY_FRIENDS)),
            author=author)