예제 #1
0
    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)
예제 #2
0
파일: admin.py 프로젝트: cytadela8/oioioi
    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)
예제 #3
0
        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):
예제 #4
0
파일: admin.py 프로젝트: mahrud/oioioi
                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)
예제 #5
0
파일: admin.py 프로젝트: pragacz/oioioi
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)
예제 #6
0
파일: admin.py 프로젝트: sio2project/oioioi
        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)
예제 #7
0
    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]
예제 #8
0
파일: admin.py 프로젝트: sio2project/oioioi
    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)
예제 #9
0
파일: admin.py 프로젝트: sio2project/oioioi
    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)