Skip to content

Commit 2007b98

Browse files
committed
fix types
1 parent 0d47ba2 commit 2007b98

File tree

3 files changed

+17
-35
lines changed

3 files changed

+17
-35
lines changed

services/api-server/src/simcore_service_api_server/api/routes/programs.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,9 @@
2323
)
2424
from simcore_service_api_server.services_http.webserver import AuthSession
2525

26+
from ...models.basic_types import VersionStr
2627
from ...models.schemas.jobs import Job, JobInputs
27-
from ...models.schemas.programs import Program, ProgramKeyId, VersionStr
28+
from ...models.schemas.programs import Program, ProgramKeyId
2829
from ...services_http.catalog import CatalogApi
2930
from ..dependencies.authentication import get_current_user_id, get_product_name
3031
from ..dependencies.services import get_api_client

services/api-server/src/simcore_service_api_server/models/schemas/jobs.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
compose_resource_name,
3838
split_resource_name,
3939
)
40+
from ..basic_types import VersionStr
4041
from ..domain.files import File as DomainFile
4142
from ..domain.files import FileInProgramJobData
4243
from ..schemas.files import UserFile
@@ -48,7 +49,7 @@
4849
# - Input/outputs are defined in service metadata
4950
# - custom metadata
5051
#
51-
from .programs import Program, ProgramKeyId, VersionStr
52+
from .programs import Program, ProgramKeyId
5253
from .solvers import Solver
5354

5455
JobID: TypeAlias = UUID

services/api-server/src/simcore_service_api_server/services_http/catalog.py

Lines changed: 13 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
from dataclasses import dataclass
66
from functools import partial
77
from operator import attrgetter
8-
from typing import Final, Literal, overload
8+
from typing import Final, Literal, cast
99

1010
from fastapi import FastAPI, status
1111
from 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

Comments
 (0)