6
0

GetResizedFile.py 1.1 KB

123456789101112131415161718192021222324252627282930313233343536
  1. from eventlet import tpool
  2. from flask import abort
  3. from flask import send_from_directory
  4. from flask.views import View
  5. from pycs.database.File import File
  6. from pycs.util import file_ops
  7. class GetResizedFile(View):
  8. """
  9. returns binary file after resizing
  10. """
  11. # pylint: disable=arguments-differ
  12. methods = ['GET']
  13. def dispatch_request(self, file_id: int, resolution: str):
  14. # get file from database
  15. file = File.get_or_404(file_id)
  16. project = file.project
  17. if not os.path.exists(file.absolute_path):
  18. abort(404, "File not found!")
  19. # extract desired resolution
  20. resolution = re.split(r'[^0-9]', resolution)
  21. max_width = int(resolution[0])
  22. max_height = int(resolution[1]) if len(resolution) > 1 else 2 ** 24
  23. # send data
  24. file_directory, file_name = tpool.execute(file_ops.resize_file,
  25. file, file.project.root_folder,
  26. max_width, max_height)
  27. return send_from_directory(file_directory, file_name)