Skip to content

Commit 754350b

Browse files
committed
feat: add get_user_services_ports function to retrieve service ports for a specific service version
1 parent 9805e23 commit 754350b

File tree

1 file changed

+54
-1
lines changed

1 file changed

+54
-1
lines changed

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

Lines changed: 54 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
ServiceMetaDataDBPatch,
3737
ServiceWithHistoryDBGet,
3838
)
39+
from ..models.services_ports import ServicePort
3940
from ..repository.groups import GroupsRepository
4041
from ..repository.services import ServicesRepository
4142
from . import manifest
@@ -524,7 +525,7 @@ async def list_user_service_release_history(
524525

525526
total_count, history = await repo.get_service_history_page(
526527
# NOTE: that the service history might be different for each user
527-
# since access-rights are defined on a k:v basis
528+
# since access rights are defined on a k:v basis
528529
product_name=product_name,
529530
user_id=user_id,
530531
key=service_key,
@@ -553,6 +554,58 @@ async def list_user_service_release_history(
553554
return total_count, items
554555

555556

557+
async def get_user_services_ports(
558+
repo: ServicesRepository,
559+
director_api: DirectorClient,
560+
*,
561+
product_name: ProductName,
562+
user_id: UserID,
563+
service_key: ServiceKey,
564+
service_version: ServiceVersion,
565+
) -> list[ServicePort]:
566+
"""Get service ports (inputs and outputs) for a specific service version.
567+
568+
Raises:
569+
CatalogItemNotFoundError: When service is not found
570+
CatalogForbiddenError: When user doesn't have access rights
571+
"""
572+
# Check access rights first
573+
access_rights = await repo.get_service_access_rights(
574+
key=service_key,
575+
version=service_version,
576+
product_name=product_name,
577+
)
578+
if not access_rights:
579+
raise CatalogItemNotFoundError(
580+
name=f"{service_key}:{service_version}",
581+
service_key=service_key,
582+
service_version=service_version,
583+
user_id=user_id,
584+
product_name=product_name,
585+
)
586+
587+
if not await repo.can_get_service(
588+
product_name=product_name,
589+
user_id=user_id,
590+
key=service_key,
591+
version=service_version,
592+
):
593+
raise CatalogForbiddenError(
594+
name=f"{service_key}:{service_version}",
595+
service_key=service_key,
596+
service_version=service_version,
597+
user_id=user_id,
598+
product_name=product_name,
599+
)
600+
601+
# Get service ports from manifest
602+
return await manifest.get_service_ports(
603+
director_client=director_api,
604+
key=service_key,
605+
version=service_version,
606+
)
607+
608+
556609
async def get_catalog_service_extras(
557610
director_api: DirectorClient, service_key: ServiceKey, service_version: VersionStr
558611
) -> ServiceExtras:

0 commit comments

Comments
 (0)