Source code for oioioi.zeus.controllers

from django.conf import settings
from django.utils.translation import gettext_lazy as _

from oioioi.evalmgr.tasks import recipe_placeholder
from oioioi.programs.controllers import ProgrammingProblemController
from oioioi.zeus.models import ZeusProblemData


[docs]class ZeusProblemController(ProgrammingProblemController):
[docs] description = _("Zeus programming problem")
[docs] def generate_base_environ(self, environ, submission, **kwargs): self.generate_initial_evaluation_environ(environ, submission) zeus_problem, _created = ZeusProblemData.objects.get_or_create( problem=self.problem ) environ['zeus_id'] = zeus_problem.zeus_id environ['zeus_problem_id'] = zeus_problem.zeus_problem_id environ.setdefault('evalmgr_extra_args', {})['queue'] = 'evalmgr-zeus'
[docs] def generate_recipe(self, kinds): recipe_body = [] # NOTE this will do nothing if the contest type is ACM # and kinds=['FULL'] if 'INITIAL' in kinds: recipe_body.extend( [ recipe_placeholder('before_initial_tests'), ( 'initial_submit_job', 'oioioi.zeus.handlers.submit_job', dict(kind='INITIAL'), ), ('initial_import_results', 'oioioi.zeus.handlers.import_results'), ( 'initial_update_tests_set', 'oioioi.zeus.handlers.update_problem_tests_set', dict(kind='EXAMPLE'), ), ('initial_grade_tests', 'oioioi.programs.handlers.grade_tests'), ('initial_grade_groups', 'oioioi.programs.handlers.grade_groups'), ( 'initial_grade_submission', 'oioioi.programs.handlers.grade_submission', dict(kind='EXAMPLE'), ), ( 'initial_make_report', 'oioioi.programs.handlers.make_report', dict(kind='INITIAL'), ), recipe_placeholder('after_initial_tests'), ] ) if 'NORMAL' in kinds: recipe_body.extend( [ recipe_placeholder('before_final_tests'), ( 'final_submit_job', 'oioioi.zeus.handlers.submit_job', dict(kind='NORMAL'), ), ('final_import_results', 'oioioi.zeus.handlers.import_results'), ( 'final_update_tests_set', 'oioioi.zeus.handlers.update_problem_tests_set', dict(kind='NORMAL'), ), ('final_grade_tests', 'oioioi.programs.handlers.grade_tests'), ('final_grade_groups', 'oioioi.programs.handlers.grade_groups'), ( 'final_grade_submission', 'oioioi.programs.handlers.grade_submission', ), ('final_make_report', 'oioioi.programs.handlers.make_report'), recipe_placeholder('after_final_tests'), ] ) if 'HIDDEN' in kinds: recipe_body.extend( [ recipe_placeholder('before_initial_tests'), ( 'initial_submit_job', 'oioioi.zeus.handlers.submit_job', dict(kind='INITIAL'), ), recipe_placeholder('before_final_tests'), ( 'final_submit_job', 'oioioi.zeus.handlers.submit_job', dict(kind='NORMAL'), ), ('import_results', 'oioioi.zeus.handlers.import_results'), ( 'initial_update_tests_set', 'oioioi.zeus.handlers.update_problem_tests_set', dict(kind='EXAMPLE'), ), ( 'final_update_tests_set', 'oioioi.zeus.handlers.update_problem_tests_set', dict(kind='NORMAL'), ), ('hidden_grade_tests', 'oioioi.programs.handlers.grade_tests'), ('hidden_grade_groups', 'oioioi.programs.handlers.grade_groups'), ( 'hidden_grade_submission', 'oioioi.programs.handlers.grade_submission', dict(kind=None), ), ( 'hidden_make_report', 'oioioi.programs.handlers.make_report', dict(kind='HIDDEN'), ), recipe_placeholder('after_all_tests'), ] ) return recipe_body
[docs] def fill_evaluation_environ(self, environ, submission, **kwargs): self.generate_base_environ(environ, submission, **kwargs) environ.setdefault('recipe', []).extend( self.generate_recipe(environ['report_kinds']) ) environ.setdefault('group_scorer', 'oioioi.programs.utils.min_group_scorer') environ.setdefault( 'score_aggregator', 'oioioi.programs.utils.sum_score_aggregator' )