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, )
def delete(self, playlist_id, build_job_id): """ Remove given build job related to given playlist. --- 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: 204: description: Given build job removed """ user_service.block_access_to_vendor() playlist = playlists_service.get_playlist(playlist_id) user_service.check_playlist_access(playlist) playlists_service.remove_build_job(playlist, build_job_id) return "", 204
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 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 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 get(self, playlist_id): playlist = playlists_service.get_playlist(playlist_id) user_service.check_project_access(playlist["project_id"]) zip_file_path = playlists_service.build_playlist_zip_file(playlist) attachment_filename = zip_file_path.split(os.sep)[-1] return flask_send_file(zip_file_path, conditional=True, mimetype="application/zip", as_attachment=True, attachment_filename=attachment_filename)
def get(self, playlist_id): playlist = playlists_service.get_playlist(playlist_id) user_service.check_project_access(playlist["project_id"]) movie_file_path = playlists_service.get_playlist_movie_file_path( playlist) attachment_filename = movie_file_path.split(os.sep)[-1] return flask_send_file(movie_file_path, conditional=True, mimetype="video/mp4", as_attachment=True, attachment_filename=attachment_filename)
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 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"}
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, )
def get(self, playlist_id): playlist = playlists_service.get_playlist(playlist_id) user_service.check_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, playlist, current_user["email"]) return {"job": "running"} else: movie_file_path = playlists_service.build_playlist_movie_file( playlist) attachment_filename = movie_file_path.split(os.sep)[-1] return flask_send_file(movie_file_path, conditional=True, mimetype="video/mp4", as_attachment=True, attachment_filename=attachment_filename)
def get(self, playlist_id): playlist = playlists_service.get_playlist(playlist_id) project = projects_service.get_project(playlist["project_id"]) self.check_permissions(project["id"]) self.task_type_map = tasks_service.get_task_type_map() self.task_status_map = tasks_service.get_task_status_map() task_ids = [ shot["preview_file_task_id"] for shot in playlist["shots"] ] self.task_comment_map = tasks_service.get_last_comment_map(task_ids) episode = self.get_episode(playlist) csv_content = [] headers = self.build_headers(playlist, project, episode) csv_content += headers for shot in playlist["shots"]: csv_content.append(self.build_row(shot)) file_name = "%s playlist %s" % (project["name"], playlist["name"]) return csv_utils.build_csv_response(csv_content, slugify(file_name))
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, )
def delete(self, playlist_id, build_job_id): playlist = playlists_service.get_playlist(playlist_id) user_service.check_project_access(playlist["project_id"]) playlists_service.remove_build_job(playlist, build_job_id) return "", 204
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, )
def get(self, playlist_id, build_job_id): user_service.block_access_to_vendor() playlist = playlists_service.get_playlist(playlist_id) user_service.check_playlist_access(playlist) return playlists_service.get_build_job(build_job_id)
def delete(self, playlist_id, build_job_id): user_service.block_access_to_vendor() playlist = playlists_service.get_playlist(playlist_id) user_service.check_playlist_access(playlist) playlists_service.remove_build_job(playlist, build_job_id) return "", 204
def get(self, playlist_id, build_job_id): playlist = playlists_service.get_playlist(playlist_id) user_service.check_project_access(playlist["project_id"]) return playlists_service.get_build_job(build_job_id)