Skip to content

Commit 15af02a

Browse files
committed
draft api
1 parent b046716 commit 15af02a

File tree

1 file changed

+23
-6
lines changed
  • services/web/server/src/simcore_service_webserver/projects/_controller

1 file changed

+23
-6
lines changed

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

Lines changed: 23 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import logging
22

33
from aiohttp import web
4+
from models_library.api_schemas_webserver._base import InputSchema
45
from models_library.groups import GroupID
56
from models_library.projects import ProjectID
67
from pydantic import BaseModel, ConfigDict, EmailStr
@@ -9,8 +10,10 @@
910
parse_request_body_as,
1011
parse_request_path_parameters_as,
1112
)
13+
from servicelib.logging_utils import log_context
1214

1315
from ..._meta import api_version_prefix as VTAG
16+
from ...application_settings_utils import requires_dev_feature_enabled
1417
from ...login.decorators import login_required
1518
from ...security.decorators import permission_required
1619
from ...utils_aiohttp import envelope_json_response
@@ -25,9 +28,9 @@
2528
routes = web.RouteTableDef()
2629

2730

28-
class _ProjectShare(BaseModel):
29-
email: EmailStr | None
30-
primary_group_id: GroupID | None
31+
class _ProjectShare(InputSchema):
32+
# TODO: move to models_library.api_schemas_webserver.groups together with the rest
33+
user_email: EmailStr
3134

3235
# sharing access
3336
read: bool
@@ -38,6 +41,7 @@ class _ProjectShare(BaseModel):
3841

3942

4043
@routes.post(f"/{VTAG}/projects/{{project_id}}:share", name="share_project")
44+
@requires_dev_feature_enabled
4145
@login_required
4246
@permission_required("project.access_rights.update")
4347
@handle_plugin_requests_exceptions
@@ -46,9 +50,21 @@ async def share_project(request: web.Request):
4650
path_params = parse_request_path_parameters_as(ProjectPathParams, request)
4751
body_params = await parse_request_body_as(_ProjectShare, request)
4852

49-
# TODO: share project
53+
with log_context(
54+
_logger,
55+
logging.DEBUG,
56+
"User [%s] from product [%s] is sharing project [%s] with [%s]",
57+
req_ctx.user_id,
58+
req_ctx.product_name,
59+
path_params.project_id,
60+
body_params.user_email,
61+
):
5062

51-
return web.json_response(status=status.HTTP_204_NO_CONTENT)
63+
# TODO: share project
64+
if body_params.user_email:
65+
raise NotImplementedError
66+
67+
return web.json_response(status=status.HTTP_204_NO_CONTENT)
5268

5369

5470
class _ProjectsGroupsPathParams(BaseModel):
@@ -121,7 +137,7 @@ async def replace_project_group(request: web.Request):
121137
path_params = parse_request_path_parameters_as(_ProjectsGroupsPathParams, request)
122138
body_params = await parse_request_body_as(_ProjectsGroupsBodyParams, request)
123139

124-
return await _groups_service.replace_project_group(
140+
new_project_group = await _groups_service.replace_project_group(
125141
app=request.app,
126142
user_id=req_ctx.user_id,
127143
project_id=path_params.project_id,
@@ -131,6 +147,7 @@ async def replace_project_group(request: web.Request):
131147
delete=body_params.delete,
132148
product_name=req_ctx.product_name,
133149
)
150+
return envelope_json_response(new_project_group, web.HTTPOk)
134151

135152

136153
@routes.delete(

0 commit comments

Comments
 (0)