file.py 1.1 KB

12345678910111213141516171819202122232425262728293031323334
  1. import services
  2. from controllers.web import api
  3. from controllers.web.error import FileTooLargeError, NoFileUploadedError, TooManyFilesError, UnsupportedFileTypeError
  4. from controllers.web.wraps import WebApiResource
  5. from fields.file_fields import file_fields
  6. from flask import request
  7. from flask_restful import marshal_with
  8. from services.file_service import FileService
  9. class FileApi(WebApiResource):
  10. @marshal_with(file_fields)
  11. def post(self, app_model, end_user):
  12. # get file from request
  13. file = request.files['file']
  14. # check file
  15. if 'file' not in request.files:
  16. raise NoFileUploadedError()
  17. if len(request.files) > 1:
  18. raise TooManyFilesError()
  19. try:
  20. upload_file = FileService.upload_file(file, end_user)
  21. except services.errors.file.FileTooLargeError as file_too_large_error:
  22. raise FileTooLargeError(file_too_large_error.description)
  23. except services.errors.file.UnsupportedFileTypeError:
  24. raise UnsupportedFileTypeError()
  25. return upload_file, 201
  26. api.add_resource(FileApi, '/files/upload')