|
@@ -12,6 +12,8 @@ from tracim.lib.core.workspace import WorkspaceApi
|
12
|
12
|
from tracim.lib.core.content import ContentApi
|
13
|
13
|
from tracim.lib.core.userworkspace import RoleApi
|
14
|
14
|
from tracim.lib.utils.authorization import require_workspace_role
|
|
15
|
+from tracim.lib.utils.authorization import require_profile
|
|
16
|
+from tracim.models import Group
|
15
|
17
|
from tracim.lib.utils.authorization import require_candidate_workspace_role
|
16
|
18
|
from tracim.models.data import UserRoleInWorkspace
|
17
|
19
|
from tracim.models.data import ActionDescription
|
|
@@ -21,6 +23,8 @@ from tracim.exceptions import EmptyLabelNotAllowed
|
21
|
23
|
from tracim.exceptions import WorkspacesDoNotMatch
|
22
|
24
|
from tracim.views.controllers import Controller
|
23
|
25
|
from tracim.views.core_api.schemas import FilterContentQuerySchema
|
|
26
|
+from tracim.views.core_api.schemas import WorkspaceCreationSchema
|
|
27
|
+from tracim.views.core_api.schemas import WorkspaceModifySchema
|
24
|
28
|
from tracim.views.core_api.schemas import ContentMoveSchema
|
25
|
29
|
from tracim.views.core_api.schemas import NoContentSchema
|
26
|
30
|
from tracim.views.core_api.schemas import ContentCreationSchema
|
|
@@ -45,7 +49,6 @@ class WorkspaceController(Controller):
|
45
|
49
|
"""
|
46
|
50
|
Get workspace informations
|
47
|
51
|
"""
|
48
|
|
- wid = hapic_data.path['workspace_id']
|
49
|
52
|
app_config = request.registry.settings['CFG']
|
50
|
53
|
wapi = WorkspaceApi(
|
51
|
54
|
current_user=request.current_user, # User
|
|
@@ -55,6 +58,50 @@ class WorkspaceController(Controller):
|
55
|
58
|
return wapi.get_workspace_with_context(request.current_workspace)
|
56
|
59
|
|
57
|
60
|
@hapic.with_api_doc(tags=[WORKSPACE_ENDPOINTS_TAG])
|
|
61
|
+ @require_workspace_role(UserRoleInWorkspace.WORKSPACE_MANAGER)
|
|
62
|
+ @hapic.input_path(WorkspaceIdPathSchema())
|
|
63
|
+ @hapic.input_body(WorkspaceModifySchema())
|
|
64
|
+ @hapic.output_body(WorkspaceSchema())
|
|
65
|
+ def update_workspace(self, context, request: TracimRequest, hapic_data=None): # nopep8
|
|
66
|
+ """
|
|
67
|
+ Update workspace informations
|
|
68
|
+ """
|
|
69
|
+ app_config = request.registry.settings['CFG']
|
|
70
|
+ wapi = WorkspaceApi(
|
|
71
|
+ current_user=request.current_user, # User
|
|
72
|
+ session=request.dbsession,
|
|
73
|
+ config=app_config,
|
|
74
|
+ )
|
|
75
|
+ wapi.update_workspace(
|
|
76
|
+ request.current_workspace,
|
|
77
|
+ label=hapic_data.body.label,
|
|
78
|
+ description=hapic_data.body.description,
|
|
79
|
+ save_now=True,
|
|
80
|
+ )
|
|
81
|
+ return wapi.get_workspace_with_context(request.current_workspace)
|
|
82
|
+
|
|
83
|
+ @hapic.with_api_doc(tags=[WORKSPACE_ENDPOINTS_TAG])
|
|
84
|
+ @require_profile(Group.TIM_MANAGER)
|
|
85
|
+ @hapic.input_body(WorkspaceCreationSchema())
|
|
86
|
+ @hapic.output_body(WorkspaceSchema())
|
|
87
|
+ def create_workspace(self, context, request: TracimRequest, hapic_data=None): # nopep8
|
|
88
|
+ """
|
|
89
|
+ create workspace
|
|
90
|
+ """
|
|
91
|
+ app_config = request.registry.settings['CFG']
|
|
92
|
+ wapi = WorkspaceApi(
|
|
93
|
+ current_user=request.current_user, # User
|
|
94
|
+ session=request.dbsession,
|
|
95
|
+ config=app_config,
|
|
96
|
+ )
|
|
97
|
+ workspace = wapi.create_workspace(
|
|
98
|
+ label=hapic_data.body.label,
|
|
99
|
+ description=hapic_data.body.description,
|
|
100
|
+ save_now=True,
|
|
101
|
+ )
|
|
102
|
+ return wapi.get_workspace_with_context(workspace)
|
|
103
|
+
|
|
104
|
+ @hapic.with_api_doc(tags=[WORKSPACE_ENDPOINTS_TAG])
|
58
|
105
|
@require_workspace_role(UserRoleInWorkspace.READER)
|
59
|
106
|
@hapic.input_path(WorkspaceIdPathSchema())
|
60
|
107
|
@hapic.output_body(WorkspaceMemberSchema(many=True))
|
|
@@ -332,6 +379,12 @@ class WorkspaceController(Controller):
|
332
|
379
|
# Workspace
|
333
|
380
|
configurator.add_route('workspace', '/workspaces/{workspace_id}', request_method='GET') # nopep8
|
334
|
381
|
configurator.add_view(self.workspace, route_name='workspace')
|
|
382
|
+ # Create workspace
|
|
383
|
+ configurator.add_route('create_workspace', '/workspaces', request_method='POST') # nopep8
|
|
384
|
+ configurator.add_view(self.create_workspace, route_name='create_workspace') # nopep8
|
|
385
|
+ # Update Workspace
|
|
386
|
+ configurator.add_route('update_workspace', '/workspaces/{workspace_id}', request_method='PUT') # nopep8
|
|
387
|
+ configurator.add_view(self.update_workspace, route_name='update_workspace') # nopep8
|
335
|
388
|
# Workspace Members (Roles)
|
336
|
389
|
configurator.add_route('workspace_members', '/workspaces/{workspace_id}/members', request_method='GET') # nopep8
|
337
|
390
|
configurator.add_view(self.workspaces_members, route_name='workspace_members') # nopep8
|