Source code for oioioi.scoresreveal.admin

from django.contrib.admin import SimpleListFilter
from django.utils.translation import gettext_lazy as _

from oioioi.base import admin
from oioioi.base.admin import NO_CATEGORY
from oioioi.base.forms import AlwaysChangedModelForm
from oioioi.contests.admin import ProblemInstanceAdmin, SubmissionAdmin
from oioioi.contests.utils import is_contest_admin
from oioioi.scoresreveal.models import ScoreRevealConfig
from oioioi.scoresreveal.utils import is_revealed


[docs]class RevealedFilter(SimpleListFilter):
[docs] title = _("revealed")
[docs] parameter_name = 'revealed'
[docs] def lookups(self, request, model_admin): return ((1, _("Yes")), (0, _("No")))
[docs] def queryset(self, request, queryset): if self.value(): isnull = self.value() == '0' return queryset.filter(revealed__isnull=isnull) else: return queryset
[docs]class ScoresRevealConfigInline(admin.TabularInline):
[docs] model = ScoreRevealConfig
[docs] can_delete = True
[docs] extra = 0
[docs] form = AlwaysChangedModelForm
[docs]class ScoresRevealProblemInstanceAdminMixin(object): """Adds `ScoreRevealConfigForInstance` to an admin panel.""" def __init__(self, *args, **kwargs): super(ScoresRevealProblemInstanceAdminMixin, self).__init__(*args, **kwargs) self.inlines = tuple(self.inlines) + (ScoresRevealConfigInline,)
ProblemInstanceAdmin.mix_in(ScoresRevealProblemInstanceAdminMixin)
[docs]class ScoresRevealSubmissionAdminMixin(object): """Adds reveal info and filter to an admin panel.""" def __init__(self, *args, **kwargs): super(ScoresRevealSubmissionAdminMixin, self).__init__(*args, **kwargs)
[docs] def get_list_display(self, request): return super(ScoresRevealSubmissionAdminMixin, self).get_list_display( request ) + ['reveal_display']
[docs] def get_list_filter(self, request): return super(ScoresRevealSubmissionAdminMixin, self).get_list_filter( request ) + [RevealedFilter]
[docs] def reveal_display(self, instance): return is_revealed(instance)
[docs] reveal_display.short_description = _("Revealed")
[docs] reveal_display.admin_order_field = 'revealed'
[docs] reveal_display.boolean = True
SubmissionAdmin.mix_in(ScoresRevealSubmissionAdminMixin)