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)