Skip to content

Commit 8c0fac7

Browse files
committed
adjst batch_get in database
1 parent 6d0ca57 commit 8c0fac7

File tree

3 files changed

+18
-9
lines changed

3 files changed

+18
-9
lines changed

services/catalog/src/simcore_service_catalog/api/rest/_services.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,7 @@ async def cached_registry_services() -> dict[str, Any]:
154154
services_owner_emails,
155155
) = await asyncio.gather(
156156
cached_registry_services(),
157-
services_repo.batch_get_services_access_rights(
157+
services_repo.batch_get_services_access_rights_or_none(
158158
key_versions=services_in_db,
159159
product_name=x_simcore_products_name,
160160
),
@@ -163,6 +163,8 @@ async def cached_registry_services() -> dict[str, Any]:
163163
),
164164
)
165165

166+
services_access_rights = services_access_rights or {}
167+
166168
# NOTE: for the details of the services:
167169
# 1. we get all the services from the director-v0 (TODO: move the registry to the catalog)
168170
# 2. we filter the services using the visible ones from the db
@@ -176,7 +178,7 @@ async def cached_registry_services() -> dict[str, Any]:
176178
_compose_service_details,
177179
s,
178180
services_in_db[s["key"], s["version"]],
179-
services_access_rights[s["key"], s["version"]],
181+
services_access_rights.get((s["key"], s["version"])) or [],
180182
services_owner_emails.get(
181183
services_in_db[s["key"], s["version"]].owner or 0
182184
),

services/catalog/src/simcore_service_catalog/repository/services.py

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -657,12 +657,14 @@ async def get_service_access_rights(
657657
async for row in await conn.stream(query)
658658
]
659659

660-
async def batch_get_services_access_rights(
660+
async def batch_get_services_access_rights_or_none(
661661
self,
662662
key_versions: Iterable[tuple[str, str]],
663663
product_name: str | None = None,
664-
) -> dict[tuple[str, str], list[ServiceAccessRightsDB]]:
665-
"""Batch version of get_service_access_rights"""
664+
) -> dict[tuple[str, str], list[ServiceAccessRightsDB]] | None:
665+
"""
666+
Returns only found. If None found, then None
667+
"""
666668
service_to_access_rights = defaultdict(list)
667669
query = (
668670
sa.select(services_access_rights)
@@ -681,7 +683,7 @@ async def batch_get_services_access_rights(
681683
service_to_access_rights[(row.key, row.version)].append(
682684
ServiceAccessRightsDB.model_validate(row)
683685
)
684-
return service_to_access_rights
686+
return service_to_access_rights or None
685687

686688
async def upsert_service_access_rights(
687689
self, new_access_rights: list[ServiceAccessRightsDB]

services/catalog/src/simcore_service_catalog/service/catalog_services.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,7 @@ async def _get_services_with_access_rights(
174174
return {}
175175

176176
# Inject access-rights
177-
access_rights = await repo.batch_get_services_access_rights(
177+
access_rights = await repo.batch_get_services_access_rights_or_none(
178178
((sc.key, sc.version) for sc in services), product_name=product_name
179179
)
180180
if not access_rights:
@@ -610,10 +610,15 @@ async def batch_get_user_services(
610610
"""
611611
unique_service_identifiers = _BatchIdsValidator.validate_python(ids)
612612

613-
# FIXME: implement partial fail
614-
services_access_rights = await repo.batch_get_services_access_rights(
613+
services_access_rights = await repo.batch_get_services_access_rights_or_none(
615614
key_versions=unique_service_identifiers, product_name=product_name
616615
)
616+
if not services_access_rights:
617+
raise CatalogServiceNotFoundError(
618+
missing_services=unique_service_identifiers,
619+
user_id=user_id,
620+
product_name=product_name,
621+
)
617622

618623
user_groups = await groups_repo.list_user_groups(user_id=user_id)
619624
my_group_ids = {g.gid for g in user_groups}

0 commit comments

Comments
 (0)