file.py 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. from flask import request
  2. from flask_restful import marshal_with
  3. import services
  4. from controllers.service_api import api
  5. from controllers.service_api.app import create_or_update_end_user_for_user_id
  6. from controllers.service_api.app.error import (
  7. FileTooLargeError,
  8. NoFileUploadedError,
  9. TooManyFilesError,
  10. UnsupportedFileTypeError,
  11. )
  12. from controllers.service_api.wraps import AppApiResource
  13. from fields.file_fields import file_fields
  14. from services.file_service import FileService
  15. class FileApi(AppApiResource):
  16. @marshal_with(file_fields)
  17. def post(self, app_model, end_user):
  18. file = request.files['file']
  19. user_args = request.form.get('user')
  20. if end_user is None and user_args is not None:
  21. end_user = create_or_update_end_user_for_user_id(app_model, user_args)
  22. # check file
  23. if 'file' not in request.files:
  24. raise NoFileUploadedError()
  25. if not file.mimetype:
  26. raise UnsupportedFileTypeError()
  27. if len(request.files) > 1:
  28. raise TooManyFilesError()
  29. try:
  30. upload_file = FileService.upload_file(file, end_user)
  31. except services.errors.file.FileTooLargeError as file_too_large_error:
  32. raise FileTooLargeError(file_too_large_error.description)
  33. except services.errors.file.UnsupportedFileTypeError:
  34. raise UnsupportedFileTypeError()
  35. return upload_file, 201
  36. api.add_resource(FileApi, '/files/upload')