"""Shared configuration loader for podcast-mindmap pipeline.""" import os import yaml def load_project(project_dir): """Load project.yaml from a project directory.""" config_path = os.path.join(project_dir, "project.yaml") if not os.path.exists(config_path): raise FileNotFoundError(f"No project.yaml found in {project_dir}") with open(config_path, "r", encoding="utf-8") as f: config = yaml.safe_load(f) # Build derived mappings config["_project_dir"] = os.path.abspath(project_dir) config["_audio_dir"] = os.path.join(project_dir, "audio") config["_transcripts_dir"] = os.path.join(project_dir, "transcripts") config["_data_dir"] = os.path.join(project_dir, "data") config["_webapp_dir"] = os.path.join(project_dir, "webapp") # Episode lookup config["_episodes_by_id"] = {ep["id"]: ep for ep in config["episodes"]} # Audio file mapping: S1E1 → S1E1-Thema.m4a config["_audio_files"] = {} config["_srt_keys"] = {} for ep in config["episodes"]: slug = ep["id"] + "-" + ep["title"].replace(" ", "-").replace("ö", "oe").replace("ü", "ue").replace("ä", "ae") config["_audio_files"][ep["id"]] = slug + ".m4a" config["_srt_keys"][ep["id"]] = slug return config def get_staffel(config, staffel_id): """Get staffel metadata by ID.""" for s in config["staffeln"]: if s["id"] == staffel_id: return s return None