コード例 #1
0
    def test_problems_list(self):
        for name, user in self.users.items():
            with self.subTest(user=name):
                with self.subTest(list='accessible problems'):
                    # We only care about consistency between Problem.is_accessible_by and Problem.get_visible_problems
                    problem_codes = []
                    for problem in Problem.objects.prefetch_related('authors', 'curators', 'testers', 'organizations'):
                        if problem.is_accessible_by(user):
                            problem_codes.append(problem.code)

                    self.assertCountEqual(
                        Problem.get_visible_problems(user).distinct().values_list('code', flat=True),
                        problem_codes,
                    )

                with self.subTest(list='editable problems'):
                    # We only care about consistency between Problem.is_editable_by and Problem.get_editable_problems
                    problem_codes = []
                    for problem in Problem.objects.prefetch_related('authors', 'curators'):
                        if problem.is_editable_by(user):
                            problem_codes.append(problem.code)

                    self.assertCountEqual(
                        Problem.get_editable_problems(user).distinct().values_list('code', flat=True),
                        problem_codes,
                    )
コード例 #2
0
ファイル: tickets.py プロジェクト: VNOI-Admin/OJ
def filter_visible_tickets(queryset, user):
    return queryset.filter(
        own_ticket_filter(user.profile.id)
        | Q(content_type=ContentType.objects.get_for_model(GeneralIssue))
        | Q(content_type=ContentType.objects.get_for_model(Problem),
            object_id__in=Problem.get_editable_problems(user))).distinct()
コード例 #3
0
 def get_queryset(self, request):
     return Problem.get_editable_problems(
         request.user).prefetch_related('authors__user').distinct()
コード例 #4
0
ファイル: problems.py プロジェクト: xiaowuc1/site
def user_editable_ids(profile):
    return set(
        Problem.get_editable_problems(profile.user).values_list('id',
                                                                flat=True))