Skip to content
Merged
Show file tree
Hide file tree
Changes from 20 commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
db36ccf
Add user permission tables and rpc service
wvangeit May 26, 2025
00f61ee
Shorten func foreign key
wvangeit May 26, 2025
63f76a3
Shorten foreign key
wvangeit May 26, 2025
71e62b7
All web and api tests working with func permissions
wvangeit May 27, 2025
731687e
Add more function permission tests
wvangeit May 27, 2025
35235ed
Fix last commit
wvangeit May 27, 2025
784827c
Merge branch 'master' into func_user_permissions
wvangeit May 27, 2025
97c2272
Add db migration script for function access rights
wvangeit May 28, 2025
9970b4d
Update openapi specs
wvangeit May 28, 2025
2895da8
Work around mypy bug
wvangeit May 28, 2025
1906e8f
Merge branch 'master' into func_user_permissions
wvangeit May 28, 2025
0ab2a55
Address comments in the PR
wvangeit May 28, 2025
cb53ca1
Merge branch 'func_user_permissions' of github.com:wvangeit/osparc-si…
wvangeit May 28, 2025
9f1e354
Remove the user_id column from function access tables
wvangeit May 28, 2025
222b59d
Removed user_id column from function access tables
wvangeit May 28, 2025
7f63f95
Merge branch 'master' into func_user_permissions
wvangeit May 28, 2025
6971be0
Replace more positiveint with userid
wvangeit May 28, 2025
6caac7c
Merge branch 'func_user_permissions' of github.com:wvangeit/osparc-si…
wvangeit May 28, 2025
bed6155
Last switch to UserID
wvangeit May 28, 2025
330943d
Merge branch 'master' into func_user_permissions
wvangeit May 30, 2025
3395246
Remove func migration script
wvangeit May 30, 2025
3dfd738
Fix function db migration after master merge
wvangeit May 30, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -5,20 +5,16 @@
FunctionClass,
FunctionClassSpecificData,
FunctionID,
FunctionIDNotFoundError,
FunctionInputs,
FunctionInputSchema,
FunctionInputsList,
FunctionInputsValidationError,
FunctionJob,
FunctionJobClassSpecificData,
FunctionJobCollection,
FunctionJobCollectionID,
FunctionJobCollectionIDNotFoundError,
FunctionJobCollectionsListFilters,
FunctionJobCollectionStatus,
FunctionJobID,
FunctionJobIDNotFoundError,
FunctionJobStatus,
FunctionOutputs,
FunctionOutputSchema,
Expand All @@ -34,6 +30,12 @@
RegisteredProjectFunctionJob,
SolverFunction,
SolverFunctionJob,
)
from ..functions_errors import (
FunctionIDNotFoundError,
FunctionInputsValidationError,
FunctionJobCollectionIDNotFoundError,
FunctionJobIDNotFoundError,
UnsupportedFunctionClassError,
UnsupportedFunctionFunctionJobClassCombinationError,
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,20 +8,17 @@
FunctionClass,
FunctionClassSpecificData,
FunctionID,
FunctionIDNotFoundError,
FunctionIDString,
FunctionInputs,
FunctionInputSchema,
FunctionInputsList,
FunctionInputsValidationError,
FunctionJob,
FunctionJobClassSpecificData,
FunctionJobCollection,
FunctionJobCollectionID,
FunctionJobCollectionIDNotFoundError,
FunctionJobCollectionsListFilters,
FunctionJobCollectionStatus,
FunctionJobID,
FunctionJobIDNotFoundError,
FunctionJobStatus,
FunctionOutputs,
FunctionOutputSchema,
Expand All @@ -39,6 +36,13 @@
RegisteredSolverFunction,
SolverFunction,
SolverFunctionJob,
)
from ..functions_errors import (
FunctionIDNotFoundError,
FunctionInputsValidationError,
FunctionJobCollectionIDNotFoundError,
FunctionJobIDNotFoundError,
FunctionReadAccessDeniedError,
UnsupportedFunctionClassError,
UnsupportedFunctionFunctionJobClassCombinationError,
)
Expand All @@ -54,6 +58,7 @@
"FunctionID",
"FunctionIDNotFoundError",
"FunctionIDNotFoundError",
"FunctionIDString",
"FunctionInputSchema",
"FunctionInputs",
"FunctionInputs",
Expand All @@ -80,6 +85,7 @@
"FunctionJobStatus",
"FunctionOutputSchema",
"FunctionOutputs",
"FunctionReadAccessDeniedError",
"FunctionSchemaClass",
"FunctionToRegister",
"FunctionToRegister",
Expand Down
84 changes: 48 additions & 36 deletions packages/models-library/src/models_library/functions.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,16 @@
from typing import Annotated, Any, Literal, TypeAlias
from uuid import UUID

from common_library.errors_classes import OsparcErrorMixin
from models_library import projects
from models_library.basic_regex import UUID_RE_BASE
from models_library.basic_types import ConstrainedStr
from models_library.groups import GroupID
from models_library.services_types import ServiceKey, ServiceVersion
from pydantic import BaseModel, Field
from models_library.users import UserID
from pydantic import BaseModel, ConfigDict, Field

from .projects import ProjectID
from .utils.change_case import snake_to_camel

FunctionID: TypeAlias = UUID
FunctionJobID: TypeAlias = UUID
Expand Down Expand Up @@ -207,40 +209,6 @@ class FunctionJobCollectionStatus(BaseModel):
status: list[str]


class FunctionBaseError(OsparcErrorMixin, Exception):
pass


class FunctionIDNotFoundError(FunctionBaseError):
msg_template: str = "Function {function_id} not found"


class FunctionJobIDNotFoundError(FunctionBaseError):
msg_template: str = "Function job {function_job_id} not found"


class FunctionJobCollectionIDNotFoundError(FunctionBaseError):
msg_template: str = "Function job collection {function_job_collection_id} not found"


class UnsupportedFunctionClassError(FunctionBaseError):
msg_template: str = "Function class {function_class} is not supported"


class UnsupportedFunctionJobClassError(FunctionBaseError):
msg_template: str = "Function job class {function_job_class} is not supported"


class UnsupportedFunctionFunctionJobClassCombinationError(FunctionBaseError):
msg_template: str = (
"Function class {function_class} and function job class {function_job_class} combination is not supported"
)


class FunctionInputsValidationError(FunctionBaseError):
msg_template: str = "Function inputs validation failed: {error}"


class FunctionJobDB(BaseModel):
function_uuid: FunctionID
title: str = ""
Expand Down Expand Up @@ -286,3 +254,47 @@ class FunctionJobCollectionsListFilters(BaseModel):
"""Filters for listing function job collections"""

has_function_id: FunctionIDString | None = None


class FunctionAccessRights(BaseModel):
read: bool = False
write: bool = False
execute: bool = False

model_config = ConfigDict(
alias_generator=snake_to_camel,
populate_by_name=True,
extra="forbid",
)


class FunctionUserAccessRights(FunctionAccessRights):
user_id: UserID


class FunctionGroupAccessRights(FunctionAccessRights):
group_id: GroupID


class FunctionAccessRightsDB(BaseModel):
group_id: GroupID | None = None
read: bool = False
write: bool = False
execute: bool = False

model_config = ConfigDict(
alias_generator=snake_to_camel,
populate_by_name=True,
extra="forbid",
)


FunctionJobAccessRights: TypeAlias = FunctionAccessRights
FunctionJobAccessRightsDB: TypeAlias = FunctionAccessRightsDB
FunctionJobUserAccessRights: TypeAlias = FunctionUserAccessRights
FunctionJobGroupAccessRights: TypeAlias = FunctionGroupAccessRights

FunctionJobCollectionAccessRights: TypeAlias = FunctionAccessRights
FunctionJobCollectionAccessRightsDB: TypeAlias = FunctionAccessRightsDB
FunctionJobCollectionUserAccessRights: TypeAlias = FunctionUserAccessRights
FunctionJobCollectionGroupAccessRights: TypeAlias = FunctionGroupAccessRights
85 changes: 85 additions & 0 deletions packages/models-library/src/models_library/functions_errors.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
from common_library.errors_classes import OsparcErrorMixin


class FunctionBaseError(OsparcErrorMixin, Exception):
pass


class FunctionJobReadAccessDeniedError(FunctionBaseError):
msg_template: str = (
"Function job {function_job_id} read access denied for user {user_id}"
)


class FunctionIDNotFoundError(FunctionBaseError):
msg_template: str = "Function {function_id} not found"


class FunctionJobIDNotFoundError(FunctionBaseError):
msg_template: str = "Function job {function_job_id} not found"


class FunctionInputsValidationError(FunctionBaseError):
msg_template: str = "Function inputs validation failed: {error}"


class FunctionReadAccessDeniedError(FunctionBaseError):
msg_template: str = "Function {function_id} read access denied for user {user_id}"


class FunctionJobCollectionIDNotFoundError(FunctionBaseError):
msg_template: str = "Function job collection {function_job_collection_id} not found"


class UnsupportedFunctionClassError(FunctionBaseError):
msg_template: str = "Function class {function_class} is not supported"


class UnsupportedFunctionJobClassError(FunctionBaseError):
msg_template: str = "Function job class {function_job_class} is not supported"


class UnsupportedFunctionFunctionJobClassCombinationError(FunctionBaseError):
msg_template: str = (
"Function class {function_class} and function job class {function_job_class} combination is not supported"
)


class FunctionJobCollectionReadAccessDeniedError(FunctionBaseError):
msg_template: str = (
"Function job collection {function_job_collection_id} read access denied for user {user_id}"
)


class FunctionWriteAccessDeniedError(FunctionBaseError):
msg_template: str = "Function {function_id} write access denied for user {user_id}"


class FunctionJobWriteAccessDeniedError(FunctionBaseError):
msg_template: str = (
"Function job {function_job_id} write access denied for user {user_id}"
)


class FunctionJobCollectionWriteAccessDeniedError(FunctionBaseError):
msg_template: str = (
"Function job collection {function_job_collection_id} write access denied for user {user_id}"
)


class FunctionExecuteAccessDeniedError(FunctionBaseError):
msg_template: str = (
"Function {function_id} execute access denied for user {user_id}"
)


class FunctionJobExecuteAccessDeniedError(FunctionBaseError):
msg_template: str = (
"Function job {function_job_id} execute access denied for user {user_id}"
)


class FunctionJobCollectionExecuteAccessDeniedError(FunctionBaseError):
msg_template: str = (
"Function job collection {function_job_collection_id} execute access denied for user {user_id}"
)
Loading
Loading