Source code for oioioi.contests.processors
from django.conf import settings
from django.utils.functional import lazy
from oioioi.base.utils import request_cached
from oioioi.contests.models import Contest, ContestView
from oioioi.contests.utils import visible_contests
[docs]def register_current_contest(request):
"""A template context processor which makes the current contest available
to the templates.
The current :class:`~oioioi.contests.models.Contest` instance is added
to the template context as a ``contest`` variable.
Must be used together with
:class:`~oioioi.contests.middleware.CurrentContestMiddleware`.
"""
if hasattr(request, 'contest'):
return {'contest': request.contest}
else:
return {}
@request_cached
[docs]def recent_contests(request):
if request.real_user.is_anonymous:
ids = request.session.get('recent_contests', [])
mapping = Contest.objects.in_bulk(ids)
return [
c
for c in (mapping.get(id) for id in ids)
if c is not None and c != request.contest
]
else:
c_views = ContestView.objects.filter(user=request.real_user).select_related(
'contest'
)
c_views = c_views[: getattr(settings, 'NUM_RECENT_CONTESTS', 5)]
return [cv.contest for cv in c_views if cv.contest in visible_contests(request)]
[docs]def register_recent_contests(request):
if not hasattr(request, 'contest') or not hasattr(request, 'session'):
return {}
def generator():
return recent_contests(request)
return {'recent_contests': lazy(generator, list)()}