Beispiel #1
0
 def get(self, project_id, episode_id):
     user_service.block_access_to_vendor()
     user_service.check_project_access(project_id)
     if episode_id not in ["main", "all"]:
         shots_service.get_episode(episode_id)
     return playlists_service.all_playlists_for_episode(
         project_id, episode_id, permissions.has_client_permissions())
Beispiel #2
0
 def get(self, project_id, episode_id):
     user_service.check_project_access(project_id)
     if episode_id != "main":
         shots_service.get_episode(episode_id)
     return playlists_service.all_playlists_for_episode(
         project_id, episode_id, permissions.has_client_permissions()
     )
Beispiel #3
0
 def get(self, project_id, episode_id):
     user_service.block_access_to_vendor()
     user_service.check_project_access(project_id)
     sort_by = self.get_sort_by()
     task_type_id = self.get_text_parameter("task_type_id")
     if episode_id not in ["main", "all"]:
         shots_service.get_episode(episode_id)
     return playlists_service.all_playlists_for_episode(
         project_id,
         episode_id,
         permissions.has_client_permissions(),
         sort_by=sort_by,
         task_type_id=task_type_id,
     )
Beispiel #4
0
 def get(self, episode_id):
     """
     Retrieve all tasks related to a given episode.
     """
     episode = shots_service.get_episode(episode_id)
     user_service.check_project_access(episode["project_id"])
     return tasks_service.get_tasks_for_episode(episode_id)
Beispiel #5
0
    def get(self, playlist_id):
        playlist = playlists_service.get_playlist(playlist_id)
        project = projects_service.get_project(playlist["project_id"])
        user_service.block_access_to_vendor()
        user_service.check_playlist_access(playlist)
        zip_file_path = playlists_service.build_playlist_zip_file(playlist)

        context_name = slugify.slugify(project["name"], separator="_")
        if project["production_type"] == "tvshow":
            episode_id = playlist["episode_id"]
            if episode_id is not None:
                episode = shots_service.get_episode(playlist["episode_id"])
                episode_name = episode["name"]
            elif playlist["is_for_all"]:
                episode_name = "all assets"
            else:
                episode_name = "main pack"
            context_name += "_%s" % slugify.slugify(
                episode_name, separator="_"
            )
        attachment_filename = "%s_%s.zip" % (
            context_name,
            slugify.slugify(playlist["name"], separator="_"),
        )

        return flask_send_file(
            zip_file_path,
            conditional=True,
            mimetype="application/zip",
            as_attachment=True,
            attachment_filename=attachment_filename,
        )
Beispiel #6
0
    def get(self, playlist_id, build_job_id):
        playlist = playlists_service.get_playlist(playlist_id)
        project = projects_service.get_project(playlist["project_id"])
        build_job = playlists_service.get_build_job(build_job_id)
        user_service.check_manager_project_access(playlist["project_id"])

        if build_job["status"] != "succeeded":
            return {"error": True, "message": "Build is not finished"}, 400
        else:
            movie_file_path = fs.get_file_path(
                config,
                file_store.get_local_movie_path,
                file_store.open_movie,
                "playlists",
                build_job_id,
                "mp4",
            )
            context_name = slugify.slugify(project["name"], separator="_")
            if project["production_type"] == "tvshow":
                episode = shots_service.get_episode(playlist["episode_id"])
                context_name += "_%s" % slugify.slugify(episode["name"],
                                                        separator="_")
            attachment_filename = "%s_%s_%s.mp4" % (
                slugify.slugify(build_job["created_at"], separator="").replace(
                    "t", "_"),
                context_name,
                slugify.slugify(playlist["name"], separator="_"),
            )
            return flask_send_file(
                movie_file_path,
                conditional=True,
                mimetype="video/mp4",
                as_attachment=True,
                attachment_filename=attachment_filename,
            )
Beispiel #7
0
    def get(self, task_id):
        task = tasks_service.get_task(task_id)
        if not permissions.has_manager_permissions():
            user_service.check_has_task_related(task["project_id"])

        result = task
        task_type = tasks_service.get_task_type(task["task_type_id"])
        result["task_type"] = task_type
        assigner = persons_service.get_person(task["assigner_id"])
        result["assigner"] = assigner
        project = projects_service.get_project(task["project_id"])
        result["project"] = project
        task_status = tasks_service.get_task_status(task["task_status_id"])
        result["task_status"] = task_status
        entity = tasks_service.get_entity(task["entity_id"])
        result["entity"] = entity
        if entity["parent_id"] is not None:
            sequence = shots_service.get_sequence(entity["parent_id"])
            result["sequence"] = sequence
            if sequence["parent_id"] is not None:
                episode = shots_service.get_episode(sequence["parent_id"])
                result["episode"] = episode
        entity_type = tasks_service.get_entity_type(entity["entity_type_id"])
        result["entity_type"] = entity_type
        assignees = []
        for assignee_id in task["assignees"]:
            assignees.append(persons_service.get_person(assignee_id))
        result["persons"] = assignees
        result["type"] = "Task"

        return result, 200
Beispiel #8
0
def check_criterion_access(criterions):
    project_id = None
    if "project_id" in criterions:
        project_id = criterions.get("project_id", None)
    elif "episode_id" in criterions:
        episode_id = criterions.get("episode_id", None)
        project_id = shots_service.get_episode(episode_id)["project_id"]
    return user_service.check_project_access(project_id)
Beispiel #9
0
 def delete(self, episode_id):
     """
     Retrieve given episode.
     """
     force = self.get_force()
     episode = shots_service.get_episode(episode_id)
     user_service.check_manager_project_access(episode["project_id"])
     deletion_service.remove_episode(episode_id, force=force)
     return "", 204
Beispiel #10
0
 def get(self, episode_id):
     """
     Retrieve all shots related to a given episode.
     """
     episode = shots_service.get_episode(episode_id)
     user_service.check_project_access(episode["project_id"])
     user_service.check_entity_access(episode["id"])
     relations = self.get_relations()
     return shots_service.get_shots_for_episode(episode_id,
                                                relations=relations)
Beispiel #11
0
 def get(self, episode_id):
     """
     Retrieve all sequence entries for a given episode.
     Filters can be specified in the query string.
     """
     episode = shots_service.get_episode(episode_id)
     user_service.check_project_access(episode["project_id"])
     criterions = query.get_query_criterions_from_request(request)
     criterions["parent_id"] = episode_id
     return shots_service.get_sequences(criterions)
Beispiel #12
0
 def get(self, episode_id):
     """
     Retrieve all tasks related to a given episode.
     """
     episode = shots_service.get_episode(episode_id)
     user_service.check_project_access(episode["project_id"])
     user_service.check_entity_access(episode["id"])
     if permissions.has_vendor_permissions():
         raise permissions.PermissionDenied
     relations = self.get_relations()
     return tasks_service.get_shot_tasks_for_episode(episode_id,
                                                     relations=relations)
Beispiel #13
0
    def get(self, episode_id):
        """
        Retrieve all sequence entries for a given episode.
        Filters can be specified in the query string.
        """
        episode = shots_service.get_episode(episode_id)
        if not permissions.has_manager_permissions():
            user_service.check_has_task_related(episode["project_id"])

        criterions = query.get_query_criterions_from_request(request)
        criterions["parent_id"] = episode_id
        return shots_service.get_sequences(criterions)
Beispiel #14
0
 def get(self):
     """
     Retrieve all sequence entries. Filters can be specified in the query
     string.
     """
     criterions = query.get_query_criterions_from_request(request)
     if "episode_id" in criterions:
         episode = shots_service.get_episode(criterions["episode_id"])
         criterions["project_id"] = episode["project_id"]
         criterions["parent_id"] = episode["id"]
         del criterions["episode_id"]
     user_service.check_project_access(criterions.get("project_id", None))
     return shots_service.get_sequences(criterions)
Beispiel #15
0
 def get(self, episode_id):
     """
     Retrieve all sequence entries for a given episode.
     Filters can be specified in the query string.
     """
     episode = shots_service.get_episode(episode_id)
     user_service.check_project_access(episode["project_id"])
     criterions = query.get_query_criterions_from_request(request)
     criterions["parent_id"] = episode_id
     if permissions.has_vendor_permissions():
         return shots_service.get_sequences_for_episode(episode_id,
                                                        only_assigned=True)
     else:
         return shots_service.get_sequences(criterions)
Beispiel #16
0
 def get(self, project_id, episode_id):
     """
     Retrieve all playlists related to given episode. 
     ---
     tags:
     - Playlists
     description: The full list is returned because the number of playlists in an episode is not that big.
     parameters:
       - in: path
         name: project_id
         required: True
         schema:
             type: UUID
             example: a24a6ea4-ce75-4665-a070-57453082c25
       - in: path
         name: episode_id
         required: True
         schema:
             type: UUID
             example: a24a6ea4-ce75-4665-a070-57453082c25
     responses:
         200:
             description: All playlists related to given episode
     """
     user_service.block_access_to_vendor()
     user_service.check_project_access(project_id)
     sort_by = self.get_sort_by()
     task_type_id = self.get_text_parameter("task_type_id")
     if episode_id not in ["main", "all"]:
         shots_service.get_episode(episode_id)
     return playlists_service.all_playlists_for_episode(
         project_id,
         episode_id,
         permissions.has_client_permissions(),
         sort_by=sort_by,
         task_type_id=task_type_id,
     )
Beispiel #17
0
    def get(self, playlist_id):
        """
        Download given playlist as zip.
        ---
        tags:
        - Playlists
        parameters:
          - in: path
            name: playlist_id
            required: True
            schema:
                type: UUID
                example: a24a6ea4-ce75-4665-a070-57453082c25
        responses:
            200:
                description: Given playlist downloaded as zip
        """
        playlist = playlists_service.get_playlist(playlist_id)
        project = projects_service.get_project(playlist["project_id"])
        user_service.block_access_to_vendor()
        user_service.check_playlist_access(playlist)
        zip_file_path = playlists_service.build_playlist_zip_file(playlist)

        context_name = slugify.slugify(project["name"], separator="_")
        if project["production_type"] == "tvshow":
            episode_id = playlist["episode_id"]
            if episode_id is not None:
                episode = shots_service.get_episode(playlist["episode_id"])
                episode_name = episode["name"]
            elif playlist["is_for_all"]:
                episode_name = "all assets"
            else:
                episode_name = "main pack"
            context_name += "_%s" % slugify.slugify(
                episode_name, separator="_"
            )
        attachment_filename = "%s_%s.zip" % (
            context_name,
            slugify.slugify(playlist["name"], separator="_"),
        )

        return flask_send_file(
            zip_file_path,
            conditional=True,
            mimetype="application/zip",
            as_attachment=True,
            attachment_filename=attachment_filename,
        )
Beispiel #18
0
def get_full_task(task_id):
    task = get_task_with_relations(task_id)
    task_type = get_task_type(task["task_type_id"])
    project = projects_service.get_project(task["project_id"])
    task_status = get_task_status(task["task_status_id"])
    entity = entities_service.get_entity(task["entity_id"])
    entity_type = entities_service.get_entity_type(entity["entity_type_id"])
    assignees = [
        persons_service.get_person(assignee_id)
        for assignee_id in task["assignees"]
    ]

    task.update({
        "entity": entity,
        "task_type": task_type,
        "task_status": task_status,
        "project": project,
        "entity_type": entity_type,
        "persons": assignees,
        "type": "Task",
    })

    try:
        assigner = persons_service.get_person(task["assigner_id"])
        task["assigner"] = assigner
    except PersonNotFoundException:
        pass

    if entity["parent_id"] is not None:
        if entity_type["name"] == "Edit":
            episode_id = entity["parent_id"]
        else:
            sequence = shots_service.get_sequence(entity["parent_id"])
            task["sequence"] = sequence
            episode_id = sequence["parent_id"]
        if episode_id is not None:
            episode = shots_service.get_episode(episode_id)
            task["episode"] = episode

    return task
Beispiel #19
0
    def get(self, task_id):
        task = tasks_service.get_task(task_id)
        if not permissions.has_manager_permissions():
            user_service.check_has_task_related(task["project_id"])

        task_type = tasks_service.get_task_type(task["task_type_id"])
        project = projects_service.get_project(task["project_id"])
        task_status = tasks_service.get_task_status(task["task_status_id"])
        entity = entities_service.get_entity(task["entity_id"])
        entity_type = entities_service.get_entity_type(
            entity["entity_type_id"])
        assignees = []
        for assignee_id in task["assignees"]:
            assignees.append(persons_service.get_person(assignee_id))

        task.update({
            "entity": entity,
            "task_type": task_type,
            "task_status": task_status,
            "project": project,
            "entity_type": entity_type,
            "persons": assignees,
            "type": "Task"
        })

        try:
            assigner = persons_service.get_person(task["assigner_id"])
            task["assigner"] = assigner
        except PersonNotFoundException:
            pass

        if entity["parent_id"] is not None:
            sequence = shots_service.get_sequence(entity["parent_id"])
            task["sequence"] = sequence
            if sequence["parent_id"] is not None:
                episode = shots_service.get_episode(sequence["parent_id"])
                task["episode"] = episode

        return task, 200
Beispiel #20
0
    def get(self, playlist_id):
        playlist = playlists_service.get_playlist(playlist_id)
        project = projects_service.get_project(playlist["project_id"])
        user_service.check_playlist_access(playlist)
        zip_file_path = playlists_service.build_playlist_zip_file(playlist)

        context_name = slugify.slugify(project["name"], separator="_")
        if project["production_type"] == "tvshow":
            episode = shots_service.get_episode(playlist["episode_id"])
            context_name += "_%s" % slugify.slugify(episode["name"],
                                                    separator="_")
        attachment_filename = "%s_%s.zip" % (
            context_name,
            slugify.slugify(playlist["name"], separator="_"),
        )

        return flask_send_file(
            zip_file_path,
            conditional=True,
            mimetype="application/zip",
            as_attachment=True,
            attachment_filename=attachment_filename,
        )
Beispiel #21
0
 def test_get_episode(self):
     self.assertEquals(
         str(self.episode.id),
         shots_service.get_episode(self.episode.id)["id"]
     )
Beispiel #22
0
 def get(self, project_id, episode_id):
     user_service.check_project_access(project_id)
     shots_service.get_episode(episode_id)
     return playlists_service.all_playlists_for_episode(episode_id)
Beispiel #23
0
 def get_episode(self, playlist):
     episode = None
     if playlist["episode_id"] is not None:
         episode = shots_service.get_episode(playlist["episode_id"])
     return episode
Beispiel #24
0
    def get(self, playlist_id, build_job_id):
        """
        Download given playlist as mp4 after given build job is finished.
        ---
        tags:
        - Playlists
        parameters:
          - in: path
            name: playlist_id
            required: True
            schema:
                type: UUID
                example: a24a6ea4-ce75-4665-a070-57453082c25
          - in: path
            name: build_job_id
            required: True
            schema:
                type: UUID
                example: a24a6ea4-ce75-4665-a070-57453082c25
        responses:
            200:
                description: Given playlist downloaded as mp4
            400: 
                description: Build not finished
        """
        playlist = playlists_service.get_playlist(playlist_id)
        project = projects_service.get_project(playlist["project_id"])
        build_job = playlists_service.get_build_job(build_job_id)
        user_service.check_project_access(playlist["project_id"])

        if build_job["status"] != "succeeded":
            return {"error": True, "message": "Build is not finished"}, 400
        else:
            movie_file_path = fs.get_file_path_and_file(
                config,
                file_store.get_local_movie_path,
                file_store.open_movie,
                "playlists",
                build_job_id,
                "mp4",
            )
            context_name = slugify.slugify(project["name"], separator="_")
            if project["production_type"] == "tvshow":
                episode_id = playlist["episode_id"]
                if episode_id is not None:
                    episode = shots_service.get_episode(playlist["episode_id"])
                    episode_name = episode["name"]
                elif playlist["is_for_all"]:
                    episode_name = "all assets"
                else:
                    episode_name = "main pack"
                context_name += "_%s" % slugify.slugify(
                    episode_name, separator="_"
                )
            attachment_filename = "%s_%s_%s.mp4" % (
                slugify.slugify(build_job["created_at"], separator="").replace(
                    "t", "_"
                ),
                context_name,
                slugify.slugify(playlist["name"], separator="_"),
            )
            return flask_send_file(
                movie_file_path,
                conditional=True,
                mimetype="video/mp4",
                as_attachment=True,
                attachment_filename=attachment_filename,
            )
Beispiel #25
0
 def test_get_episode_from_edit(self):
     episode = shots_service.get_episode(self.edit.parent_id)
     self.assertEqual(episode["name"], "E01")