GAN_BWE / utils /config.py
harshil09's picture
Deploy HybridGAN Speech Bandwidth Extension App
8c6b65f verified
Raw
History Blame Contribute Delete
1.57 kB
import yaml
import os
from typing import Any, Dict
class ConfigNode:
"""Helper class to allow dot notation access to nested dictionary elements."""
def __init__(self, data: Dict[str, Any]):
for key, value in data.items():
if isinstance(value, dict):
setattr(self, key, ConfigNode(value))
elif isinstance(value, list):
setattr(self, key, [ConfigNode(item) if isinstance(item, dict) else item for item in value])
else:
setattr(self, key, value)
def to_dict(self) -> Dict[str, Any]:
"""Convert namespace back to dictionary."""
result = {}
for key, value in self.__dict__.items():
if isinstance(value, ConfigNode):
result[key] = value.to_dict()
elif isinstance(value, list):
result[key] = [item.to_dict() if isinstance(item, ConfigNode) else item for item in value]
else:
result[key] = value
return result
def __repr__(self) -> str:
return str(self.to_dict())
def load_config(config_path: str) -> ConfigNode:
"""Load configuration from a YAML file.
Args:
config_path: Path to the yaml config file.
Returns:
ConfigNode: Dot-accessible configuration tree.
"""
if not os.path.exists(config_path):
raise FileNotFoundError(f"Configuration file not found: {config_path}")
with open(config_path, "r") as f:
data = yaml.safe_load(f)
return ConfigNode(data)