55from dataclasses import dataclass
66from functools import partial
77from operator import attrgetter
8- from typing import Final , Literal , overload
8+ from typing import Final , Literal , cast
99
1010from fastapi import FastAPI , status
1111from models_library .emails import LowerCaseEmailStr
@@ -109,26 +109,6 @@ class CatalogApi(BaseServiceClientApi):
109109 SEE osparc-simcore/services/catalog/openapi.json
110110 """
111111
112- @overload
113- async def _list_services (
114- self ,
115- * ,
116- user_id : int ,
117- product_name : str ,
118- predicate : Callable [[Solver ], bool ] | None = None ,
119- type_filter : ServiceTypes ,
120- ) -> list [Solver ]: ...
121-
122- @overload
123- async def _list_services (
124- self ,
125- * ,
126- user_id : int ,
127- product_name : str ,
128- predicate : Callable [[Program ], bool ] | None = None ,
129- type_filter : ServiceTypes ,
130- ) -> list [Program ]: ...
131-
132112 @_exception_mapper (
133113 http_status_map = {status .HTTP_404_NOT_FOUND : ListSolversOrStudiesError }
134114 )
@@ -137,9 +117,9 @@ async def _list_services(
137117 * ,
138118 user_id : int ,
139119 product_name : str ,
140- predicate : Callable [[Solver | Program ], bool ] | None = None ,
120+ predicate : Callable [[Solver ], bool ] | Callable [[ Program ], bool ] | None = None ,
141121 type_filter : ServiceTypes ,
142- ) -> list [Solver | Program ]:
122+ ) -> list [Solver ] | list [ Program ]:
143123
144124 response = await self .client .get (
145125 "/services" ,
@@ -156,14 +136,14 @@ async def _list_services(
156136 TruncatedCatalogServiceOutListAdapter ,
157137 response ,
158138 )
159- solvers_or_programs = []
160139 if type_filter == "COMPUTATIONAL" :
140+ solvers : list [Solver ] = []
161141 for service in services :
162142 try :
163143 if service .service_type == ServiceType .COMPUTATIONAL :
164144 solver = service .to_solver ()
165- if predicate is None or predicate (solver ):
166- solvers_or_programs .append (solver )
145+ if predicate is None or predicate (solver ): # type: ignore
146+ solvers .append (solver )
167147 except ValidationError as err :
168148 # NOTE: For the moment, this is necessary because there are no guarantees
169149 # at the image registry. Therefore we exclude and warn
@@ -173,13 +153,15 @@ async def _list_services(
173153 service .model_dump_json (),
174154 err ,
175155 )
156+ return solvers
176157 elif type_filter == "DYNAMIC" :
158+ programs : list [Program ] = []
177159 for service in services :
178160 try :
179161 if service .service_type == ServiceType .DYNAMIC :
180162 program = service .to_program ()
181- if predicate is None or predicate (program ):
182- solvers_or_programs .append (program )
163+ if predicate is None or predicate (program ): # type: ignore
164+ programs .append (program )
183165 except ValidationError as err :
184166 # NOTE: For the moment, this is necessary because there are no guarantees
185167 # at the image registry. Therefore we exclude and warn
@@ -189,11 +171,10 @@ async def _list_services(
189171 service .model_dump_json (),
190172 err ,
191173 )
174+ return programs
192175 else :
193176 raise ValueError (f"Invalid { type_filter = } " )
194177
195- return solvers_or_programs
196-
197178 async def list_solvers (
198179 self ,
199180 * ,
@@ -209,7 +190,7 @@ async def list_solvers(
209190 type_filter = "COMPUTATIONAL" ,
210191 )
211192 assert all (isinstance (s , Solver ) for s in solvers ) # nosec
212- return solvers
193+ return cast ( list [ Solver ], solvers )
213194
214195 async def list_programs (
215196 self ,
@@ -218,15 +199,14 @@ async def list_programs(
218199 product_name : str ,
219200 predicate : Callable [[Program ], bool ] | None = None ,
220201 ) -> list [Program ]:
221-
222202 programs = await self ._list_services (
223203 user_id = user_id ,
224204 product_name = product_name ,
225205 predicate = predicate ,
226206 type_filter = "DYNAMIC" ,
227207 )
228208 assert all (isinstance (s , Program ) for s in programs ) # nosec
229- return programs
209+ return cast ( list [ Program ], programs )
230210
231211 async def get_solver (
232212 self , * , user_id : int , name : SolverKeyId , version : VersionStr , product_name : str
0 commit comments