test_ui2 / config.py
Fagan Valiyev
initial
d7efa84
"""Configuration loading and validation for the Audio Labeling Tool."""
import os
import logging
from pathlib import Path
import yaml
logger = logging.getLogger(__name__)
DEFAULT_CONFIG_PATH = "/app/config.yaml"
def load_config() -> dict:
"""Load application configuration from YAML file.
Config path resolution:
1. ALT_CONFIG_PATH environment variable
2. Default path: /app/config.yaml
"""
config_path = os.environ.get("ALT_CONFIG_PATH", DEFAULT_CONFIG_PATH)
path = Path(config_path)
if not path.exists():
raise FileNotFoundError(f"Configuration file not found: {config_path}")
with open(path, "r", encoding="utf-8") as f:
config = yaml.safe_load(f)
_validate_config(config)
return config
def _validate_config(config: dict) -> None:
"""Validate config structure."""
if "labelers" not in config:
raise ValueError("Config must contain 'labelers' key")
if len(config["labelers"]) != 2:
raise ValueError("Exactly 2 labelers must be configured")
for name, labeler_cfg in config["labelers"].items():
if "password" not in labeler_cfg:
raise ValueError(f"Labeler '{name}' missing 'password'")
if "audio_folder" not in labeler_cfg:
raise ValueError(f"Labeler '{name}' missing 'audio_folder'")
if "reference_json" not in labeler_cfg:
raise ValueError(f"Labeler '{name}' missing 'reference_json'")
if "output_dir" not in labeler_cfg:
raise ValueError(f"Labeler '{name}' missing 'output_dir'")
if "clean_audios_dir" not in labeler_cfg:
raise ValueError(f"Labeler '{name}' missing 'clean_audios_dir'")
if "admin" not in config:
raise ValueError("Config must contain 'admin' key")
if "username" not in config["admin"] or "password" not in config["admin"]:
raise ValueError("Admin must have 'username' and 'password'")
if "shared_output_dir" not in config:
raise ValueError("Config must contain 'shared_output_dir'")