Skip to content

Commit 4a5fa99

Browse files
committed
draft api
1 parent 3ad2eec commit 4a5fa99

File tree

2 files changed

+38
-1
lines changed

2 files changed

+38
-1
lines changed

api/specs/web-server/_projects_groups.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,17 @@
2424
)
2525

2626

27+
@router.post(
28+
"/projects/{project_id}:share",
29+
response_model=Envelope[ProjectGroupGet],
30+
status_code=status.HTTP_201_CREATED,
31+
)
32+
async def share_project(
33+
_path: Annotated[ProjectPathParams, Depends()],
34+
_body: _ProjectsGroupsBodyParams,
35+
): ...
36+
37+
2738
@router.post(
2839
"/projects/{project_id}/groups/{group_id}",
2940
response_model=Envelope[ProjectGroupGet],

services/web/server/src/simcore_service_webserver/projects/_controller/groups_rest.py

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
from aiohttp import web
44
from models_library.groups import GroupID
55
from models_library.projects import ProjectID
6-
from pydantic import BaseModel, ConfigDict
6+
from pydantic import BaseModel, ConfigDict, EmailStr
77
from servicelib.aiohttp import status
88
from servicelib.aiohttp.requests_validation import (
99
parse_request_body_as,
@@ -25,6 +25,32 @@
2525
routes = web.RouteTableDef()
2626

2727

28+
class _ProjectShare(BaseModel):
29+
email: EmailStr | None
30+
primary_group_id: GroupID | None
31+
32+
# sharing access
33+
read: bool
34+
write: bool
35+
delete: bool
36+
37+
model_config = ConfigDict(extra="forbid")
38+
39+
40+
@routes.post(f"/{VTAG}/projects/{{project_id}}:share", name="share_project")
41+
@login_required
42+
@permission_required("project.access_rights.update")
43+
@handle_plugin_requests_exceptions
44+
async def share_project(request: web.Request):
45+
req_ctx = RequestContext.model_validate(request)
46+
path_params = parse_request_path_parameters_as(ProjectPathParams, request)
47+
body_params = await parse_request_body_as(_ProjectShare, request)
48+
49+
# TODO: share project
50+
51+
return web.json_response(status=status.HTTP_204_NO_CONTENT)
52+
53+
2854
class _ProjectsGroupsPathParams(BaseModel):
2955
project_id: ProjectID
3056
group_id: GroupID

0 commit comments

Comments
 (0)