Source code for oioioi.publicsolutions.controllers
from oioioi.programs.controllers import ProgrammingContestController
from oioioi.publicsolutions.utils import filter_public_solutions
[docs]class PublicSolutionsContestControllerMixin(object):
"""ContestController mixin that sets up publicsolutions app."""
[docs] def can_see_publicsolutions(self, request, round):
"""Determines whether solutions for the round have been published.
:rtype: bool
"""
return False
[docs] def solutions_must_be_public(self, qs):
"""This fuction takes for a parameter a queryset
with submissions for published rounds.
It should return a filtered queryset with exactly these submissions
for which solution is mandatorily public.
"""
return qs.none()
[docs] def solutions_may_be_published(self, qs):
"""This fuction takes for a parameter a queryset
with submissions for published rounds.
It should return a filtered queryset with exactly these submissions
that a user can decide themself to (un)publish.
You can assume that none of given submissions meets
:meth:'solutions_must_be_public' predicate.
At the start these submission are unpublished.
"""
return qs.none()
[docs] def filter_visible_sources(self, request, qs):
prev = super(
PublicSolutionsContestControllerMixin, self
).filter_visible_sources(request, qs)
public = filter_public_solutions(request, qs)
return (prev.distinct() | public.distinct()).distinct()
ProgrammingContestController.mix_in(PublicSolutionsContestControllerMixin)