66from shared .django_apps .codecov_auth .models import GithubAppInstallation , Owner
77from shared .django_apps .core .models import Repository
88
9- from graphql_api . types . owner . owner import AI_FEATURES_GH_APP_ID
9+ from utils . config import get_config
1010
1111log = logging .getLogger (__name__ )
12+ AI_FEATURES_GH_APP_ID = get_config ("github" , "ai_features_app_id" )
1213
1314
14- def apply_filters_to_queryset (
15- queryset : QuerySet , filters : dict [str , Any ] | None , owner : Owner
16- ) -> QuerySet :
15+ def basic_filters (queryset : QuerySet , filters : dict [str , Any ]) -> QuerySet :
1716 filters = filters or {}
18- term = filters .get ("term" )
19- active = filters .get ("active" )
20- activated = filters .get ("activated" )
21- repo_names = filters .get ("repo_names" )
22- is_public = filters .get ("is_public" )
23- ai_enabled = filters .get ("ai_enabled" )
24-
25- if repo_names :
17+ if repo_names := filters .get ("repo_names" ):
2618 queryset = queryset .filter (name__in = repo_names )
27- if term :
19+ if term := filters . get ( "term" ) :
2820 queryset = queryset .filter (name__contains = term )
29- if activated is not None :
30- queryset = queryset .filter (activated = activated )
31- if active is not None :
32- queryset = queryset .filter (active = active )
33- if is_public is not None :
34- queryset = queryset .filter (private = not is_public )
35- if is_public is not None :
36- queryset = queryset .filter (private = not is_public )
37- if ai_enabled is not None :
38- queryset = filter_queryset_by_ai_enabled_repos (queryset , owner )
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" ])
3926 return queryset
4027
4128
4229def filter_queryset_by_ai_enabled_repos (queryset : QuerySet , owner : Owner ) -> QuerySet :
43- ai_features_app_install = GithubAppInstallation .objects .filter (
30+ install = GithubAppInstallation .objects .filter (
4431 app_id = AI_FEATURES_GH_APP_ID , owner = owner
4532 ).first ()
46-
47- if not ai_features_app_install :
33+ if not install :
4834 return Repository .objects .none ()
35+ if install .repository_service_ids :
36+ queryset = queryset .filter (service_id__in = install .repository_service_ids )
37+ return queryset
4938
50- if ai_features_app_install .repository_service_ids :
51- queryset = queryset .filter (
52- service_id__in = ai_features_app_install .repository_service_ids
53- )
5439
55- return queryset
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 )
5647
5748
5849@sentry_sdk .trace
@@ -63,23 +54,14 @@ def list_repository_for_owner(
6354 okta_account_auths : list [int ],
6455 exclude_okta_enforced_repos : bool = True ,
6556) -> QuerySet :
66- queryset = Repository .objects .viewable_repos (current_owner )
67-
68- ai_enabled_filter = filters .get ("ai_enabled" )
69-
70- if ai_enabled_filter :
71- return filter_queryset_by_ai_enabled_repos (queryset , owner )
72-
57+ 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 )
7361 if exclude_okta_enforced_repos :
74- queryset = queryset .exclude_accounts_enforced_okta (okta_account_auths )
75-
76- if not ai_enabled_filter :
77- queryset = (
78- queryset .with_recent_coverage ().with_latest_commit_at ().filter (author = owner )
79- )
80-
81- queryset = apply_filters_to_queryset (queryset , filters , owner )
82- return queryset
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 )
8365
8466
8567@sentry_sdk .trace
@@ -89,16 +71,14 @@ def search_repos(
8971 okta_account_auths : list [int ],
9072 exclude_okta_enforced_repos : bool = True ,
9173) -> QuerySet :
92- authors_from = [ current_owner . ownerid ] + ( current_owner . organizations or [])
93- queryset = Repository . objects . viewable_repos (current_owner )
94-
74+ filters = filters or {}
75+ authors = [ current_owner . ownerid ] + (current_owner . organizations or [] )
76+ qs = Repository . objects . viewable_repos ( current_owner )
9577 if exclude_okta_enforced_repos :
96- queryset = queryset .exclude_accounts_enforced_okta (okta_account_auths )
97-
98- queryset = (
99- queryset .with_recent_coverage ()
78+ qs = qs .exclude_accounts_enforced_okta (okta_account_auths )
79+ qs = (
80+ qs .with_recent_coverage ()
10081 .with_latest_commit_at ()
101- .filter (author__ownerid__in = authors_from )
82+ .filter (author__ownerid__in = authors )
10283 )
103- queryset = apply_filters_to_queryset (queryset , filters )
104- return queryset
84+ return apply_filters (qs , filters , current_owner )
0 commit comments