mirror of
https://github.com/OpenBMB/ChatDev.git
synced 2026-04-25 11:18:06 +00:00
34 lines
1.3 KiB
Python
Executable File
34 lines
1.3 KiB
Python
Executable File
"""Helpers for loading validated configuration objects."""
|
|
|
|
from pathlib import Path
|
|
from typing import Any, Mapping
|
|
|
|
import yaml
|
|
|
|
from entity.configs import DesignConfig, ConfigError
|
|
from utils.env_loader import load_dotenv_file, build_env_var_map
|
|
from utils.vars_resolver import resolve_design_placeholders
|
|
|
|
|
|
def prepare_design_mapping(data: Mapping[str, Any], *, source: str | None = None) -> Mapping[str, Any]:
|
|
load_dotenv_file()
|
|
env_lookup = build_env_var_map()
|
|
prepared = dict(data)
|
|
resolve_design_placeholders(prepared, env_lookup=env_lookup, path=source or "root")
|
|
return prepared
|
|
|
|
|
|
def load_design_from_mapping(data: Mapping[str, Any], *, source: str | None = None) -> DesignConfig:
|
|
"""Parse a raw dictionary into a typed :class:`DesignConfig`."""
|
|
prepared = prepare_design_mapping(data, source=source)
|
|
return DesignConfig.from_dict(prepared, path="root")
|
|
|
|
|
|
def load_design_from_file(path: Path) -> DesignConfig:
|
|
"""Read a YAML file and parse it into a :class:`DesignConfig`."""
|
|
with path.open("r", encoding="utf-8") as handle:
|
|
data = yaml.load(handle, Loader=yaml.FullLoader)
|
|
if not isinstance(data, Mapping):
|
|
raise ConfigError("YAML root must be a mapping", path=str(path))
|
|
return load_design_from_mapping(data, source=str(path))
|