|  | @@ -47,7 +47,6 @@ class FileController(Controller):
 | 
	
		
			
			| 47 | 47 |      #@hapic.input_files()
 | 
	
		
			
			| 48 | 48 |      @hapic.output_body(NoContentSchema(), default_http_code=HTTPStatus.NO_CONTENT)  # nopep8
 | 
	
		
			
			| 49 | 49 |      def upload_file(self, context, request: TracimRequest, hapic_data=None):
 | 
	
		
			
			| 50 |  | -        # TODO - G.M - 2018-07-05 - Do this endpoint
 | 
	
		
			
			| 51 | 50 |          app_config = request.registry.settings['CFG']
 | 
	
		
			
			| 52 | 51 |          api = ContentApi(
 | 
	
		
			
			| 53 | 52 |              current_user=request.current_user,
 | 
	
	
		
			
			|  | @@ -79,7 +78,6 @@ class FileController(Controller):
 | 
	
		
			
			| 79 | 78 |      @hapic.input_path(WorkspaceAndContentIdPathSchema())
 | 
	
		
			
			| 80 | 79 |      @hapic.output_file([])
 | 
	
		
			
			| 81 | 80 |      def download_file(self, context, request: TracimRequest, hapic_data=None):
 | 
	
		
			
			| 82 |  | -        # TODO - G.M - 2018-07-05 - Do this endpoint
 | 
	
		
			
			| 83 | 81 |          app_config = request.registry.settings['CFG']
 | 
	
		
			
			| 84 | 82 |          api = ContentApi(
 | 
	
		
			
			| 85 | 83 |              current_user=request.current_user,
 | 
	
	
		
			
			|  | @@ -96,32 +94,90 @@ class FileController(Controller):
 | 
	
		
			
			| 96 | 94 |          response.app_iter = FileIter(file)
 | 
	
		
			
			| 97 | 95 |          return response
 | 
	
		
			
			| 98 | 96 |  
 | 
	
		
			
			| 99 |  | -
 | 
	
		
			
			| 100 |  | -    # Previews
 | 
	
		
			
			| 101 | 97 |      @hapic.with_api_doc(tags=[FILE_ENDPOINTS_TAG])
 | 
	
		
			
			| 102 |  | -    @require_workspace_role(UserRoleInWorkspace.CONTRIBUTOR)
 | 
	
		
			
			|  | 98 | +    @require_workspace_role(UserRoleInWorkspace.READER)
 | 
	
		
			
			| 103 | 99 |      @require_content_types([file_type])
 | 
	
		
			
			| 104 | 100 |      @hapic.input_path(WorkspaceAndContentIdPathSchema())
 | 
	
		
			
			| 105 |  | -    #@hapic.output_file([])
 | 
	
		
			
			| 106 |  | -    def get_file_preview_info(self, context, request: TracimRequest, hapic_data=None):  # nopep8
 | 
	
		
			
			| 107 |  | -        # TODO - G.M - 2018-07-05 - Do this endpoint
 | 
	
		
			
			| 108 |  | -        app_config = request.registry.settings['CFG']
 | 
	
		
			
			| 109 |  | -        preview_manager = PreviewManager(app_config.PREVIEW_CACHE_DIR, create_folder=True)  # nopep8
 | 
	
		
			
			| 110 |  | -        api = ContentApi(
 | 
	
		
			
			| 111 |  | -            current_user=request.current_user,
 | 
	
		
			
			| 112 |  | -            session=request.dbsession,
 | 
	
		
			
			| 113 |  | -            config=app_config,
 | 
	
		
			
			| 114 |  | -        )
 | 
	
		
			
			| 115 |  | -        content = api.get_one(
 | 
	
		
			
			| 116 |  | -            hapic_data.path.content_id,
 | 
	
		
			
			| 117 |  | -            content_type=ContentType.Any
 | 
	
		
			
			| 118 |  | -        )
 | 
	
		
			
			| 119 |  | -        file_path = api.get_one_revision_filepath(content.revision_id)
 | 
	
		
			
			| 120 |  | -        return {
 | 
	
		
			
			| 121 |  | -            'nb_pages': preview_manager.get_page_nb(file_path),
 | 
	
		
			
			| 122 |  | -            'pdf_preview': preview_manager.has_pdf_preview(file_path),
 | 
	
		
			
			| 123 |  | -            'mimetype':  preview_manager.get_mimetype(file_path),
 | 
	
		
			
			| 124 |  | -        }
 | 
	
		
			
			|  | 101 | +    @hapic.output_file([])
 | 
	
		
			
			|  | 102 | +    def download_revisions_file(self, context, request: TracimRequest, hapic_data=None):
 | 
	
		
			
			|  | 103 | +        raise NotImplemented()
 | 
	
		
			
			|  | 104 | +
 | 
	
		
			
			|  | 105 | +    # preview
 | 
	
		
			
			|  | 106 | +    # pdf
 | 
	
		
			
			|  | 107 | +    @hapic.with_api_doc(tags=[FILE_ENDPOINTS_TAG])
 | 
	
		
			
			|  | 108 | +    @require_workspace_role(UserRoleInWorkspace.READER)
 | 
	
		
			
			|  | 109 | +    @require_content_types([file_type])
 | 
	
		
			
			|  | 110 | +    @hapic.output_file([])
 | 
	
		
			
			|  | 111 | +    def preview_pdf(self, context, request: TracimRequest, hapic_data=None):
 | 
	
		
			
			|  | 112 | +        raise NotImplemented()
 | 
	
		
			
			|  | 113 | +
 | 
	
		
			
			|  | 114 | +    @hapic.with_api_doc(tags=[FILE_ENDPOINTS_TAG])
 | 
	
		
			
			|  | 115 | +    @require_workspace_role(UserRoleInWorkspace.READER)
 | 
	
		
			
			|  | 116 | +    @require_content_types([file_type])
 | 
	
		
			
			|  | 117 | +    @hapic.output_file([])
 | 
	
		
			
			|  | 118 | +    def preview_pdf_full(self, context, request: TracimRequest, hapic_data=None):
 | 
	
		
			
			|  | 119 | +        raise NotImplemented()
 | 
	
		
			
			|  | 120 | +
 | 
	
		
			
			|  | 121 | +    @hapic.with_api_doc(tags=[FILE_ENDPOINTS_TAG])
 | 
	
		
			
			|  | 122 | +    @require_workspace_role(UserRoleInWorkspace.READER)
 | 
	
		
			
			|  | 123 | +    @require_content_types([file_type])
 | 
	
		
			
			|  | 124 | +    @hapic.output_file([])
 | 
	
		
			
			|  | 125 | +    def preview_pdf_revision(self, context, request: TracimRequest, hapic_data=None):
 | 
	
		
			
			|  | 126 | +        raise NotImplemented()
 | 
	
		
			
			|  | 127 | +
 | 
	
		
			
			|  | 128 | +    # jpg
 | 
	
		
			
			|  | 129 | +    @hapic.with_api_doc(tags=[FILE_ENDPOINTS_TAG])
 | 
	
		
			
			|  | 130 | +    @require_workspace_role(UserRoleInWorkspace.READER)
 | 
	
		
			
			|  | 131 | +    @require_content_types([file_type])
 | 
	
		
			
			|  | 132 | +    @hapic.output_file([])
 | 
	
		
			
			|  | 133 | +    def preview_jpg(self, context, request: TracimRequest, hapic_data=None):
 | 
	
		
			
			|  | 134 | +        raise NotImplemented()
 | 
	
		
			
			|  | 135 | +
 | 
	
		
			
			|  | 136 | +    @hapic.with_api_doc(tags=[FILE_ENDPOINTS_TAG])
 | 
	
		
			
			|  | 137 | +    @require_workspace_role(UserRoleInWorkspace.READER)
 | 
	
		
			
			|  | 138 | +    @require_content_types([file_type])
 | 
	
		
			
			|  | 139 | +    @hapic.output_file([])
 | 
	
		
			
			|  | 140 | +    def sized_preview_jpg(self, context, request: TracimRequest, hapic_data=None):
 | 
	
		
			
			|  | 141 | +        raise NotImplemented()
 | 
	
		
			
			|  | 142 | +
 | 
	
		
			
			|  | 143 | +    @hapic.with_api_doc(tags=[FILE_ENDPOINTS_TAG])
 | 
	
		
			
			|  | 144 | +    @require_workspace_role(UserRoleInWorkspace.READER)
 | 
	
		
			
			|  | 145 | +    @require_content_types([file_type])
 | 
	
		
			
			|  | 146 | +    @hapic.output_file([])
 | 
	
		
			
			|  | 147 | +    def sized_preview_jpg_revision(self, context, request: TracimRequest, hapic_data=None):
 | 
	
		
			
			|  | 148 | +        raise NotImplemented()
 | 
	
		
			
			|  | 149 | +
 | 
	
		
			
			|  | 150 | +    @hapic.with_api_doc(tags=[FILE_ENDPOINTS_TAG])
 | 
	
		
			
			|  | 151 | +    @require_workspace_role(UserRoleInWorkspace.READER)
 | 
	
		
			
			|  | 152 | +    @require_content_types([file_type])
 | 
	
		
			
			|  | 153 | +    @hapic.output_file([])
 | 
	
		
			
			|  | 154 | +    def allowed_dim_preview_jpg(self, context, request: TracimRequest, hapic_data=None):
 | 
	
		
			
			|  | 155 | +        raise NotImplemented()
 | 
	
		
			
			|  | 156 | +
 | 
	
		
			
			|  | 157 | +    # @hapic.with_api_doc(tags=[FILE_ENDPOINTS_TAG])
 | 
	
		
			
			|  | 158 | +    # @require_workspace_role(UserRoleInWorkspace.CONTRIBUTOR)
 | 
	
		
			
			|  | 159 | +    # @require_content_types([file_type])
 | 
	
		
			
			|  | 160 | +    # @hapic.input_path(WorkspaceAndContentIdPathSchema())
 | 
	
		
			
			|  | 161 | +    # #@hapic.output_file([])
 | 
	
		
			
			|  | 162 | +    # def get_file_preview_info(self, context, request: TracimRequest, hapic_data=None):  # nopep8
 | 
	
		
			
			|  | 163 | +    #     # TODO - G.M - 2018-07-05 - Do this endpoint
 | 
	
		
			
			|  | 164 | +    #     app_config = request.registry.settings['CFG']
 | 
	
		
			
			|  | 165 | +    #     preview_manager = PreviewManager(app_config.PREVIEW_CACHE_DIR, create_folder=True)  # nopep8
 | 
	
		
			
			|  | 166 | +    #     api = ContentApi(
 | 
	
		
			
			|  | 167 | +    #         current_user=request.current_user,
 | 
	
		
			
			|  | 168 | +    #         session=request.dbsession,
 | 
	
		
			
			|  | 169 | +    #         config=app_config,
 | 
	
		
			
			|  | 170 | +    #     )
 | 
	
		
			
			|  | 171 | +    #     content = api.get_one(
 | 
	
		
			
			|  | 172 | +    #         hapic_data.path.content_id,
 | 
	
		
			
			|  | 173 | +    #         content_type=ContentType.Any
 | 
	
		
			
			|  | 174 | +    #     )
 | 
	
		
			
			|  | 175 | +    #     file_path = api.get_one_revision_filepath(content.revision_id)
 | 
	
		
			
			|  | 176 | +    #     return {
 | 
	
		
			
			|  | 177 | +    #         'nb_pages': preview_manager.get_page_nb(file_path),
 | 
	
		
			
			|  | 178 | +    #         'pdf_preview': preview_manager.has_pdf_preview(file_path),
 | 
	
		
			
			|  | 179 | +    #         'mimetype':  preview_manager.get_mimetype(file_path),
 | 
	
		
			
			|  | 180 | +    #     }
 | 
	
		
			
			| 125 | 181 |  
 | 
	
		
			
			| 126 | 182 |      # File infos
 | 
	
		
			
			| 127 | 183 |      @hapic.with_api_doc(tags=[FILE_ENDPOINTS_TAG])
 | 
	
	
		
			
			|  | @@ -244,6 +300,8 @@ class FileController(Controller):
 | 
	
		
			
			| 244 | 300 |          return
 | 
	
		
			
			| 245 | 301 |  
 | 
	
		
			
			| 246 | 302 |      def bind(self, configurator: Configurator) -> None:
 | 
	
		
			
			|  | 303 | +
 | 
	
		
			
			|  | 304 | +        # file info #
 | 
	
		
			
			| 247 | 305 |          # Get file info
 | 
	
		
			
			| 248 | 306 |          configurator.add_route(
 | 
	
		
			
			| 249 | 307 |              'file_info',
 | 
	
	
		
			
			|  | @@ -251,7 +309,6 @@ class FileController(Controller):
 | 
	
		
			
			| 251 | 309 |              request_method='GET'
 | 
	
		
			
			| 252 | 310 |          )
 | 
	
		
			
			| 253 | 311 |          configurator.add_view(self.get_file_infos, route_name='file_info')  # nopep8
 | 
	
		
			
			| 254 |  | -
 | 
	
		
			
			| 255 | 312 |          # update file
 | 
	
		
			
			| 256 | 313 |          configurator.add_route(
 | 
	
		
			
			| 257 | 314 |              'update_file_info',
 | 
	
	
		
			
			|  | @@ -260,21 +317,80 @@ class FileController(Controller):
 | 
	
		
			
			| 260 | 317 |          )  # nopep8
 | 
	
		
			
			| 261 | 318 |          configurator.add_view(self.update_file_info, route_name='update_file_info')  # nopep8
 | 
	
		
			
			| 262 | 319 |  
 | 
	
		
			
			| 263 |  | -        # upload new file data
 | 
	
		
			
			|  | 320 | +        # raw file #
 | 
	
		
			
			|  | 321 | +        # upload raw file
 | 
	
		
			
			| 264 | 322 |          configurator.add_route(
 | 
	
		
			
			| 265 | 323 |              'upload_file',
 | 
	
		
			
			| 266 |  | -            '/workspaces/{workspace_id}/files/{content_id}/file_data',  # nopep8
 | 
	
		
			
			|  | 324 | +            '/workspaces/{workspace_id}/files/{content_id}/raw',  # nopep8
 | 
	
		
			
			| 267 | 325 |              request_method='PUT'
 | 
	
		
			
			| 268 | 326 |          )
 | 
	
		
			
			| 269 | 327 |          configurator.add_view(self.upload_file, route_name='upload_file')  # nopep8
 | 
	
		
			
			| 270 |  | -
 | 
	
		
			
			| 271 |  | -        # download file data
 | 
	
		
			
			|  | 328 | +        # download raw file
 | 
	
		
			
			| 272 | 329 |          configurator.add_route(
 | 
	
		
			
			| 273 | 330 |              'download_file',
 | 
	
		
			
			| 274 |  | -            '/workspaces/{workspace_id}/files/{content_id}/file_data',  # nopep8
 | 
	
		
			
			|  | 331 | +            '/workspaces/{workspace_id}/files/{content_id}/raw',  # nopep8
 | 
	
		
			
			| 275 | 332 |              request_method='GET'
 | 
	
		
			
			| 276 | 333 |          )
 | 
	
		
			
			| 277 | 334 |          configurator.add_view(self.download_file, route_name='download_file')  # nopep8
 | 
	
		
			
			|  | 335 | +        # download raw file of revision
 | 
	
		
			
			|  | 336 | +        configurator.add_route(
 | 
	
		
			
			|  | 337 | +            'download_revision',
 | 
	
		
			
			|  | 338 | +            '/workspaces/{workspace_id}/files/{content_id}/revisions/{content_revision}/raw',  # nopep8
 | 
	
		
			
			|  | 339 | +            request_method='GET'
 | 
	
		
			
			|  | 340 | +        )
 | 
	
		
			
			|  | 341 | +        configurator.add_view(self.download_revisions_file, route_name='download_revision')  # nopep8
 | 
	
		
			
			|  | 342 | +
 | 
	
		
			
			|  | 343 | +        # previews #
 | 
	
		
			
			|  | 344 | +        # get preview pdf full
 | 
	
		
			
			|  | 345 | +        configurator.add_route(
 | 
	
		
			
			|  | 346 | +            'preview_pdf_full',
 | 
	
		
			
			|  | 347 | +            '/workspaces/{workspace_id}/files/{content_id}/preview/pdf/full',  # nopep8
 | 
	
		
			
			|  | 348 | +            request_method='GET'
 | 
	
		
			
			|  | 349 | +        )
 | 
	
		
			
			|  | 350 | +        configurator.add_view(self.preview_pdf_full, route_name='preview_pdf_full')  # nopep8
 | 
	
		
			
			|  | 351 | +        # get preview pdf
 | 
	
		
			
			|  | 352 | +        configurator.add_route(
 | 
	
		
			
			|  | 353 | +            'preview_pdf',
 | 
	
		
			
			|  | 354 | +            '/workspaces/{workspace_id}/files/{content_id}/preview/pdf',  # nopep8
 | 
	
		
			
			|  | 355 | +            request_method='GET'
 | 
	
		
			
			|  | 356 | +        )
 | 
	
		
			
			|  | 357 | +        configurator.add_view(self.preview_pdf, route_name='preview_pdf')  # nopep8
 | 
	
		
			
			|  | 358 | +        # get preview jpg allowed dims
 | 
	
		
			
			|  | 359 | +        configurator.add_route(
 | 
	
		
			
			|  | 360 | +            'allowed_dim_preview_jpg',
 | 
	
		
			
			|  | 361 | +            '/workspaces/{workspace_id}/files/{content_id}/preview/jpg/allowed_dims',  # nopep8
 | 
	
		
			
			|  | 362 | +            request_method='GET'
 | 
	
		
			
			|  | 363 | +        )
 | 
	
		
			
			|  | 364 | +        configurator.add_view(self.allowed_dim_preview_jpg, route_name='allowed_dim_preview_jpg')  # nopep8
 | 
	
		
			
			|  | 365 | +        # get preview jpg
 | 
	
		
			
			|  | 366 | +        configurator.add_route(
 | 
	
		
			
			|  | 367 | +            'preview_jpg',
 | 
	
		
			
			|  | 368 | +            '/workspaces/{workspace_id}/files/{content_id}/preview/jpg',  # nopep8
 | 
	
		
			
			|  | 369 | +            request_method='GET'
 | 
	
		
			
			|  | 370 | +        )
 | 
	
		
			
			|  | 371 | +        configurator.add_view(self.preview_jpg, route_name='preview_jpg')  # nopep8
 | 
	
		
			
			|  | 372 | +        # get preview jpg with size
 | 
	
		
			
			|  | 373 | +        configurator.add_route(
 | 
	
		
			
			|  | 374 | +            'sized_preview_jpg',
 | 
	
		
			
			|  | 375 | +            '/workspaces/{workspace_id}/files/{content_id}/preview/jpg/{width}x{height}',  # nopep8
 | 
	
		
			
			|  | 376 | +            request_method='GET'
 | 
	
		
			
			|  | 377 | +        )
 | 
	
		
			
			|  | 378 | +        configurator.add_view(self.sized_preview_jpg, route_name='sized_preview_jpg')  # nopep8
 | 
	
		
			
			|  | 379 | +        # get jpg preview for revision
 | 
	
		
			
			|  | 380 | +        configurator.add_route(
 | 
	
		
			
			|  | 381 | +            'sized_preview_jpg_revision',
 | 
	
		
			
			|  | 382 | +            '/workspaces/{workspace_id}/files/{content_id}/revisions/{revision_id}/preview/jpg/{width}x{height}',  # nopep8
 | 
	
		
			
			|  | 383 | +            request_method='GET'
 | 
	
		
			
			|  | 384 | +        )
 | 
	
		
			
			|  | 385 | +        configurator.add_view(self.sized_preview_jpg_revision, route_name='sized_preview_jpg_revision')  # nopep8
 | 
	
		
			
			|  | 386 | +        # get jpg preview for revision
 | 
	
		
			
			|  | 387 | +        configurator.add_route(
 | 
	
		
			
			|  | 388 | +            'preview_pdf_revision',
 | 
	
		
			
			|  | 389 | +            '/workspaces/{workspace_id}/files/{content_id}/revisions/{revision_id}/preview/pdf',  # nopep8
 | 
	
		
			
			|  | 390 | +            request_method='GET'
 | 
	
		
			
			|  | 391 | +        )
 | 
	
		
			
			|  | 392 | +        configurator.add_view(self.preview_pdf_revision, route_name='preview_pdf_revision')  # nopep8
 | 
	
		
			
			|  | 393 | +        # others #
 | 
	
		
			
			| 278 | 394 |          # get file revisions
 | 
	
		
			
			| 279 | 395 |          configurator.add_route(
 | 
	
		
			
			| 280 | 396 |              'file_revisions',
 | 
	
	
		
			
			|  | @@ -290,11 +406,3 @@ class FileController(Controller):
 | 
	
		
			
			| 290 | 406 |              request_method='PUT'
 | 
	
		
			
			| 291 | 407 |          )
 | 
	
		
			
			| 292 | 408 |          configurator.add_view(self.set_file_status, route_name='set_file_status')  # nopep8
 | 
	
		
			
			| 293 |  | -
 | 
	
		
			
			| 294 |  | -        # get preview info
 | 
	
		
			
			| 295 |  | -        configurator.add_route(
 | 
	
		
			
			| 296 |  | -            'preview_info',
 | 
	
		
			
			| 297 |  | -            '/workspaces/{workspace_id}/files/{content_id}/preview/info',  # nopep8
 | 
	
		
			
			| 298 |  | -            request_method='GET'
 | 
	
		
			
			| 299 |  | -        )
 | 
	
		
			
			| 300 |  | -        configurator.add_view(self.get_file_preview_info, route_name='preview_info')  # nopep8
 |