podcast-mindmap/scripts/config.py

43 lines
1.4 KiB
Python
Raw Normal View History

"""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