def delete(self, project_id, status_automation_id): """ Remove a status automation from a production. --- tags: - Projects parameters: - in: path name: project_id required: true schema: type: UUID example: 5dc235ec-125e-4ba5-b1db-604d4babc315 - in: path name: status_automation_id required: true schema: type: UUID example: 5dc235ec-125e-4ba5-b1db-604d4babc315 responses: 204: description: Status automation removed from production """ user_service.check_manager_project_access(project_id) projects_service.remove_status_automation_setting( project_id, status_automation_id) return "", 204
def post(self, project_id): args = self.get_args([("task_type_id", "", True), ("priority", None, False)]) user_service.check_manager_project_access(project_id) project = projects_service.add_task_type_setting( project_id, args["task_type_id"], args["priority"]) return project, 201
def delete(self, project_id, person_id): """ Remove people listed in a production team. --- tags: - Projects parameters: - in: path name: project_id required: true schema: type: UUID example: 5dc235ec-125e-4ba5-b1db-604d4babc315 - in: path name: person_id required: true schema: type: UUID example: 5dc235ec-125e-4ba5-b1db-604d4babc315 responses: 204: description: Person removed from production team """ user_service.check_manager_project_access(project_id) projects_service.remove_team_member(project_id, person_id) return "", 204
def put(self, project_id, entity_id): """ Resource to allow the modification of assets linked to an entity. """ casting = request.json user_service.check_manager_project_access(project_id) return breakdown_service.update_casting(entity_id, casting)
def delete(self, asset_id): """ Delete given asset. --- tags: - Assets parameters: - in: path name: asset_id schema: type: UUID example: a24a6ea4-ce75-4665-a070-57453082c25 required: True responses: 204: description: Given asset deleted """ parser = reqparse.RequestParser() parser.add_argument("force", default=False, type=bool) args = parser.parse_args() force = args["force"] asset = assets_service.get_full_asset(asset_id) user_service.check_manager_project_access(asset["project_id"]) assets_service.remove_asset(asset_id, force=force) return "", 204
def post(self, project_id, asset_type_id): (name, description, data, source_id) = self.get_arguments() user_service.check_manager_project_access(project_id) asset = assets_service.create_asset(project_id, asset_type_id, name, description, data, source_id) return asset, 201
def put(self, person_id): (task_ids) = self.get_arguments() if len(task_ids) > 0: task = tasks_service.get_task(task_ids[0]) user_service.check_manager_project_access(task["project_id"]) tasks = [] for task_id in task_ids: try: task = self.assign_task(task_id, person_id) author = persons_service.get_current_user() notifications_service.create_assignation_notification( task_id, person_id, author["id"] ) tasks.append(task) except TaskNotFoundException: pass except PersonNotFoundException: return {"error": "Assignee doesn't exist in database."}, 400 if len(tasks) > 0: projects_service.add_team_member(tasks[0]["project_id"], person_id) return tasks
def post(self, project_id): args = self.get_args([("person_id", "", True)]) user_service.check_manager_project_access(project_id) return ( projects_service.add_team_member(project_id, args["person_id"]), 201, )
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, )
def post(self, project_id): user_service.check_manager_project_access(project_id) task_ids = request.json task_ids = deletion_service.remove_tasks(project_id, task_ids) for task_id in task_ids: tasks_service.clear_task_cache(task_id) return task_ids, 200
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"]}
def post(self, project_id): """ Create an episode for given project. """ name = self.get_arguments() projects_service.get_project(project_id) user_service.check_manager_project_access(project_id) return shots_service.create_episode(project_id, name), 201
def get(self, project_id): """ Retrieve all entity links related to given project. It's mainly used for synchronisation purpose. """ user_service.check_manager_project_access(project_id) projects_service.get_project(project_id) return entities_service.get_entity_links_for_project(project_id)
def post(self, project_id): args = self.get_args([("asset_type_id", "", True)]) user_service.check_manager_project_access(project_id) project = projects_service.add_asset_type_setting( project_id, args["asset_type_id"] ) return project, 201
def put(self, asset_id): """ Resource to allow the modification of assets linked to a asset. """ casting = request.json asset = assets_service.get_asset(asset_id) user_service.check_manager_project_access(asset["project_id"]) return breakdown_service.update_casting(asset_id, casting)
def delete(self, scene_id): """ Delete given scene. """ scene = shots_service.get_scene(scene_id) user_service.check_manager_project_access(scene["project_id"]) shots_service.remove_scene(scene_id) return "", 204
def delete(self, edit_id): """ Delete given edit. """ force = self.get_force() edit = edits_service.get_edit(edit_id) user_service.check_manager_project_access(edit["project_id"]) edits_service.remove_edit(edit_id, force=force) return "", 204
def put(self, preview_file_id): parser = reqparse.RequestParser() parser.add_argument("position", default=0, type=int) args = parser.parse_args() preview_file = files_service.get_preview_file(preview_file_id) task = tasks_service.get_task(preview_file["task_id"]) user_service.check_manager_project_access(task["project_id"]) return tasks_service.update_preview_file_position( preview_file_id, args["position"])
def put(self, preview_file_id): annotations = request.json["annotations"] preview_file = files_service.get_preview_file(preview_file_id) task = tasks_service.get_task(preview_file["task_id"]) user_service.check_manager_project_access(task["project_id"]) user_service.check_entity_access(task["entity_id"]) return preview_files_service.update_preview_file_annotations( task["project_id"], preview_file_id, annotations )
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
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"]}
def delete(self, sequence_id): """ Delete given sequence. """ force = self.get_force() sequence = shots_service.get_sequence(sequence_id) user_service.check_manager_project_access(sequence["project_id"]) shots_service.remove_sequence(sequence_id, force=force) return "", 204
def post(self, project_id): """ Create a shot for given project. """ (sequence_id, name) = self.get_arguments() projects_service.get_project(project_id) user_service.check_manager_project_access(project_id) scene = shots_service.create_scene(project_id, sequence_id, name) return scene, 201
def post(self, task_type_id): criterions = query.get_query_criterions_from_request(request) if "project_id" not in criterions: return {"error": True, "message": "Project ID is missing"}, 400 user_service.check_manager_project_access(criterions["project_id"]) shots = shots_service.get_shots(criterions) task_type = tasks_service.get_task_type(task_type_id) tasks = [tasks_service.create_task(task_type, shot) for shot in shots] return tasks, 201
def get(self, playlist_id): playlist = playlists_service.get_playlist(playlist_id) user_service.check_manager_project_access(playlist["project_id"]) if config.ENABLE_JOB_QUEUE: current_user = persons_service.get_current_user() build_playlist_task.delay(playlist, current_user["email"]) return {"job": "running"} else: playlists_service.build_playlist_movie_file(playlist) return {"job": "succeeded"}
def delete(self, asset_id): parser = reqparse.RequestParser() parser.add_argument("force", default=False, type=bool) args = parser.parse_args() force = args["force"] asset = assets_service.get_full_asset(asset_id) user_service.check_manager_project_access(asset["project_id"]) deleted_asset = assets_service.remove_asset(asset_id, force=force) return '', 204
def post(self, project_id): """ Create a shot for given project. """ (sequence_id, name, data, nb_frames) = self.get_arguments() projects_service.get_project(project_id) user_service.check_manager_project_access(project_id) shot = shots_service.create_shot( project_id, sequence_id, name, data=data, nb_frames=nb_frames ) return shot, 201
def delete(self, instance_id): """ Delete a comment corresponding at given ID. """ comment = tasks_service.get_comment(instance_id) task = tasks_service.get_task(comment["object_id"]) user_service.check_manager_project_access(task["project_id"]) self.pre_delete(comment) deletion_service.remove_comment(comment["id"]) tasks_service.reset_task_data(comment["object_id"]) tasks_service.clear_comment_cache(comment["id"]) self.post_delete(comment) return "", 204
def put(self): (task_ids) = self.get_arguments() if len(task_ids) > 0: task = tasks_service.get_task(task_ids[0]) user_service.check_manager_project_access(task["project_id"]) for task_id in task_ids: try: tasks_service.clear_assignation(task_id) except TaskNotFoundException: pass return task_ids
def get(self, playlist_id): playlist = playlists_service.get_playlist(playlist_id) user_service.check_manager_project_access(playlist["project_id"]) if config.ENABLE_JOB_QUEUE: current_user = persons_service.get_current_user() queue_store.job_queue.enqueue( playlists_service.build_playlist_job, args=(playlist, current_user["email"]), job_timeout=3600, ) return {"job": "running"} else: playlists_service.build_playlist_movie_file(playlist) return {"job": "succeeded"}