|
@@ -2,7 +2,10 @@
|
2
|
2
|
import typing
|
3
|
3
|
|
4
|
4
|
import transaction
|
|
5
|
+from depot.io.local import LocalStoredFile
|
|
6
|
+from depot.manager import DepotManager
|
5
|
7
|
from pyramid.config import Configurator
|
|
8
|
+from pyramid.response import FileResponse, FileIter
|
6
|
9
|
|
7
|
10
|
from tracim.exceptions import EmptyLabelNotAllowed
|
8
|
11
|
from tracim.models.data import UserRoleInWorkspace
|
|
@@ -35,52 +38,66 @@ FILE_ENDPOINTS_TAG = 'Files'
|
35
|
38
|
|
36
|
39
|
class FileController(Controller):
|
37
|
40
|
|
38
|
|
- # # File data
|
39
|
|
- # @hapic.with_api_doc(tags=[FILE_ENDPOINTS_TAG])
|
40
|
|
- # @require_workspace_role(UserRoleInWorkspace.CONTRIBUTOR)
|
41
|
|
- # @require_content_types([file_type])
|
42
|
|
- # @hapic.input_path(WorkspaceAndContentIdPathSchema())
|
43
|
|
- # #@hapic.input_files()
|
44
|
|
- # @hapic.output_file([])
|
45
|
|
- # def upload_file(self, context, request: TracimRequest, hapic_data=None):
|
46
|
|
- # # TODO - G.M - 2018-07-05 - Do this endpoint
|
47
|
|
- # app_config = request.registry.settings['CFG']
|
48
|
|
- # api = ContentApi(
|
49
|
|
- # current_user=request.current_user,
|
50
|
|
- # session=request.dbsession,
|
51
|
|
- # config=app_config,
|
52
|
|
- # )
|
53
|
|
- # content = api.get_one(
|
54
|
|
- # hapic_data.path.content_id,
|
55
|
|
- # content_type=ContentType.Any
|
56
|
|
- # )
|
57
|
|
- # file = request.POST['files']
|
58
|
|
- # api.update_file_data(
|
59
|
|
- # content,
|
60
|
|
- # new_filename=file.filename,
|
61
|
|
- # new_mimetype=file.type,
|
62
|
|
- # new_content=file.file,
|
63
|
|
- # )
|
64
|
|
- # return content.depot_file
|
65
|
|
- #
|
66
|
|
- # @hapic.with_api_doc(tags=[FILE_ENDPOINTS_TAG])
|
67
|
|
- # @require_workspace_role(UserRoleInWorkspace.CONTRIBUTOR)
|
68
|
|
- # @require_content_types([file_type])
|
69
|
|
- # @hapic.input_path(WorkspaceAndContentIdPathSchema())
|
70
|
|
- # @hapic.output_file([])
|
71
|
|
- # def download_file(self, context, request: TracimRequest, hapic_data=None):
|
72
|
|
- # # TODO - G.M - 2018-07-05 - Do this endpoint
|
73
|
|
- # app_config = request.registry.settings['CFG']
|
74
|
|
- # api = ContentApi(
|
75
|
|
- # current_user=request.current_user,
|
76
|
|
- # session=request.dbsession,
|
77
|
|
- # config=app_config,
|
78
|
|
- # )
|
79
|
|
- # content = api.get_one(
|
80
|
|
- # hapic_data.path.content_id,
|
81
|
|
- # content_type=ContentType.Any
|
82
|
|
- # )
|
83
|
|
- # return content.depot_file
|
|
41
|
+ # File data
|
|
42
|
+ @hapic.with_api_doc(tags=[FILE_ENDPOINTS_TAG])
|
|
43
|
+ @require_workspace_role(UserRoleInWorkspace.CONTRIBUTOR)
|
|
44
|
+ @require_content_types([file_type])
|
|
45
|
+ @hapic.input_path(WorkspaceAndContentIdPathSchema())
|
|
46
|
+ #@hapic.input_files()
|
|
47
|
+ @hapic.output_file([])
|
|
48
|
+ def upload_file(self, context, request: TracimRequest, hapic_data=None):
|
|
49
|
+ # TODO - G.M - 2018-07-05 - Do this endpoint
|
|
50
|
+ app_config = request.registry.settings['CFG']
|
|
51
|
+ api = ContentApi(
|
|
52
|
+ current_user=request.current_user,
|
|
53
|
+ session=request.dbsession,
|
|
54
|
+ config=app_config,
|
|
55
|
+ )
|
|
56
|
+ content = api.get_one(
|
|
57
|
+ hapic_data.path.content_id,
|
|
58
|
+ content_type=ContentType.Any
|
|
59
|
+ )
|
|
60
|
+ file = request.POST['files']
|
|
61
|
+ with new_revision(
|
|
62
|
+ session=request.dbsession,
|
|
63
|
+ tm=transaction.manager,
|
|
64
|
+ content=content
|
|
65
|
+ ):
|
|
66
|
+ api.update_file_data(
|
|
67
|
+ content,
|
|
68
|
+ new_filename=file.filename,
|
|
69
|
+ new_mimetype=file.type,
|
|
70
|
+ new_content=file.file,
|
|
71
|
+ )
|
|
72
|
+ file = DepotManager.get().get(content.depot_file)
|
|
73
|
+ response = request.response
|
|
74
|
+ response.content_type = file.content_type
|
|
75
|
+ response.app_iter = FileIter(file)
|
|
76
|
+ return response
|
|
77
|
+
|
|
78
|
+ @hapic.with_api_doc(tags=[FILE_ENDPOINTS_TAG])
|
|
79
|
+ @require_workspace_role(UserRoleInWorkspace.CONTRIBUTOR)
|
|
80
|
+ @require_content_types([file_type])
|
|
81
|
+ @hapic.input_path(WorkspaceAndContentIdPathSchema())
|
|
82
|
+ @hapic.output_file([])
|
|
83
|
+ def download_file(self, context, request: TracimRequest, hapic_data=None):
|
|
84
|
+ # TODO - G.M - 2018-07-05 - Do this endpoint
|
|
85
|
+ app_config = request.registry.settings['CFG']
|
|
86
|
+ api = ContentApi(
|
|
87
|
+ current_user=request.current_user,
|
|
88
|
+ session=request.dbsession,
|
|
89
|
+ config=app_config,
|
|
90
|
+ )
|
|
91
|
+ content = api.get_one(
|
|
92
|
+ hapic_data.path.content_id,
|
|
93
|
+ content_type=ContentType.Any
|
|
94
|
+ )
|
|
95
|
+ file = DepotManager.get().get(content.depot_file)
|
|
96
|
+ response = request.response
|
|
97
|
+ response.content_type = file.content_type
|
|
98
|
+ response.app_iter = FileIter(file)
|
|
99
|
+ return response
|
|
100
|
+
|
84
|
101
|
|
85
|
102
|
# Previews
|
86
|
103
|
# def get_file_preview(self):
|
|
@@ -224,21 +241,21 @@ class FileController(Controller):
|
224
|
241
|
) # nopep8
|
225
|
242
|
configurator.add_view(self.update_file_info, route_name='update_file_info') # nopep8
|
226
|
243
|
|
227
|
|
- # # upload new file data
|
228
|
|
- # configurator.add_route(
|
229
|
|
- # 'upload_file',
|
230
|
|
- # '/workspaces/{workspace_id}/files/{content_id}/file_data', # nopep8
|
231
|
|
- # request_method='PUT'
|
232
|
|
- # )
|
233
|
|
- # configurator.add_view(self.upload_file, route_name='upload_file') # nopep8
|
234
|
|
- #
|
235
|
|
- # # download file data
|
236
|
|
- # configurator.add_route(
|
237
|
|
- # 'download_file',
|
238
|
|
- # '/workspaces/{workspace_id}/files/{content_id}/file_data', # nopep8
|
239
|
|
- # request_method='GET'
|
240
|
|
- # )
|
241
|
|
- # configurator.add_view(self.download_file, route_name='download_file') # nopep8
|
|
244
|
+ # upload new file data
|
|
245
|
+ configurator.add_route(
|
|
246
|
+ 'upload_file',
|
|
247
|
+ '/workspaces/{workspace_id}/files/{content_id}/file_data', # nopep8
|
|
248
|
+ request_method='PUT'
|
|
249
|
+ )
|
|
250
|
+ configurator.add_view(self.upload_file, route_name='upload_file') # nopep8
|
|
251
|
+
|
|
252
|
+ # download file data
|
|
253
|
+ configurator.add_route(
|
|
254
|
+ 'download_file',
|
|
255
|
+ '/workspaces/{workspace_id}/files/{content_id}/file_data', # nopep8
|
|
256
|
+ request_method='GET'
|
|
257
|
+ )
|
|
258
|
+ configurator.add_view(self.download_file, route_name='download_file') # nopep8
|
242
|
259
|
# get file revisions
|
243
|
260
|
configurator.add_route(
|
244
|
261
|
'file_revisions',
|