Skip to content

Commit 0135da6

Browse files
committed
use solver_service in list_solver_releases
1 parent fac36e0 commit 0135da6

File tree

2 files changed

+37
-8
lines changed

2 files changed

+37
-8
lines changed

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

Lines changed: 27 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,7 @@ async def get_solvers_page(
105105
user_id: Annotated[int, Depends(get_current_user_id)],
106106
product_name: Annotated[str, Depends(get_product_name)],
107107
solver_service: Annotated[SolverService, Depends(SolverService)],
108+
url_for: Annotated[Callable, Depends(get_reverse_url_mapper)],
108109
):
109110
"""Lists all available solvers (latest version) with pagination"""
110111
solvers, page_meta = await solver_service.latest_solvers(
@@ -113,6 +114,12 @@ async def get_solvers_page(
113114
offset=page_params.offset,
114115
limit=page_params.limit,
115116
)
117+
118+
for solver in solvers:
119+
solver.url = url_for(
120+
"get_solver_release", solver_key=solver.id, version=solver.version
121+
)
122+
116123
page_params.limit = page_meta.limit
117124
page_params.offset = page_meta.offset
118125
return create_page(solvers, total=len(solvers), params=page_params)
@@ -218,26 +225,32 @@ async def get_solver(
218225
async def list_solver_releases(
219226
solver_key: SolverKeyId,
220227
user_id: Annotated[int, Depends(get_current_user_id)],
221-
catalog_client: Annotated[CatalogApi, Depends(get_api_client(CatalogApi))],
228+
solver_service: Annotated[SolverService, Depends(SolverService)],
222229
url_for: Annotated[Callable, Depends(get_reverse_url_mapper)],
223230
product_name: Annotated[str, Depends(get_product_name)],
224231
):
225232
"""Lists all releases of a given (one) solver
226233
227234
SEE get_solver_releases_page for a paginated version of this function
228235
"""
229-
releases: list[Solver] = await catalog_client.list_service_releases(
230-
user_id=user_id,
231-
solver_key=solver_key,
232-
product_name=product_name,
233-
)
236+
all_releases: list[Solver] = []
237+
for page_params in iter_pagination_params(limit=DEFAULT_PAGINATION_LIMIT):
238+
solvers, page_meta = await solver_service.solver_release_history(
239+
user_id=user_id,
240+
solver_key=solver_key,
241+
product_name=product_name,
242+
offset=page_params.offset,
243+
limit=page_params.limit,
244+
)
245+
page_params.total_number_of_items = page_meta.total
246+
all_releases.extend(solvers)
234247

235-
for solver in releases:
248+
for solver in all_releases:
236249
solver.url = url_for(
237250
"get_solver_release", solver_key=solver.id, version=solver.version
238251
)
239252

240-
return sorted(releases, key=attrgetter("pep404_version"))
253+
return sorted(all_releases, key=attrgetter("pep404_version"))
241254

242255

243256
@router.get(
@@ -249,6 +262,7 @@ async def get_solver_releases_page(
249262
page_params: Annotated[PaginationParams, Depends()],
250263
user_id: Annotated[int, Depends(get_current_user_id)],
251264
product_name: Annotated[str, Depends(get_product_name)],
265+
url_for: Annotated[Callable, Depends(get_reverse_url_mapper)],
252266
solver_service: Annotated[SolverService, Depends(SolverService)],
253267
):
254268
solvers, page_meta = await solver_service.solver_release_history(
@@ -258,6 +272,11 @@ async def get_solver_releases_page(
258272
offset=page_params.offset,
259273
limit=page_params.limit,
260274
)
275+
276+
for solver in solvers:
277+
solver.url = url_for(
278+
"get_solver_release", solver_key=solver.id, version=solver.version
279+
)
261280
page_params.limit = page_meta.limit
262281
page_params.offset = page_meta.offset
263282
return create_page(

services/api-server/tests/unit/api_solvers/test_api_routers_solvers.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,3 +130,13 @@ async def test_list_solver_releases_page_with_mocked_catalog(
130130
)
131131
assert response.status_code == status.HTTP_200_OK
132132
assert len(response.json()["items"]) == response.json()["total"]
133+
134+
135+
async def test_list_solver_releases_with_mocked_catalog(
136+
client: httpx.AsyncClient,
137+
mocked_rpc_catalog_service_api: dict,
138+
auth: httpx.BasicAuth,
139+
):
140+
solver_key = "simcore/services/comp/itis/sleeper"
141+
response = await client.get(f"/{API_VTAG}/solvers/{solver_key}/releases", auth=auth)
142+
assert response.status_code == status.HTTP_200_OK

0 commit comments

Comments
 (0)