Пример #1
0
    def get(self, playlist_id):
        playlist = playlists_service.get_playlist(playlist_id)
        user_service.check_manager_project_access(playlist["project_id"])

        project = projects_service.get_project(playlist["project_id"])
        (width, height) = preview_files_service.get_preview_file_dimensions(project)
        fps = preview_files_service.get_preview_file_fps(project)

        params = EncodingParameters(width=width, height=height, fps=fps)

        shots = [{"preview_file_id": x.get("preview_file_id")} for x in playlist["shots"]]

        if config.ENABLE_JOB_QUEUE:
            remote = config.ENABLE_JOB_QUEUE_REMOTE
            # remote worker can not access files local to the web app
            assert not remote or config.FS_BACKEND in ["s3", "swift"]

            current_user = persons_service.get_current_user()
            queue_store.job_queue.enqueue(
                playlists_service.build_playlist_job,
                args = (playlist, shots, params, current_user["email"], remote),
                job_timeout=3600,
            )
            return {"job": "running"}
        else:
            job = playlists_service.build_playlist_movie_file(
                playlist, shots, params, remote=False
            )
            return {"job": job["status"]}
Пример #2
0
def build_playlist_movie_file(playlist, app=None):
    """
    Build a movie for all files for a given playlist into the temporary folder.
    """
    job = start_build_job(playlist)
    project = projects_service.get_project(playlist["project_id"])
    tmp_file_paths = retrieve_playlist_tmp_files(playlist, only_movies=True)
    movie_file_path = get_playlist_movie_file_path(playlist, job)
    (width,
     height) = preview_files_service.get_preview_file_dimensions(project)
    fps = preview_files_service.get_preview_file_fps(project)

    result = movie_utils.build_playlist_movie(tmp_file_paths, movie_file_path,
                                              width, height, fps)
    if result["success"] == True:
        if os.path.exists(movie_file_path):
            file_store.add_movie("playlists", job["id"], movie_file_path)
        else:
            if app is not None:
                current_app.logger.error("No playlist was created")
            result["success"] = False
            result["message"] = "No playlist was created"

    elif app is not None:
        current_app.logger.error(result["message"])
    end_build_job(playlist, job, result)
    return job
Пример #3
0
    def get(self, playlist_id):
        """
        Build given playlist as mp4 movie.
        ---
        tags:
        - Playlists
        parameters:
          - in: path
            name: playlist_id
            required: True
            schema:
                type: UUID
                example: a24a6ea4-ce75-4665-a070-57453082c25
        responses:
            200:
                description: Given playlist built as mp4 movie
        """
        playlist = playlists_service.get_playlist(playlist_id)
        user_service.check_manager_project_access(playlist["project_id"])

        project = projects_service.get_project(playlist["project_id"])
        (width, height) = preview_files_service.get_preview_file_dimensions(
            project
        )
        fps = preview_files_service.get_preview_file_fps(project)
        full = self.get_bool_parameter("full")
        params = EncodingParameters(width=width, height=height, fps=fps)

        shots = [
            {"preview_file_id": x.get("preview_file_id")}
            for x in playlist["shots"]
        ]

        if config.ENABLE_JOB_QUEUE:
            remote = config.ENABLE_JOB_QUEUE_REMOTE
            # remote worker can not access files local to the web app
            assert not remote or config.FS_BACKEND in ["s3", "swift"]

            current_user = persons_service.get_current_user()
            queue_store.job_queue.enqueue(
                playlists_service.build_playlist_job,
                args=(
                    playlist,
                    shots,
                    params,
                    current_user["email"],
                    full,
                    remote,
                ),
                job_timeout=int(config.JOB_QUEUE_TIMEOUT),
            )
            return {"job": "running"}
        else:
            job = playlists_service.build_playlist_movie_file(
                playlist, shots, params, full, remote=False
            )
            return {"job": job["status"]}
Пример #4
0
 def test_get_preview_file_dimensions(self):
     self.assertFalse(_is_valid_resolution(""))
     self.assertFalse(_is_valid_resolution(None))
     self.assertTrue(_is_valid_resolution("203x121"))
     self.assertTrue(_is_valid_resolution("1920x1080"))
     self.assertTrue(_is_valid_resolution("3840x2160"))
     self.assertFalse(_is_valid_partial_resolution("3840x2160"))
     self.assertTrue(_is_valid_partial_resolution("x2160"))
     project = self.project.serialize()
     entity = self.asset.serialize()
     dimensions = get_preview_file_dimensions(project, entity)
     self.assertEqual(dimensions, (None, 1080))
     project["resolution"] = "x2160"
     dimensions = get_preview_file_dimensions(project, entity)
     self.assertEqual(dimensions, (None, 2160))
     project["resolution"] = "3840x2160"
     dimensions = get_preview_file_dimensions(project, entity)
     self.assertEqual(dimensions, (3840, 2160))
     entity["data"] = {"resolution": "800x600"}
     dimensions = get_preview_file_dimensions(project, entity)
     self.assertEqual(dimensions, (800, 600))