|
36 | 36 | ServiceMetaDataDBPatch, |
37 | 37 | ServiceWithHistoryDBGet, |
38 | 38 | ) |
| 39 | +from ..models.services_ports import ServicePort |
39 | 40 | from ..repository.groups import GroupsRepository |
40 | 41 | from ..repository.services import ServicesRepository |
41 | 42 | from . import manifest |
@@ -524,7 +525,7 @@ async def list_user_service_release_history( |
524 | 525 |
|
525 | 526 | total_count, history = await repo.get_service_history_page( |
526 | 527 | # 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 |
528 | 529 | product_name=product_name, |
529 | 530 | user_id=user_id, |
530 | 531 | key=service_key, |
@@ -553,6 +554,58 @@ async def list_user_service_release_history( |
553 | 554 | return total_count, items |
554 | 555 |
|
555 | 556 |
|
| 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 | + |
556 | 609 | async def get_catalog_service_extras( |
557 | 610 | director_api: DirectorClient, service_key: ServiceKey, service_version: VersionStr |
558 | 611 | ) -> ServiceExtras: |
|
0 commit comments