@@ -157,12 +157,11 @@ def _fetch_next_page(
157157 return data .data if isinstance (data .data , list ) else []
158158
159159 def _fetch_all_pages (
160- self , endpoint : str , model : T , id_field : str , id_value : Any
160+ self , endpoint : str , model : T , id_field : str = None , id_value : Any = None
161161 ) -> List [dict ]:
162162 """Generic method to fetch all pages with parallelization"""
163- if getattr (model , id_field ) is None :
163+ if id_field and getattr (model , id_field ) is None :
164164 raise MissingParameterError
165-
166165 all_data = []
167166 headers_to_use = (
168167 self .headers_parallel if self .headers_parallel else [self .headers ]
@@ -1289,7 +1288,10 @@ def get_groups(self, **kwargs) -> Union[Response, requests.Response]:
12891288 group = GroupModel (** kwargs )
12901289 try :
12911290 all_groups = self ._fetch_all_pages (
1292- "/groups" , group , "group_id" , group .group_id
1291+ endpoint = "/groups" ,
1292+ model = group ,
1293+ id_field = "group_id" ,
1294+ id_value = group .group_id ,
12931295 )
12941296 response = Response (data = all_groups , status_code = 200 )
12951297 return process_response (response = response )
@@ -1372,7 +1374,10 @@ def get_group_subgroups(self, **kwargs) -> Union[Response, requests.Response]:
13721374 group = GroupModel (** kwargs )
13731375 try :
13741376 all_subgroups = self ._fetch_all_pages (
1375- "/groups/{id}/subgroups" , group , "group_id" , group .group_id
1377+ endpoint = "/groups/{id}/subgroups" ,
1378+ model = group ,
1379+ id_field = "group_id" ,
1380+ id_value = group .group_id ,
13761381 )
13771382 return Response (data = all_subgroups , status_code = 200 )
13781383 except ValidationError as e :
@@ -1398,7 +1403,10 @@ def get_group_descendant_groups(
13981403 group = GroupModel (** kwargs )
13991404 try :
14001405 all_descendant_groups = self ._fetch_all_pages (
1401- "/groups/{id}/descendant_groups" , group , "group_id" , group .group_id
1406+ endpoint = "/groups/{id}/descendant_groups" ,
1407+ model = group ,
1408+ id_field = "group_id" ,
1409+ id_value = group .group_id ,
14021410 )
14031411 return Response (data = all_descendant_groups , status_code = 200 )
14041412 except ValidationError as e :
@@ -1422,7 +1430,10 @@ def get_group_projects(self, **kwargs) -> Union[Response, requests.Response]:
14221430 group = GroupModel (** kwargs )
14231431 try :
14241432 all_projects = self ._fetch_all_pages (
1425- "/groups/{id}/projects" , group , "group_id" , group .group_id
1433+ endpoint = "/groups/{id}/projects" ,
1434+ model = group ,
1435+ id_field = "group_id" ,
1436+ id_value = group .group_id ,
14261437 )
14271438 return Response (data = all_projects , status_code = 200 )
14281439 except ValidationError as e :
@@ -1434,7 +1445,10 @@ def get_group_merge_requests(self, **kwargs) -> Union[Response, requests.Respons
14341445 group = GroupModel (** kwargs )
14351446 try :
14361447 all_merge_requests = self ._fetch_all_pages (
1437- "/groups/{id}/merge_requests" , group , "group_id" , group .group_id
1448+ endpoint = "/groups/{id}/merge_requests" ,
1449+ model = group ,
1450+ id_field = "group_id" ,
1451+ id_value = group .group_id ,
14381452 )
14391453 return Response (data = all_merge_requests , status_code = 200 )
14401454 except ValidationError as e :
@@ -1838,7 +1852,7 @@ def get_merge_requests(self, **kwargs) -> Union[Response, requests.Response]:
18381852 merge_request = MergeRequestModel (** kwargs )
18391853 try :
18401854 all_merge_requests = self ._fetch_all_pages (
1841- "/merge_requests" , merge_request , "group_id" , merge_request . group_id
1855+ endpoint = "/merge_requests" , model = merge_request
18421856 )
18431857 response = Response (data = all_merge_requests , status_code = 200 )
18441858 return process_response (response = response )
@@ -2586,14 +2600,16 @@ def get_pipeline_schedules(self, **kwargs) -> Union[Response, requests.Response]
25862600 project = ProjectModel (** kwargs )
25872601 if project .project_id is None :
25882602 raise MissingParameterError
2589- response = self ._session .get (
2590- url = f"{ self .url } /projects/{ project .project_id } /pipeline_schedules" ,
2591- headers = self .headers ,
2592- verify = self .verify ,
2593- proxies = self .proxies ,
2594- )
2595- response = process_response (response = response )
2596- return response
2603+ try :
2604+ all_projects = self ._fetch_all_pages (
2605+ endpoint = "/projects/{id}/pipeline_schedules" ,
2606+ model = project ,
2607+ id_field = "project_id" ,
2608+ id_value = project .project_id ,
2609+ )
2610+ return Response (data = all_projects , status_code = 200 )
2611+ except ValidationError as e :
2612+ raise ParameterError (f"Invalid parameters: { e .errors ()} " )
25972613
25982614 @require_auth
25992615 def get_pipeline_schedule (self , ** kwargs ) -> Union [Response , requests .Response ]:
@@ -2750,56 +2766,11 @@ def get_projects(self, **kwargs) -> Union[Response, requests.Response]:
27502766 - ParameterError: If invalid parameters are provided.
27512767 """
27522768 project = ProjectModel (** kwargs )
2753- all_projects = []
2754- if project .project_id is None :
2755- raise MissingParameterError
27562769 try :
2757- if project .project_id is None :
2758- raise MissingParameterError
2759- total_pages_response = self ._session .get (
2760- url = f"{ self .url } " f"/projects/{ project .project_id } /projects" ,
2761- params = project .api_parameters ,
2762- headers = self .headers ,
2763- verify = self .verify ,
2764- proxies = self .proxies ,
2765- )
2766- total_pages = int (total_pages_response .headers .get ("X-Total-Pages" ))
2767- projects = Response (data = total_pages_response .json (), status_code = 200 )
2768- if (
2769- isinstance (projects .data , list )
2770- and projects .data
2771- and len (projects .data ) > 0
2772- ):
2773- all_projects = all_projects + projects .data
2774- if (
2775- not project .max_pages
2776- or project .max_pages == 0
2777- or project .max_pages > total_pages
2778- ):
2779- project .max_pages = total_pages
2780- for page in range (
2781- 1 , project .max_pages
2782- ): # Start index at 1 because we get the first one from getting total_pages
2783- project .page = page
2784- project .model_post_init (project )
2785- projects_response = self ._session .get (
2786- url = f"{ self .url } /projects/{ project .project_id } /projects" ,
2787- params = project .api_parameters ,
2788- headers = self .headers ,
2789- verify = self .verify ,
2790- proxies = self .proxies ,
2791- )
2792- projects = Response (data = projects_response .json (), status_code = 200 )
2793- if (
2794- isinstance (projects .data , list )
2795- and projects .data
2796- and len (projects .data ) > 0
2797- ):
2798- all_projects = all_projects + projects .data
2799- response = Response (data = all_projects , status_code = 200 )
2770+ all_projects = self ._fetch_all_pages (endpoint = "/projects" , model = project )
2771+ return Response (data = all_projects , status_code = 200 )
28002772 except ValidationError as e :
28012773 raise ParameterError (f"Invalid parameters: { e .errors ()} " )
2802- return response
28032774
28042775 @require_auth
28052776 def get_project (self , ** kwargs ) -> Union [Response , requests .Response ]:
@@ -2866,7 +2837,7 @@ def get_nested_projects_by_group(
28662837 for group in all_groups :
28672838 endpoint = f"/groups/{ group .id } /projects"
28682839 group_projects = self ._fetch_all_pages (
2869- endpoint , project , "group_id" , group .id
2840+ endpoint = endpoint , model = project , id_field = "group_id" , id_value = group .id
28702841 )
28712842 all_projects .extend (group_projects )
28722843
0 commit comments