Esempio n. 1
0
 def get(self, project_id):
     """
     Retrieve all playlists related to given project. 
     ---
     tags:
     - Playlists
     description: Result is paginated and can be sorted.
     parameters:
       - in: path
         name: project_id
         required: True
         schema:
             type: UUID
             example: a24a6ea4-ce75-4665-a070-57453082c25
     responses:
         200:
             description: All playlists related to given project
     """
     user_service.block_access_to_vendor()
     user_service.check_project_access(project_id)
     page = self.get_page()
     sort_by = self.get_sort_by()
     task_type_id = self.get_text_parameter("task_type_id")
     return playlists_service.all_playlists_for_project(
         project_id,
         for_client=permissions.has_client_permissions(),
         page=page,
         sort_by=sort_by,
         task_type_id=task_type_id,
     )
Esempio n. 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()
     )
Esempio n. 3
0
    def put(self, preview_file_id):
        preview_file = files_service.get_preview_file(preview_file_id)
        task = tasks_service.get_task(preview_file["task_id"])
        user_service.check_project_access(task["project_id"])
        is_manager = permissions.has_manager_permissions()
        is_client = permissions.has_client_permissions()
        is_supervisor_allowed = False
        if permissions.has_supervisor_permissions():
            user_departments = persons_service.get_current_user(
                relations=True)["departments"]
            if (user_departments == [] or tasks_service.get_task_type(
                    task["task_type_id"])["department_id"]
                    in user_departments):
                is_supervisor_allowed = True

        if not (is_manager or is_client or is_supervisor_allowed):
            raise permissions.PermissionDenied

        additions = request.json.get("additions", [])
        updates = request.json.get("updates", [])
        deletions = request.json.get("deletions", [])
        user = persons_service.get_current_user()
        return preview_files_service.update_preview_file_annotations(
            user["id"],
            task["project_id"],
            preview_file_id,
            additions=additions,
            updates=updates,
            deletions=deletions,
        )
Esempio n. 4
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())
Esempio n. 5
0
 def get(self, task_id):
     task = tasks_service.get_task(task_id)
     user_service.check_project_access(task["project_id"])
     user_service.check_entity_access(task["entity_id"])
     is_client = permissions.has_client_permissions()
     is_manager = permissions.has_manager_permissions()
     return tasks_service.get_comments(task_id, is_client, is_manager)
Esempio n. 6
0
 def get(self, person_id):
     """
     Return task assigned to given user of which status has is_done flag sets to true.      
     ---
     tags:
     - Tasks
     description: It return only tasks related to open projects. 
     parameters:
       - in: path
         name: person_id
         required: True
         schema:
             type: UUID
             example: a24a6ea4-ce75-4665-a070-57453082c25
     responses:
         200:
             description: Tasks assigned to user that are done
     """
     if not permissions.has_admin_permissions():
         projects = user_service.related_projects()
     else:
         projects = projects_service.open_projects()
     if permissions.has_vendor_permissions():
         person = persons_service.get(person_id)
         if person["role"] == "vendor":
             return []
     elif permissions.has_client_permissions():
         return []
     return tasks_service.get_person_done_tasks(person_id, projects)
Esempio n. 7
0
 def get(self, task_id):
     """
     Return comments linked to given task.
     ---
     tags:
     - Tasks
     parameters:
       - in: path
         name: task_id
         required: True
         schema:
             type: UUID
             example: a24a6ea4-ce75-4665-a070-57453082c25
     responses:
         200:
             description: Comments linked to given task
     """
     task = tasks_service.get_task(task_id)
     user_service.check_project_access(task["project_id"])
     user_service.check_entity_access(task["entity_id"])
     is_client = permissions.has_client_permissions()
     is_manager = permissions.has_manager_permissions()
     is_supervisor = permissions.has_supervisor_permissions()
     return tasks_service.get_comments(task_id, is_client, is_manager
                                       or is_supervisor)
Esempio n. 8
0
def check_playlist_access(playlist):
    check_project_access(playlist["project_id"])
    is_manager = permissions.has_manager_permissions()
    is_client = permissions.has_client_permissions()
    has_client_access = is_client and playlist["for_client"]
    if not is_manager and not has_client_access:
        raise permissions.PermissionDenied
    return True
Esempio n. 9
0
 def get(self):
     name = request.args.get("name", None)
     try:
         permissions.check_admin_permissions()
         for_client = permissions.has_client_permissions()
         return projects_service.open_projects(name=name,
                                               for_client=for_client)
     except permissions.PermissionDenied:
         return user_service.get_open_projects(name=name)
Esempio n. 10
0
 def get(self, project_id):
     user_service.block_access_to_vendor()
     user_service.check_project_access(project_id)
     page = self.get_page()
     sort_by = self.get_sort_by()
     return playlists_service.all_playlists_for_project(
         project_id,
         for_client=permissions.has_client_permissions(),
         page=page,
         sort_by=sort_by,
     )
Esempio n. 11
0
    def get(self, file_id):
        output_file = files_service.get_output_file(file_id)
        if output_file.get("entity_id"):
            instance = entities_service.get_entity(output_file["entity_id"])
        elif output_file.get("asset_instance_id"):
            instance = assets_service.get_asset_instance(
                output_file["asset_instance_id"])
        user_service.check_project_access(instance["project_id"])

        is_client = permissions.has_client_permissions()
        is_manager = permissions.has_manager_permissions()
        return files_service.get_comments(file_id, is_client, is_manager)
Esempio n. 12
0
def get_open_projects(name=None, for_client=False):
    """
    Get all open projects for which current user has a task assigned.
    """
    query = (Project.query.join(ProjectStatus).filter(
        build_team_filter()).filter(build_open_project_filter()))

    if name is not None:
        query = query.filter(Project.name == name)

    for_client = permissions.has_client_permissions()

    return projects_service.get_projects_with_extra_data(query, for_client)
Esempio n. 13
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,
     )
Esempio n. 14
0
 def clean_get_result(self, result):
     if permissions.has_client_permissions():
         person = persons_service.get_person(result["person_id"])
         if person["role"] != "client":
             result["text"] = ""
             result["attachment_files"] = []
             result["checklist"] = []
     attachment_files = []
     if ("attachment_files" in result
             and len(result["attachment_files"]) > 0):
         for attachment_file_id in result["attachment_files"]:
             attachment_file = AttachmentFile.get(attachment_file_id)
             attachment_files.append(attachment_file.present())
         result["attachment_files"] = attachment_files
     return result
Esempio n. 15
0
 def get(self):
     """
     Return the list of projects currently running.
     ---
     tags:
       - Projects
     description: Most of the time, past projects are not needed.
     responses:
         200:
           description: All running projects
     """
     name = request.args.get("name", None)
     try:
         permissions.check_admin_permissions()
         for_client = permissions.has_client_permissions()
         return projects_service.open_projects(name=name,
                                               for_client=for_client)
     except permissions.PermissionDenied:
         return user_service.get_open_projects(name=name)
Esempio n. 16
0
    def put(self, preview_file_id):
        preview_file = files_service.get_preview_file(preview_file_id)
        task = tasks_service.get_task(preview_file["task_id"])
        user_service.check_project_access(task["project_id"])
        is_manager = permissions.has_manager_permissions()
        is_client = permissions.has_client_permissions()
        if not (is_manager or is_client):
            raise permissions.PermissionDenied

        additions = request.json.get("additions", [])
        updates = request.json.get("updates", [])
        deletions = request.json.get("deletions", [])
        user = persons_service.get_current_user()
        return preview_files_service.update_preview_file_annotations(
            user["id"],
            task["project_id"],
            preview_file_id,
            additions=additions,
            updates=updates,
            deletions=deletions)
Esempio n. 17
0
 def get(self, project_id):
     """
     Get all metadata descriptors
     ---
     description: It serves to describe extra fields listed in the data attribute of entities.
     tags:
       - Projects
     parameters:
       - in: path
         name: project_id
         required: true
         schema:
           type: UUID
           example: 5dc235ec-125e-4ba5-b1db-604d4babc315
     responses:
         200:
           description: All metadata descriptors
     """
     user_service.check_manager_project_access(project_id)
     for_client = permissions.has_client_permissions()
     return projects_service.get_metadata_descriptors(
         project_id, for_client)
Esempio n. 18
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,
     )
Esempio n. 19
0
def check_comment_access(comment_id):
    """
    Return true if current user can have access to a comment.
    """
    if permissions.has_admin_permissions():
        return True
    else:
        comment = tasks_service.get_comment(comment_id)
        person_id = comment["person_id"]
        task_id = comment["object_id"]
        task = tasks_service.get_task(task_id)
        if task is None:
            tasks_service.clear_task_cache(task_id)
            task = tasks_service.get_task(task_id)
        check_project_access(task["project_id"])
        check_entity_access(task["entity_id"])

        if (
            permissions.has_supervisor_permissions()
            or permissions.has_manager_permissions()
        ):
            return True
        elif permissions.has_client_permissions():
            current_user = persons_service.get_current_user()
            project = projects_service.get_project(task["project_id"])
            if project.get("is_clients_isolated", False):
                if not comment["person_id"] == current_user["id"]:
                    raise permissions.PermissionDenied
            if persons_service.get_person(person_id)["role"] == "client":
                return True
            else:
                raise permissions.PermissionDenied
        elif persons_service.get_person(person_id)["role"] == "client":
            raise permissions.PermissionDenied

        return True
Esempio n. 20
0
 def get(self, project_id):
     user_service.block_access_to_vendor()
     user_service.check_project_access(project_id)
     return playlists_service.all_playlists_for_project(
         project_id, permissions.has_client_permissions()
     )
Esempio n. 21
0
 def get(self, project_id):
     user_service.check_manager_project_access(project_id)
     for_client = permissions.has_client_permissions()
     return projects_service.get_metadata_descriptors(project_id, for_client)