| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 | from flask import requestfrom flask_restful import Resource, marshal_withimport servicesfrom controllers.common.errors import FilenameNotExistsErrorfrom controllers.service_api import apifrom controllers.service_api.app.error import (    FileTooLargeError,    NoFileUploadedError,    TooManyFilesError,    UnsupportedFileTypeError,)from controllers.service_api.wraps import FetchUserArg, WhereisUserArg, validate_app_tokenfrom fields.file_fields import file_fieldsfrom models.model import App, EndUserfrom services.file_service import FileServiceclass 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"]        # check 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, 201api.add_resource(FileApi, "/files/upload")
 |