| | from flask import request |
| | from flask_restful import Resource, marshal_with |
| |
|
| | import services |
| | from controllers.common.errors import FilenameNotExistsError |
| | from controllers.service_api import api |
| | from controllers.service_api.app.error import ( |
| | FileTooLargeError, |
| | NoFileUploadedError, |
| | TooManyFilesError, |
| | UnsupportedFileTypeError, |
| | ) |
| | from controllers.service_api.wraps import FetchUserArg, WhereisUserArg, validate_app_token |
| | from fields.file_fields import file_fields |
| | from models.model import App, EndUser |
| | from services.file_service import FileService |
| |
|
| |
|
| | class FileApi(Resource): |
| | @validate_app_token(fetch_user_arg=FetchUserArg(fetch_from=WhereisUserArg.FORM)) |
| | @marshal_with(file_fields) |
| | def post(self, app_model: App, end_user: EndUser): |
| | file = request.files["file"] |
| |
|
| | |
| | if "file" not in request.files: |
| | raise NoFileUploadedError() |
| |
|
| | if not file.mimetype: |
| | raise UnsupportedFileTypeError() |
| |
|
| | if len(request.files) > 1: |
| | raise TooManyFilesError() |
| |
|
| | if not file.filename: |
| | raise FilenameNotExistsError |
| |
|
| | try: |
| | upload_file = FileService.upload_file( |
| | filename=file.filename, |
| | content=file.read(), |
| | mimetype=file.mimetype, |
| | user=end_user, |
| | ) |
| | except services.errors.file.FileTooLargeError as file_too_large_error: |
| | raise FileTooLargeError(file_too_large_error.description) |
| | except services.errors.file.UnsupportedFileTypeError: |
| | raise UnsupportedFileTypeError() |
| |
|
| | return upload_file, 201 |
| |
|
| |
|
| | api.add_resource(FileApi, "/files/upload") |
| |
|