Skip to content

Commit 0ab2a55

Browse files
committed
Address comments in the PR
1 parent 2895da8 commit 0ab2a55

File tree

13 files changed

+182
-168
lines changed

13 files changed

+182
-168
lines changed

packages/models-library/src/models_library/api_schemas_api_server/functions.py

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,20 +5,16 @@
55
FunctionClass,
66
FunctionClassSpecificData,
77
FunctionID,
8-
FunctionIDNotFoundError,
98
FunctionInputs,
109
FunctionInputSchema,
1110
FunctionInputsList,
12-
FunctionInputsValidationError,
1311
FunctionJob,
1412
FunctionJobClassSpecificData,
1513
FunctionJobCollection,
1614
FunctionJobCollectionID,
17-
FunctionJobCollectionIDNotFoundError,
1815
FunctionJobCollectionsListFilters,
1916
FunctionJobCollectionStatus,
2017
FunctionJobID,
21-
FunctionJobIDNotFoundError,
2218
FunctionJobStatus,
2319
FunctionOutputs,
2420
FunctionOutputSchema,
@@ -34,6 +30,12 @@
3430
RegisteredProjectFunctionJob,
3531
SolverFunction,
3632
SolverFunctionJob,
33+
)
34+
from ..functions_errors import (
35+
FunctionIDNotFoundError,
36+
FunctionInputsValidationError,
37+
FunctionJobCollectionIDNotFoundError,
38+
FunctionJobIDNotFoundError,
3739
UnsupportedFunctionClassError,
3840
UnsupportedFunctionFunctionJobClassCombinationError,
3941
)

packages/models-library/src/models_library/api_schemas_webserver/functions.py

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,25 +8,20 @@
88
FunctionClass,
99
FunctionClassSpecificData,
1010
FunctionID,
11-
FunctionIDNotFoundError,
1211
FunctionIDString,
1312
FunctionInputs,
1413
FunctionInputSchema,
1514
FunctionInputsList,
16-
FunctionInputsValidationError,
1715
FunctionJob,
1816
FunctionJobClassSpecificData,
1917
FunctionJobCollection,
2018
FunctionJobCollectionID,
21-
FunctionJobCollectionIDNotFoundError,
2219
FunctionJobCollectionsListFilters,
2320
FunctionJobCollectionStatus,
2421
FunctionJobID,
25-
FunctionJobIDNotFoundError,
2622
FunctionJobStatus,
2723
FunctionOutputs,
2824
FunctionOutputSchema,
29-
FunctionReadAccessDeniedError,
3025
FunctionSchemaClass,
3126
JSONFunctionInputSchema,
3227
JSONFunctionOutputSchema,
@@ -41,6 +36,13 @@
4136
RegisteredSolverFunction,
4237
SolverFunction,
4338
SolverFunctionJob,
39+
)
40+
from ..functions_errors import (
41+
FunctionIDNotFoundError,
42+
FunctionInputsValidationError,
43+
FunctionJobCollectionIDNotFoundError,
44+
FunctionJobIDNotFoundError,
45+
FunctionReadAccessDeniedError,
4446
UnsupportedFunctionClassError,
4547
UnsupportedFunctionFunctionJobClassCombinationError,
4648
)

packages/models-library/src/models_library/functions.py

Lines changed: 0 additions & 85 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
from typing import Annotated, Any, Literal, TypeAlias
44
from uuid import UUID
55

6-
from common_library.errors_classes import OsparcErrorMixin
76
from models_library import projects
87
from models_library.basic_regex import UUID_RE_BASE
98
from models_library.basic_types import ConstrainedStr
@@ -210,90 +209,6 @@ class FunctionJobCollectionStatus(BaseModel):
210209
status: list[str]
211210

212211

213-
class FunctionBaseError(OsparcErrorMixin, Exception):
214-
pass
215-
216-
217-
class FunctionIDNotFoundError(FunctionBaseError):
218-
msg_template: str = "Function {function_id} not found"
219-
220-
221-
class FunctionJobIDNotFoundError(FunctionBaseError):
222-
msg_template: str = "Function job {function_job_id} not found"
223-
224-
225-
class FunctionJobCollectionIDNotFoundError(FunctionBaseError):
226-
msg_template: str = "Function job collection {function_job_collection_id} not found"
227-
228-
229-
class UnsupportedFunctionClassError(FunctionBaseError):
230-
msg_template: str = "Function class {function_class} is not supported"
231-
232-
233-
class UnsupportedFunctionJobClassError(FunctionBaseError):
234-
msg_template: str = "Function job class {function_job_class} is not supported"
235-
236-
237-
class UnsupportedFunctionFunctionJobClassCombinationError(FunctionBaseError):
238-
msg_template: str = (
239-
"Function class {function_class} and function job class {function_job_class} combination is not supported"
240-
)
241-
242-
243-
class FunctionInputsValidationError(FunctionBaseError):
244-
msg_template: str = "Function inputs validation failed: {error}"
245-
246-
247-
class FunctionReadAccessDeniedError(FunctionBaseError):
248-
msg_template: str = "Function {function_id} read access denied for user {user_id}"
249-
250-
251-
class FunctionJobReadAccessDeniedError(FunctionBaseError):
252-
msg_template: str = (
253-
"Function job {function_job_id} read access denied for user {user_id}"
254-
)
255-
256-
257-
class FunctionJobCollectionReadAccessDeniedError(FunctionBaseError):
258-
msg_template: str = (
259-
"Function job collection {function_job_collection_id} read access denied for user {user_id}"
260-
)
261-
262-
263-
class FunctionWriteAccessDeniedError(FunctionBaseError):
264-
msg_template: str = "Function {function_id} write access denied for user {user_id}"
265-
266-
267-
class FunctionJobWriteAccessDeniedError(FunctionBaseError):
268-
msg_template: str = (
269-
"Function job {function_job_id} write access denied for user {user_id}"
270-
)
271-
272-
273-
class FunctionJobCollectionWriteAccessDeniedError(FunctionBaseError):
274-
msg_template: str = (
275-
"Function job collection {function_job_collection_id} write access denied for user {user_id}"
276-
)
277-
278-
279-
class FunctionExecuteAccessDeniedError(FunctionBaseError):
280-
msg_template: str = (
281-
"Function {function_id} execute access denied for user {user_id}"
282-
)
283-
284-
285-
class FunctionJobExecuteAccessDeniedError(FunctionBaseError):
286-
msg_template: str = (
287-
"Function job {function_job_id} execute access denied for user {user_id}"
288-
)
289-
290-
291-
class FunctionJobCollectionExecuteAccessDeniedError(FunctionBaseError):
292-
msg_template: str = (
293-
"Function job collection {function_job_collection_id} execute access denied for user {user_id}"
294-
)
295-
296-
297212
class FunctionJobDB(BaseModel):
298213
function_uuid: FunctionID
299214
title: str = ""
Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
from common_library.errors_classes import OsparcErrorMixin
2+
3+
4+
class FunctionBaseError(OsparcErrorMixin, Exception):
5+
pass
6+
7+
8+
class FunctionJobReadAccessDeniedError(FunctionBaseError):
9+
msg_template: str = (
10+
"Function job {function_job_id} read access denied for user {user_id}"
11+
)
12+
13+
14+
class FunctionIDNotFoundError(FunctionBaseError):
15+
msg_template: str = "Function {function_id} not found"
16+
17+
18+
class FunctionJobIDNotFoundError(FunctionBaseError):
19+
msg_template: str = "Function job {function_job_id} not found"
20+
21+
22+
class FunctionInputsValidationError(FunctionBaseError):
23+
msg_template: str = "Function inputs validation failed: {error}"
24+
25+
26+
class FunctionReadAccessDeniedError(FunctionBaseError):
27+
msg_template: str = "Function {function_id} read access denied for user {user_id}"
28+
29+
30+
class FunctionJobCollectionIDNotFoundError(FunctionBaseError):
31+
msg_template: str = "Function job collection {function_job_collection_id} not found"
32+
33+
34+
class UnsupportedFunctionClassError(FunctionBaseError):
35+
msg_template: str = "Function class {function_class} is not supported"
36+
37+
38+
class UnsupportedFunctionJobClassError(FunctionBaseError):
39+
msg_template: str = "Function job class {function_job_class} is not supported"
40+
41+
42+
class UnsupportedFunctionFunctionJobClassCombinationError(FunctionBaseError):
43+
msg_template: str = (
44+
"Function class {function_class} and function job class {function_job_class} combination is not supported"
45+
)
46+
47+
48+
class FunctionJobCollectionReadAccessDeniedError(FunctionBaseError):
49+
msg_template: str = (
50+
"Function job collection {function_job_collection_id} read access denied for user {user_id}"
51+
)
52+
53+
54+
class FunctionWriteAccessDeniedError(FunctionBaseError):
55+
msg_template: str = "Function {function_id} write access denied for user {user_id}"
56+
57+
58+
class FunctionJobWriteAccessDeniedError(FunctionBaseError):
59+
msg_template: str = (
60+
"Function job {function_job_id} write access denied for user {user_id}"
61+
)
62+
63+
64+
class FunctionJobCollectionWriteAccessDeniedError(FunctionBaseError):
65+
msg_template: str = (
66+
"Function job collection {function_job_collection_id} write access denied for user {user_id}"
67+
)
68+
69+
70+
class FunctionExecuteAccessDeniedError(FunctionBaseError):
71+
msg_template: str = (
72+
"Function {function_id} execute access denied for user {user_id}"
73+
)
74+
75+
76+
class FunctionJobExecuteAccessDeniedError(FunctionBaseError):
77+
msg_template: str = (
78+
"Function job {function_job_id} execute access denied for user {user_id}"
79+
)
80+
81+
82+
class FunctionJobCollectionExecuteAccessDeniedError(FunctionBaseError):
83+
msg_template: str = (
84+
"Function job collection {function_job_collection_id} execute access denied for user {user_id}"
85+
)

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

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,12 @@
1010
FunctionJobStatus,
1111
FunctionOutputs,
1212
RegisteredFunctionJob,
13+
)
14+
from models_library.functions_errors import (
1315
UnsupportedFunctionClassError,
1416
UnsupportedFunctionFunctionJobClassCombinationError,
1517
)
16-
from pydantic import PositiveInt
18+
from models_library.users import UserID
1719
from sqlalchemy.ext.asyncio import AsyncEngine
1820

1921
from ...models.pagination import Page, PaginationParams
@@ -57,7 +59,7 @@
5759
async def list_function_jobs(
5860
wb_api_rpc: Annotated[WbApiRpcClient, Depends(get_wb_api_rpc_client)],
5961
page_params: Annotated[PaginationParams, Depends()],
60-
user_id: Annotated[PositiveInt, Depends(get_current_user_id)],
62+
user_id: Annotated[UserID, Depends(get_current_user_id)],
6163
):
6264
function_jobs_list, meta = await wb_api_rpc.list_function_jobs(
6365
pagination_offset=page_params.offset,
@@ -83,7 +85,7 @@ async def list_function_jobs(
8385
async def register_function_job(
8486
function_job: FunctionJob,
8587
wb_api_rpc: Annotated[WbApiRpcClient, Depends(get_wb_api_rpc_client)],
86-
user_id: Annotated[PositiveInt, Depends(get_current_user_id)],
88+
user_id: Annotated[UserID, Depends(get_current_user_id)],
8789
) -> RegisteredFunctionJob:
8890
return await wb_api_rpc.register_function_job(
8991
function_job=function_job, user_id=user_id
@@ -102,7 +104,7 @@ async def register_function_job(
102104
async def get_function_job(
103105
function_job_id: FunctionJobID,
104106
wb_api_rpc: Annotated[WbApiRpcClient, Depends(get_wb_api_rpc_client)],
105-
user_id: Annotated[PositiveInt, Depends(get_current_user_id)],
107+
user_id: Annotated[UserID, Depends(get_current_user_id)],
106108
) -> RegisteredFunctionJob:
107109
return await wb_api_rpc.get_function_job(
108110
function_job_id=function_job_id, user_id=user_id
@@ -121,7 +123,7 @@ async def get_function_job(
121123
async def delete_function_job(
122124
function_job_id: FunctionJobID,
123125
wb_api_rpc: Annotated[WbApiRpcClient, Depends(get_wb_api_rpc_client)],
124-
user_id: Annotated[PositiveInt, Depends(get_current_user_id)],
126+
user_id: Annotated[UserID, Depends(get_current_user_id)],
125127
) -> None:
126128
return await wb_api_rpc.delete_function_job(
127129
function_job_id=function_job_id, user_id=user_id
@@ -140,7 +142,7 @@ async def delete_function_job(
140142
async def function_job_status(
141143
function_job_id: FunctionJobID,
142144
director2_api: Annotated[DirectorV2Api, Depends(get_api_client(DirectorV2Api))],
143-
user_id: Annotated[PositiveInt, Depends(get_current_user_id)],
145+
user_id: Annotated[UserID, Depends(get_current_user_id)],
144146
wb_api_rpc: Annotated[WbApiRpcClient, Depends(get_wb_api_rpc_client)],
145147
) -> FunctionJobStatus:
146148

@@ -181,7 +183,7 @@ async def function_job_status(
181183
async def get_function_from_functionjobid(
182184
wb_api_rpc: WbApiRpcClient,
183185
function_job_id: FunctionJobID,
184-
user_id: Annotated[PositiveInt, Depends(get_current_user_id)],
186+
user_id: Annotated[UserID, Depends(get_current_user_id)],
185187
) -> tuple[Function, FunctionJob]:
186188
function_job = await get_function_job(
187189
wb_api_rpc=wb_api_rpc, function_job_id=function_job_id, user_id=user_id
@@ -211,7 +213,7 @@ async def get_function_from_functionjobid(
211213
async def function_job_outputs(
212214
function_job_id: FunctionJobID,
213215
webserver_api: Annotated[AuthSession, Depends(get_webserver_session)],
214-
user_id: Annotated[PositiveInt, Depends(get_current_user_id)],
216+
user_id: Annotated[UserID, Depends(get_current_user_id)],
215217
storage_client: Annotated[StorageApi, Depends(get_api_client(StorageApi))],
216218
wb_api_rpc: Annotated[WbApiRpcClient, Depends(get_wb_api_rpc_client)],
217219
async_pg_engine: Annotated[AsyncEngine, Depends(get_db_asyncpg_engine)],

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
FunctionInputs,
1313
FunctionInputSchema,
1414
FunctionInputsList,
15-
FunctionInputsValidationError,
1615
FunctionJobCollection,
1716
FunctionOutputSchema,
1817
FunctionSchemaClass,
@@ -21,6 +20,9 @@
2120
RegisteredFunctionJob,
2221
RegisteredFunctionJobCollection,
2322
SolverFunctionJob,
23+
)
24+
from models_library.functions_errors import (
25+
FunctionInputsValidationError,
2426
UnsupportedFunctionClassError,
2527
)
2628
from pydantic import PositiveInt

services/api-server/tests/unit/api_functions/conftest.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414
from models_library.api_schemas_webserver.functions import (
1515
Function,
1616
FunctionClass,
17-
FunctionIDNotFoundError,
1817
FunctionJob,
1918
FunctionJobCollection,
2019
JSONFunctionInputSchema,
@@ -27,6 +26,7 @@
2726
RegisteredProjectFunctionJob,
2827
)
2928
from models_library.functions import RegisteredFunctionJobCollection
29+
from models_library.functions_errors import FunctionIDNotFoundError
3030
from models_library.projects import ProjectID
3131
from pytest_mock import MockerFixture
3232
from pytest_simcore.helpers.monkeypatch_envs import setenvs_from_dict

services/api-server/tests/unit/api_functions/test_api_routers_functions.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,14 @@
99
import pytest
1010
from httpx import AsyncClient
1111
from models_library.api_schemas_webserver.functions import (
12-
FunctionIDNotFoundError,
1312
FunctionJobCollection,
1413
ProjectFunction,
1514
ProjectFunctionJob,
1615
RegisteredFunctionJobCollection,
1716
RegisteredProjectFunction,
1817
RegisteredProjectFunctionJob,
1918
)
19+
from models_library.functions_errors import FunctionIDNotFoundError
2020
from models_library.rest_pagination import PageMetaInfoLimitOffset
2121
from servicelib.aiohttp import status
2222
from simcore_service_api_server._meta import API_VTAG

services/web/server/src/simcore_service_webserver/functions/_controller/_functions_rest_exceptions.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from models_library.functions import (
1+
from models_library.functions_errors import (
22
FunctionIDNotFoundError,
33
FunctionJobCollectionIDNotFoundError,
44
FunctionJobIDNotFoundError,

0 commit comments

Comments
 (0)