diff --git a/oioioi/contests/processors.py b/oioioi/contests/processors.py index c30d7a9e3..ecc0ab1b2 100644 --- a/oioioi/contests/processors.py +++ b/oioioi/contests/processors.py @@ -3,7 +3,6 @@ from oioioi.base.utils import request_cached from oioioi.contests.models import Contest, ContestView -from oioioi.contests.utils import visible_contests def register_current_contest(request): @@ -31,7 +30,10 @@ def recent_contests(request): 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)] + # Skip expensive visible_contests() check - if user visited a contest, + # show it in recent list. Visibility shouldn't change often, and checking + # visibility for every request is not worth it. + return [cv.contest for cv in c_views if cv.contest != request.contest] def register_recent_contests(request): diff --git a/oioioi/szkopul/views.py b/oioioi/szkopul/views.py index a98b9be79..40e722b52 100644 --- a/oioioi/szkopul/views.py +++ b/oioioi/szkopul/views.py @@ -5,9 +5,8 @@ from oioioi.base.main_page import register_main_page_view from oioioi.base.navbar_links import navbar_links_registry from oioioi.contests.controllers import submission_template_context -from oioioi.contests.models import Contest, Submission +from oioioi.contests.models import Submission from oioioi.contests.processors import recent_contests -from oioioi.contests.utils import visible_contests_queryset_old from oioioi.problems.utils import filter_my_all_visible_submissions # navbar_links_registry.register( @@ -35,11 +34,10 @@ @register_main_page_view(order=100) def main_page_view(request): to_show = getattr(settings, "NUM_RECENT_CONTESTS", 7) - rcontests = recent_contests(request) - # this is unsalvageable - contests = list(set(Contest.objects.filter(visible_contests_queryset_old(request)).distinct()[:to_show]).difference(rcontests)) - contests.sort(key=lambda x: x.creation_date, reverse=True) - contests = (rcontests + contests)[:to_show] + # Skip expensive visible_contests() check - if user visited a contest, + # show it in recent list. Visibility shouldn't change often, and checking + # visibility for every request is not worth it. + contests = recent_contests(request)[:to_show] submissions = [] show_scores = False