import os import re from eventlet import tpool from flask import abort from flask import send_from_directory from flask.views import View from pycs.database.File import File from pycs.util.FileOperations import resize_file class GetResizedFile(View): """ returns binary file after resizing """ # pylint: disable=arguments-differ methods = ['GET'] def dispatch_request(self, file_id: int, resolution: str): # get file from database file = File.get_or_404(file_id) project = file.project if not os.path.exists(file.absolute_path): abort(404, "File not found!") # extract desired resolution resolution = re.split(r'[^0-9]', resolution) max_width = int(resolution[0]) max_height = int(resolution[1]) if len(resolution) > 1 else 2 ** 24 # resize file file_directory, file_name = tpool.execute(resize_file, file, project.root_folder, max_width, max_height) # send to client return send_from_directory(file_directory, file_name)