Skip to content
This repository was archived by the owner on Jun 13, 2025. It is now read-only.

Commit 1ef6d08

Browse files
Undo
1 parent 30dfe70 commit 1ef6d08

File tree

1 file changed

+54
-35
lines changed

1 file changed

+54
-35
lines changed

graphql_api/actions/repository.py

Lines changed: 54 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -5,45 +5,53 @@
55
from django.db.models import QuerySet
66
from shared.django_apps.codecov_auth.models import GithubAppInstallation, Owner
77
from shared.django_apps.core.models import Repository
8-
98
from utils.config import get_config
109

10+
1111
log = logging.getLogger(__name__)
1212
AI_FEATURES_GH_APP_ID = get_config("github", "ai_features_app_id")
1313

1414

15-
def basic_filters(queryset: QuerySet, filters: dict[str, Any]) -> QuerySet:
15+
def apply_filters_to_queryset(
16+
queryset: QuerySet, filters: dict[str, Any] | None, owner: Owner
17+
) -> QuerySet:
1618
filters = filters or {}
17-
if repo_names := filters.get("repo_names"):
19+
term = filters.get("term")
20+
active = filters.get("active")
21+
activated = filters.get("activated")
22+
repo_names = filters.get("repo_names")
23+
is_public = filters.get("is_public")
24+
ai_enabled = filters.get("ai_enabled")
25+
26+
if repo_names:
1827
queryset = queryset.filter(name__in=repo_names)
19-
if term := filters.get("term"):
28+
if term:
2029
queryset = queryset.filter(name__contains=term)
21-
for field in ("activated", "active"):
22-
if filters.get(field) is not None:
23-
queryset = queryset.filter(**{field: filters[field]})
24-
if filters.get("is_public") is not None:
25-
queryset = queryset.filter(private=not filters["is_public"])
30+
if activated is not None:
31+
queryset = queryset.filter(activated=activated)
32+
if active is not None:
33+
queryset = queryset.filter(active=active)
34+
if is_public is not None:
35+
queryset = queryset.filter(private=not is_public)
36+
if ai_enabled is not None:
37+
queryset = filter_queryset_by_ai_enabled_repos(queryset, owner)
2638
return queryset
2739

2840

2941
def filter_queryset_by_ai_enabled_repos(queryset: QuerySet, owner: Owner) -> QuerySet:
30-
install = GithubAppInstallation.objects.filter(
42+
ai_features_app_install = GithubAppInstallation.objects.filter(
3143
app_id=AI_FEATURES_GH_APP_ID, owner=owner
3244
).first()
33-
if not install:
45+
46+
if not ai_features_app_install:
3447
return Repository.objects.none()
35-
if install.repository_service_ids:
36-
queryset = queryset.filter(service_id__in=install.repository_service_ids)
37-
return queryset
3848

49+
if ai_features_app_install.repository_service_ids:
50+
queryset = queryset.filter(
51+
service_id__in=ai_features_app_install.repository_service_ids
52+
)
3953

40-
def apply_filters(
41-
queryset: QuerySet, filters: dict[str, Any] | None, owner: Owner
42-
) -> QuerySet:
43-
filters = filters or {}
44-
if filters.get("ai_enabled"):
45-
return filter_queryset_by_ai_enabled_repos(queryset, owner)
46-
return basic_filters(queryset, filters)
54+
return queryset
4755

4856

4957
@sentry_sdk.trace
@@ -54,14 +62,23 @@ def list_repository_for_owner(
5462
okta_account_auths: list[int],
5563
exclude_okta_enforced_repos: bool = True,
5664
) -> QuerySet:
65+
queryset = Repository.objects.viewable_repos(current_owner)
5766
filters = filters or {}
58-
qs = Repository.objects.viewable_repos(current_owner)
59-
if filters.get("ai_enabled"):
60-
return filter_queryset_by_ai_enabled_repos(qs, owner)
67+
ai_enabled_filter = filters.get("ai_enabled")
68+
69+
if ai_enabled_filter:
70+
return filter_queryset_by_ai_enabled_repos(queryset, owner)
71+
6172
if exclude_okta_enforced_repos:
62-
qs = qs.exclude_accounts_enforced_okta(okta_account_auths)
63-
qs = qs.with_recent_coverage().with_latest_commit_at().filter(author=owner)
64-
return basic_filters(qs, filters)
73+
queryset = queryset.exclude_accounts_enforced_okta(okta_account_auths)
74+
75+
if not ai_enabled_filter:
76+
queryset = (
77+
queryset.with_recent_coverage().with_latest_commit_at().filter(author=owner)
78+
)
79+
80+
queryset = apply_filters_to_queryset(queryset, filters, owner)
81+
return queryset
6582

6683

6784
@sentry_sdk.trace
@@ -71,14 +88,16 @@ def search_repos(
7188
okta_account_auths: list[int],
7289
exclude_okta_enforced_repos: bool = True,
7390
) -> QuerySet:
74-
filters = filters or {}
75-
authors = [current_owner.ownerid] + (current_owner.organizations or [])
76-
qs = Repository.objects.viewable_repos(current_owner)
91+
authors_from = [current_owner.ownerid] + (current_owner.organizations or [])
92+
queryset = Repository.objects.viewable_repos(current_owner)
93+
7794
if exclude_okta_enforced_repos:
78-
qs = qs.exclude_accounts_enforced_okta(okta_account_auths)
79-
qs = (
80-
qs.with_recent_coverage()
95+
queryset = queryset.exclude_accounts_enforced_okta(okta_account_auths)
96+
97+
queryset = (
98+
queryset.with_recent_coverage()
8199
.with_latest_commit_at()
82-
.filter(author__ownerid__in=authors)
100+
.filter(author__ownerid__in=authors_from)
83101
)
84-
return apply_filters(qs, filters, current_owner)
102+
queryset = apply_filters_to_queryset(queryset, filters)
103+
return queryset

0 commit comments

Comments
 (0)