|
10 | 10 | ServiceOutputGet, |
11 | 11 | ServiceOutputKey, |
12 | 12 | ) |
| 13 | +from models_library.batch_operations import create_batch_ids_validator |
13 | 14 | from models_library.products import ProductName |
14 | 15 | from models_library.rest_pagination import ( |
15 | 16 | PageLimitInt, |
|
25 | 26 | from models_library.users import UserID |
26 | 27 | from models_library.utils.fastapi_encoders import jsonable_encoder |
27 | 28 | from pint import UnitRegistry |
| 29 | +from pydantic import ValidationError |
28 | 30 | from servicelib.rabbitmq._errors import RPCServerError |
29 | 31 | from servicelib.rabbitmq.rpc_interfaces.catalog import services as catalog_rpc |
30 | 32 | from servicelib.rabbitmq.rpc_interfaces.catalog.errors import ( |
@@ -94,20 +96,30 @@ async def list_latest_services( |
94 | 96 | return page_data, page.meta |
95 | 97 |
|
96 | 98 |
|
| 99 | +_BatchServicesIdsValidator = create_batch_ids_validator( |
| 100 | + tuple[ServiceKey, ServiceVersion] |
| 101 | +) |
| 102 | + |
| 103 | + |
97 | 104 | async def batch_get_my_services( |
98 | 105 | app: web.Application, |
99 | 106 | *, |
100 | 107 | user_id: UserID, |
101 | 108 | product_name: ProductName, |
102 | 109 | services_ids: list[tuple[ServiceKey, ServiceVersion]], |
103 | 110 | ) -> MyServicesBatchGetResult: |
104 | | - assert len(services_ids) > 0 # nosec |
| 111 | + try: |
| 112 | + ids = _BatchServicesIdsValidator.validate_python(services_ids) |
| 113 | + except ValidationError as err: |
| 114 | + msg = f"Invalid 'service_ids' parameter:\n{err}" |
| 115 | + raise ValueError(msg) from err |
| 116 | + |
105 | 117 | try: |
106 | 118 | return await catalog_rpc.batch_get_my_services( |
107 | 119 | get_rabbitmq_rpc_client(app), |
108 | 120 | user_id=user_id, |
109 | 121 | product_name=product_name, |
110 | | - ids=services_ids, |
| 122 | + ids=ids, |
111 | 123 | ) |
112 | 124 |
|
113 | 125 | except RPCServerError as err: |
|
0 commit comments