def get_actions(self, request): actions = super(PARegistrationParticipantAdmin, self).get_actions(request) if 'delete_selected' in actions: del actions['delete_selected'] return actions class PAProblemInstanceInline(admin.TabularInline): model = PAProblemInstanceData fields = ['division'] def has_delete_permission(self, request, obj=None): return False def get_readonly_fields(self, request, obj=None): if is_contest_admin(request): return super(PAProblemInstanceInline, self).get_readonly_fields(request, obj) return self.get_fields(request, obj) class PAProblemInstanceAdminMixin(object): """Adds :class:`~oioioi.pa.models.PAProblemInstanceData` to an admin panel.""" def __init__(self, *args, **kwargs): super(PAProblemInstanceAdminMixin, self).__init__(*args, **kwargs) self.inlines = self.inlines + [PAProblemInstanceInline] ProblemInstanceAdmin.mix_in(PAProblemInstanceAdminMixin)
suspended_on_init_display.short_description = _("Judge initial") suspended_on_init_display.boolean = True def suspended_on_final_display(self, instance): return not is_suspended(instance) suspended_on_final_display.short_description = _("Judge final") suspended_on_final_display.boolean = True def get_urls(self): urls = super(SuspendJudgeProblemInstanceAdminMixin, self).get_urls() extra_urls = [ url(r'(?P<problem_instance_id>\d+)/resume_and_rejudge/$', self.resume_and_rejudge_view, name='suspendjudge_resume_and_rejudge'), url(r'(?P<problem_instance_id>\d+)/resume_and_clear/$', self.resume_and_clear_view, name='suspendjudge_resume_and_clear'), url(r'(?P<problem_instance_id>\d+)/suspend_all/$', self.suspend_all_view, name='suspendjudge_suspend_all'), url(r'(?P<problem_instance_id>\d+)/suspend_all_but_init/$', self.suspend_all_but_init_view, name='suspendjudge_suspend_all_but_init') ] return extra_urls + urls ProblemInstanceAdmin.mix_in(SuspendJudgeProblemInstanceAdminMixin)
self.inlines = self.inlines + [ ReportActionsConfigInline, OutputCheckerInline, LibraryProblemDataInline ] class ProgrammingProblemInstanceAdminMixin(object): """Adds :class:`~oioioi.programs.models.Test` to an admin panel. """ def __init__(self, *args, **kwargs): super(ProgrammingProblemInstanceAdminMixin, self). \ __init__(*args, **kwargs) self.inlines = self.inlines + [TestInline] ProblemInstanceAdmin.mix_in(ProgrammingProblemInstanceAdminMixin) class ProgrammingMainProblemInstanceAdminMixin(object): """Adds :class:`~oioioi.programs.models.Test` to an admin panel. """ def __init__(self, *args, **kwargs): super(ProgrammingMainProblemInstanceAdminMixin, self). \ __init__(*args, **kwargs) self.inlines = self.inlines + [TestInline] MainProblemInstanceAdmin.mix_in(ProgrammingMainProblemInstanceAdminMixin) class ProblemPackageAdminMixin(object):
url(r'(\d+)/models/rejudge$', self.rejudge_model_solutions_view, name='contests_probleminstance_models_rejudge'), ) return extra_urls + urls def inline_actions(self, instance): actions = super(ProgrammingProblemInstanceAdminMixin, self).inline_actions(instance) if ModelSolution.objects.filter(problem_id=instance.problem_id): models_view = reverse('oioioiadmin:contests_probleminstance_models', args=(instance.id,)) actions.append((models_view, _("Model solutions"))) return actions ProblemInstanceAdmin.mix_in(ProgrammingProblemInstanceAdminMixin) class ModelSubmissionAdminMixin(object): def user_full_name(self, instance): if not instance.user: instance = instance.programsubmission if instance: instance = instance.modelprogramsubmission if instance: return '(%s)' % (conditional_escape(force_unicode( instance.model_solution.name)),) return super(ModelSubmissionAdminMixin, self).user_full_name(instance) user_full_name.short_description = SubmissionAdmin.user_full_name.short_description user_full_name.admin_order_field = SubmissionAdmin.user_full_name.admin_order_field SubmissionAdmin.mix_in(ModelSubmissionAdminMixin)
from oioioi.base import admin from oioioi.base.forms import AlwaysChangedModelForm from oioioi.contests.admin import ProblemInstanceAdmin from oioioi.testrun.models import TestRunConfig class TestRunConfigInline(admin.TabularInline): model = TestRunConfig can_delete = True extra = 0 form = AlwaysChangedModelForm class TestRunAdminMixin(object): """Adds `TestRunConfigForInstance` to an admin panel. """ def __init__(self, *args, **kwargs): super(TestRunAdminMixin, self) \ .__init__(*args, **kwargs) self.inlines = self.inlines + [TestRunConfigInline] ProblemInstanceAdmin.mix_in(TestRunAdminMixin)
return request.user.is_superuser def has_delete_permission(self, request, obj=None): return request.user.is_superuser def get_actions(self, request): actions = super(PARegistrationParticipantAdmin, self) \ .get_actions(request) if 'delete_selected' in actions: del actions['delete_selected'] return actions class PAProblemInstanceInline(admin.TabularInline): model = PAProblemInstanceData fields = ['division'] def has_delete_permission(self, request, obj=None): return False class PAProblemInstanceAdminMixin(object): """Adds :class:`~oioioi.pa.models.PAProblemInstanceData` to an admin panel. """ def __init__(self, *args, **kwargs): super(PAProblemInstanceAdminMixin, self).__init__(*args, **kwargs) self.inlines = self.inlines + [PAProblemInstanceInline] ProblemInstanceAdmin.mix_in(PAProblemInstanceAdminMixin)
model = ScoreRevealConfig can_delete = True extra = 0 form = AlwaysChangedModelForm class ScoresRevealProblemInstanceAdminMixin(object): """Adds `ScoreRevealConfigForInstance` to an admin panel. """ def __init__(self, *args, **kwargs): super(ScoresRevealProblemInstanceAdminMixin, self) \ .__init__(*args, **kwargs) self.inlines = self.inlines + [ScoresRevealConfigInline] ProblemInstanceAdmin.mix_in(ScoresRevealProblemInstanceAdminMixin) class ScoresRevealSubmissionAdminMixin(object): """Adds reveal info and filter to an admin panel. """ def __init__(self, *args, **kwargs): super(ScoresRevealSubmissionAdminMixin, self).__init__(*args, **kwargs) def get_list_display(self, request): return super(ScoresRevealSubmissionAdminMixin, self) \ .get_list_display(request) + ['reveal_display'] def get_list_filter(self, request): return super(ScoresRevealSubmissionAdminMixin, self) \ .get_list_filter(request) + [RevealedFilter]
def suspended_on_init_display(self, instance): return not is_suspended_on_init(instance) suspended_on_init_display.short_description = _("Judge initial") suspended_on_init_display.boolean = True def suspended_on_final_display(self, instance): return not is_suspended(instance) suspended_on_final_display.short_description = _("Judge final") suspended_on_final_display.boolean = True def get_urls(self): urls = super(SuspendJudgeProblemInstanceAdminMixin, self).get_urls() extra_urls = [ url(r'(?P<problem_instance_id>\d+)/resume_and_rejudge/$', self.resume_and_rejudge_view, name='suspendjudge_resume_and_rejudge'), url(r'(?P<problem_instance_id>\d+)/resume_and_clear/$', self.resume_and_clear_view, name='suspendjudge_resume_and_clear'), url(r'(?P<problem_instance_id>\d+)/suspend_all/$', self.suspend_all_view, name='suspendjudge_suspend_all'), url(r'(?P<problem_instance_id>\d+)/suspend_all_but_init/$', self.suspend_all_but_init_view, name='suspendjudge_suspend_all_but_init') ] return extra_urls + urls ProblemInstanceAdmin.mix_in(SuspendJudgeProblemInstanceAdminMixin)
def __init__(self, *args, **kwargs): super(TestRunProgrammingProblemAdminMixin, self) \ .__init__(*args, **kwargs) self.inlines = self.inlines + [TestRunConfigInline] class TestRunProblemInstanceAdminMixin(object): """Adds `TestRunConfigForInstance` to an admin panel. """ def __init__(self, *args, **kwargs): super(TestRunProblemInstanceAdminMixin, self) \ .__init__(*args, **kwargs) self.inlines = self.inlines + [TestRunConfigForInstanceInline] def get_inline_instances(self, request, obj=None): inlines = (super(TestRunProblemInstanceAdminMixin, self) .get_inline_instances(request, obj)) if obj and hasattr(obj.problem, 'test_run_config'): return inlines else: return [inline for inline in inlines if not isinstance(inline, TestRunConfigForInstanceInline)] # Since ProblemInstanceAdmin isn't an InstanceDependentAdmin (because reasons), # we don't use the controller to conditionally add the mixin, instead we always # add it, and check if we should modify the behaviour in the mixin itself. ProblemInstanceAdmin.mix_in(TestRunProblemInstanceAdminMixin)