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, )
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() )
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, )
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())
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)
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)
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)
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
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)
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, )
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)
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)
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, )
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
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)
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)
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)
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, )
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
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() )
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)