def post(self, instance_id): if not self.is_exist(instance_id): abort(404) if not self.is_allowed(instance_id): abort(403) uploaded_file = request.files["file"] folder_path = thumbnail_utils.get_preview_folder_name( "originals", instance_id ) extension = uploaded_file.filename[-4:] if extension in [".png", ".jpg"]: thumbnail_utils.save_file( folder_path, instance_id, uploaded_file, size=None ) if extension == ".jpg": thumbnail_utils.convert_jpg_to_png( folder_path, instance_id ) thumbnail_utils.generate_preview_variants(instance_id) self.emit_app_preview_event(instance_id) return thumbnail_utils.get_preview_url_path(instance_id), 201 elif extension in [".mp4", ".mov"]: from moviepy.editor import VideoFileClip file_name = "%s%s" % (instance_id, extension) folder = thumbnail_utils.create_folder(folder_path) file_path = os.path.join(folder, file_name) picture_path = os.path.join(folder, "%s.png" % instance_id) uploaded_file.save(file_path + '.tmp') clip = VideoFileClip(file_path + '.tmp') clip = clip.resize(height=720) clip.save_frame(picture_path, round(clip.duration / 2)) thumbnail_utils.generate_preview_variants(instance_id) file_name = "%s%s" % (instance_id, extension) clip.write_videofile(os.path.join(folder, instance_id + ".mp4")) self.emit_app_preview_event(instance_id) return {}, 201 else: abort(400, "Wrong file format")
def test_generate_preview_variants(self): preview_id = "123413-12312" file_path_fixture = self.get_fixture_file_path("thumbnails/th01.png") file_name = thumbnail.get_file_name(preview_id) original_path = os.path.join(TEST_FOLDER, file_name) fs.copyfile(file_path_fixture, original_path) thumbnail.generate_preview_variants(original_path, preview_id) file_path = os.path.join(TEST_FOLDER, "previews-%s.png" % preview_id) self.assertTrue(os.path.exists(file_path)) self.assertTrue(Image.open(file_path).size, thumbnail.PREVIEW_SIZE) file_path = os.path.join(TEST_FOLDER, "thumbnails-%s.png" % preview_id) self.assertTrue(os.path.exists(file_path)) self.assertTrue(Image.open(file_path).size, thumbnail.RECTANGLE_SIZE) file_path = os.path.join(TEST_FOLDER, "thumbnails-square-%s.png" % preview_id) self.assertTrue(os.path.exists(file_path)) self.assertTrue(Image.open(file_path).size, thumbnail.SQUARE_SIZE)
def save_variants(preview_file_id, original_picture_path): """ Build variants of a picture file and save them in the main storage. """ variants = thumbnail_utils.generate_preview_variants( original_picture_path, preview_file_id) variants.append(("original", original_picture_path)) for (name, path) in variants: file_store.add_picture(name, preview_file_id, path) os.remove(path) return [] # variants
def test_generate_preview_variants(self): preview_id = "123413-12312" file_path_fixture = self.get_fixture_file_path("thumbnails/th01.png") file_name = thumbnail.get_file_name(preview_id) folder_path = thumbnail.get_preview_folder_name( "originals", preview_id) fs.mkdir_p(folder_path) fs.copyfile(file_path_fixture, os.path.join(folder_path, file_name)) thumbnail.generate_preview_variants(preview_id) file_path = thumbnail.get_preview_file_path("previews", preview_id) self.assertTrue(os.path.exists(file_path)) self.assertTrue(Image.open(file_path).size, thumbnail.PREVIEW_SIZE) folder_path = thumbnail.get_preview_folder_name( "thumbnails", preview_id) self.assertTrue(os.path.exists(file_path)) self.assertTrue(Image.open(file_path).size, thumbnail.RECTANGLE_SIZE) folder_path = thumbnail.get_preview_folder_name( "thumbnails-square", preview_id) self.assertTrue(os.path.exists(file_path)) self.assertTrue(Image.open(file_path).size, thumbnail.SQUARE_SIZE)