def test_simple_invalidate(self): contest = Contest.objects.get() contest.controller_name = \ 'oioioi.rankings.tests.MockRankingContestController' contest.save() ranking, _ = Ranking.objects.get_or_create(contest=contest, key='key', needs_recalculation=False) ranking.save() self.assertTrue(ranking.is_up_to_date()) recalc = choose_for_recalculation() self.assertIsNone(recalc) Ranking.invalidate_contest(contest) ranking.refresh_from_db() self.assertFalse(ranking.is_up_to_date()) recalc = choose_for_recalculation() self.assertIsNotNone(recalc)
def update_user_results(self, user, problem_instance, *args, **kwargs): super(RankingMixinForContestController, self) \ .update_user_results(user, problem_instance, *args, **kwargs) Ranking.invalidate_contest(problem_instance.round.contest)
def update_rankings_with_user_callback(sender, **kwargs): user = sender.instance contests = Contest.objects.filter(probleminstance__submission__user=user) for contest in contests: Ranking.invalidate_contest(contest)
def ranking_invalidate_view(request, key): rcontroller = request.contest.controller.ranking_controller() full_key = rcontroller.get_full_key(request, key) ranking = Ranking.objects.filter(key=full_key) Ranking.invalidate_queryset(ranking) return redirect('ranking', key=key)