Пример #1
0
    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"]

        file_name_parts = uploaded_file.filename.split(".")
        extension = ".%s" % file_name_parts.pop().lower()
        original_file_name = ".".join(file_name_parts)

        if extension in ALLOWED_PICTURE_EXTENSION:
            self.save_picture_preview(instance_id, uploaded_file)
            preview_file = files_service.update_preview_file(
                instance_id,
                {
                    "extension": "png",
                    "original_name": original_file_name
                },
            )
            self.emit_app_preview_event(instance_id)
            return preview_file, 201

        elif extension in ALLOWED_MOVIE_EXTENSION:
            try:
                self.save_movie_preview(instance_id, uploaded_file)
            except Exception as e:
                current_app.logger.error(e, exc_info=1)
                current_app.logger.error("Normalization failed.")
                deletion_service.remove_preview_file_by_id(instance_id)
                abort(400, "Normalization failed.")
            preview_file = files_service.update_preview_file(
                instance_id,
                {
                    "extension": "mp4",
                    "original_name": original_file_name
                },
            )
            self.emit_app_preview_event(instance_id)
            return preview_file, 201

        elif extension in ALLOWED_FILE_EXTENSION:
            self.save_file_preview(instance_id, uploaded_file, extension)
            preview_file = files_service.update_preview_file(
                instance_id,
                {
                    "extension": extension[1:],
                    "original_name": original_file_name,
                },
            )
            self.emit_app_preview_event(instance_id)
            return preview_file, 201

        else:
            current_app.logger.info("Wrong file format, extension: %s",
                                    extension)
            deletion_service.remove_preview_file_by_id(instance_id)
            abort(400, "Wrong file format, extension: %s" % extension)
Пример #2
0
    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"]

        extension = "." + uploaded_file.filename.split(".")[-1].lower()

        if extension in ALLOWED_PICTURE_EXTENSION:
            self.save_picture_preview(instance_id, uploaded_file)
            preview_file = files_service.update_preview_file(
                instance_id, {"extension": "png"})
            self.emit_app_preview_event(instance_id)
            return preview_file, 201

        elif extension in ALLOWED_MOVIE_EXTENSION:
            self.save_movie_preview(instance_id, uploaded_file)
            preview_file = files_service.update_preview_file(
                instance_id, {"extension": "mp4"})
            self.emit_app_preview_event(instance_id)
            return preview_file, 201

        elif extension in ALLOWED_FILE_EXTENSION:
            self.save_file_preview(instance_id, uploaded_file, extension)
            preview_file = files_service.update_preview_file(
                instance_id, {"extension": extension[1:]})
            self.emit_app_preview_event(instance_id)
            return preview_file, 201

        else:
            current_app.logger.info("Wrong file format, extension: %s",
                                    extension)
            abort(400, "Wrong file format, extension: %s" % extension)
Пример #3
0
def patch_file_storage():
    """
    Patch to run after upgrade from 0.7.6 or lower to 0.8.0 or superior.
    It concerns only files stored on the hard drive.
    """
    from zou import app
    from zou.app import config
    from zou.app.stores import file_store
    from zou.app.services import files_service

    with app.app.app_context():
        if hasattr(
                config,
                "THUMBNAIL_FOLDER",
        ):
            preview_folder = config.THUMBNAIL_FOLDER
        else:
            preview_folder = config.PREVIEW_FOLDER

        print("Looking for existing file in %s" % preview_folder)
        originals_folder = os.path.join(preview_folder, "preview-files",
                                        "originals")

        if os.path.exists(originals_folder):
            for folder in os.listdir(originals_folder):
                subfolder = os.path.join(".", originals_folder, folder)
                print("Looking into folder: %s" % subfolder)

                for filename in os.listdir(subfolder):
                    file_path = os.path.join(subfolder, filename)
                    print("Loading file: %s" % file_path)
                    instance_id = filename.split(".")[0]
                    extension = filename.split(".")[1]

                    if extension == "png":
                        file_store.add_picture("originals", instance_id,
                                               file_path)
                    elif extension == "mp4":
                        file_store.add_movie("previews", instance_id,
                                             file_path)
                    else:
                        file_store.add_file("previews", instance_id, file_path)

                    print("Original file stored: (%s, %s)" %
                          (instance_id, extension))
                    try:
                        files_service.update_preview_file(
                            instance_id, {"exstension": extension})
                    except:
                        print("Warning: preview file entry "
                              "not found: %s." % instance_id)

        for prefix in ["thumbnails", "thumbnails-square", "previews"]:
            folder = os.path.join(preview_folder, "preview-files", prefix)

            if os.path.exists(folder):
                for subfoldername in os.listdir(folder):
                    subfolder = os.path.join(".", folder, subfoldername)

                    for filename in os.listdir(subfolder):
                        file_path = os.path.join(subfolder, filename)
                        instance_id = filename.split(".")[0]

                        file_store.add_picture(prefix, instance_id, file_path)
                        print("%s file stored: %s" % (prefix, instance_id))

        for prefix in ["persons", "projects"]:
            folder = os.path.join(preview_folder, prefix)

            if os.path.exists(folder):
                for filename in os.listdir(folder):
                    file_path = os.path.join(folder, filename)
                    instance_id = filename.split(".")[0]
                    file_store.add_picture("thumbnails", instance_id,
                                           file_path)
                    print("%s file stored: %s" % (prefix, instance_id))
Пример #4
0
    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.split(".")[-1].lower()
        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)
            files_service.update_preview_file(instance_id,
                                              {"extension": "png"})

            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"))
            files_service.update_preview_file(instance_id,
                                              {"extension": "mp4"})
            self.emit_app_preview_event(instance_id)

            return {}, 201

        elif extension in [".obj", ".pdf", ".ma", ".mb"]:
            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)
            uploaded_file.save(file_path)
            files_service.update_preview_file(instance_id,
                                              {"extension": extension[1:]})
            return {}, 201

        else:
            current_app.logger.info("Wrong file format, extension: %s",
                                    extension)
            abort(400, "Wrong file format, extension: %s" % extension)