55from django .db .models import QuerySet
66from shared .django_apps .codecov_auth .models import GithubAppInstallation , Owner
77from shared .django_apps .core .models import Repository
8-
98from utils .config import get_config
109
10+
1111log = logging .getLogger (__name__ )
1212AI_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
2941def 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