Skip to content

Commit dde02ee

Browse files
Merge branch 'master' into improve-project-listing-db
2 parents f880b1f + 30b1302 commit dde02ee

File tree

76 files changed

+3954
-753
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

76 files changed

+3954
-753
lines changed

api/specs/web-server/_projects_states.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
from pydantic import ValidationError
1414
from servicelib.aiohttp import status
1515
from simcore_service_webserver._meta import API_VTAG
16-
from simcore_service_webserver.director_v2.exceptions import DirectorServiceError
16+
from simcore_service_webserver.director_v2.exceptions import DirectorV2ServiceError
1717
from simcore_service_webserver.projects._controller.projects_states_rest import (
1818
ProjectPathParams,
1919
_OpenProjectQuery,
@@ -62,7 +62,7 @@ def to_desc(exceptions: list[type[Exception]] | type[Exception]):
6262
"description": to_desc([ValidationError])
6363
},
6464
status.HTTP_503_SERVICE_UNAVAILABLE: {
65-
"description": to_desc([DirectorServiceError])
65+
"description": to_desc([DirectorV2ServiceError])
6666
},
6767
},
6868
)

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: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,20 +8,17 @@
88
FunctionClass,
99
FunctionClassSpecificData,
1010
FunctionID,
11-
FunctionIDNotFoundError,
11+
FunctionIDString,
1212
FunctionInputs,
1313
FunctionInputSchema,
1414
FunctionInputsList,
15-
FunctionInputsValidationError,
1615
FunctionJob,
1716
FunctionJobClassSpecificData,
1817
FunctionJobCollection,
1918
FunctionJobCollectionID,
20-
FunctionJobCollectionIDNotFoundError,
2119
FunctionJobCollectionsListFilters,
2220
FunctionJobCollectionStatus,
2321
FunctionJobID,
24-
FunctionJobIDNotFoundError,
2522
FunctionJobStatus,
2623
FunctionOutputs,
2724
FunctionOutputSchema,
@@ -39,6 +36,13 @@
3936
RegisteredSolverFunction,
4037
SolverFunction,
4138
SolverFunctionJob,
39+
)
40+
from ..functions_errors import (
41+
FunctionIDNotFoundError,
42+
FunctionInputsValidationError,
43+
FunctionJobCollectionIDNotFoundError,
44+
FunctionJobIDNotFoundError,
45+
FunctionReadAccessDeniedError,
4246
UnsupportedFunctionClassError,
4347
UnsupportedFunctionFunctionJobClassCombinationError,
4448
)
@@ -54,6 +58,7 @@
5458
"FunctionID",
5559
"FunctionIDNotFoundError",
5660
"FunctionIDNotFoundError",
61+
"FunctionIDString",
5762
"FunctionInputSchema",
5863
"FunctionInputs",
5964
"FunctionInputs",
@@ -80,6 +85,7 @@
8085
"FunctionJobStatus",
8186
"FunctionOutputSchema",
8287
"FunctionOutputs",
88+
"FunctionReadAccessDeniedError",
8389
"FunctionSchemaClass",
8490
"FunctionToRegister",
8591
"FunctionToRegister",

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

Lines changed: 50 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,17 @@
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
9+
from models_library.groups import GroupID
10+
from models_library.products import ProductName
1011
from models_library.services_types import ServiceKey, ServiceVersion
11-
from pydantic import BaseModel, Field
12+
from models_library.users import UserID
13+
from pydantic import BaseModel, ConfigDict, Field
1214

1315
from .projects import ProjectID
16+
from .utils.change_case import snake_to_camel
1417

1518
FunctionID: TypeAlias = UUID
1619
FunctionJobID: TypeAlias = UUID
@@ -207,40 +210,6 @@ class FunctionJobCollectionStatus(BaseModel):
207210
status: list[str]
208211

209212

210-
class FunctionBaseError(OsparcErrorMixin, Exception):
211-
pass
212-
213-
214-
class FunctionIDNotFoundError(FunctionBaseError):
215-
msg_template: str = "Function {function_id} not found"
216-
217-
218-
class FunctionJobIDNotFoundError(FunctionBaseError):
219-
msg_template: str = "Function job {function_job_id} not found"
220-
221-
222-
class FunctionJobCollectionIDNotFoundError(FunctionBaseError):
223-
msg_template: str = "Function job collection {function_job_collection_id} not found"
224-
225-
226-
class UnsupportedFunctionClassError(FunctionBaseError):
227-
msg_template: str = "Function class {function_class} is not supported"
228-
229-
230-
class UnsupportedFunctionJobClassError(FunctionBaseError):
231-
msg_template: str = "Function job class {function_job_class} is not supported"
232-
233-
234-
class UnsupportedFunctionFunctionJobClassCombinationError(FunctionBaseError):
235-
msg_template: str = (
236-
"Function class {function_class} and function job class {function_job_class} combination is not supported"
237-
)
238-
239-
240-
class FunctionInputsValidationError(FunctionBaseError):
241-
msg_template: str = "Function inputs validation failed: {error}"
242-
243-
244213
class FunctionJobDB(BaseModel):
245214
function_uuid: FunctionID
246215
title: str = ""
@@ -286,3 +255,48 @@ class FunctionJobCollectionsListFilters(BaseModel):
286255
"""Filters for listing function job collections"""
287256

288257
has_function_id: FunctionIDString | None = None
258+
259+
260+
class FunctionAccessRights(BaseModel):
261+
read: bool = False
262+
write: bool = False
263+
execute: bool = False
264+
265+
model_config = ConfigDict(
266+
alias_generator=snake_to_camel,
267+
populate_by_name=True,
268+
extra="forbid",
269+
)
270+
271+
272+
class FunctionUserAccessRights(FunctionAccessRights):
273+
user_id: UserID
274+
275+
276+
class FunctionGroupAccessRights(FunctionAccessRights):
277+
group_id: GroupID
278+
279+
280+
class FunctionAccessRightsDB(BaseModel):
281+
group_id: GroupID | None = None
282+
product_name: ProductName | None = None
283+
read: bool = False
284+
write: bool = False
285+
execute: bool = False
286+
287+
model_config = ConfigDict(
288+
alias_generator=snake_to_camel,
289+
populate_by_name=True,
290+
extra="forbid",
291+
)
292+
293+
294+
FunctionJobAccessRights: TypeAlias = FunctionAccessRights
295+
FunctionJobAccessRightsDB: TypeAlias = FunctionAccessRightsDB
296+
FunctionJobUserAccessRights: TypeAlias = FunctionUserAccessRights
297+
FunctionJobGroupAccessRights: TypeAlias = FunctionGroupAccessRights
298+
299+
FunctionJobCollectionAccessRights: TypeAlias = FunctionAccessRights
300+
FunctionJobCollectionAccessRightsDB: TypeAlias = FunctionAccessRightsDB
301+
FunctionJobCollectionUserAccessRights: TypeAlias = FunctionUserAccessRights
302+
FunctionJobCollectionGroupAccessRights: TypeAlias = FunctionGroupAccessRights
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+
)

0 commit comments

Comments
 (0)