taolib.symphony.config.resolver#

Symphony 配置合并与解析。

实现配置的深度合并、环境变量替换、路径解析以及最终配置组装。 合并优先级:CLI > env $VAR > WORKFLOW.md YAML > symphony.toml [defaults] > Pydantic 默认值。

Attributes#

Functions#

deep_merge(→ dict)

深度合并两个字典。

resolve_env_vars(→ dict)

替换配置中的 $VAR_NAME 环境变量引用。

_resolve_env_vars_recursive(→ object)

递归替换环境变量引用。

resolve_paths(→ dict)

解析配置中的路径值。

_resolve_path_value(→ object)

解析单个路径值。

resolve_config(...)

组装最终配置。

_apply_cli_overrides(→ dict)

将 CLI 参数应用到配置字典。

Module Contents#

taolib.symphony.config.resolver._ENV_VAR_RE#
taolib.symphony.config.resolver.deep_merge(base: dict, override: dict) dict#

深度合并两个字典。

override 中的值覆盖 base 中的同名键。如果两边的值都是字典, 则递归合并。base 和 override 均不被修改。

参数:
  • base -- 基础配置字典。

  • override -- 覆盖配置字典。

返回:

合并后的新字典。

taolib.symphony.config.resolver.resolve_env_vars(config: dict) dict#

替换配置中的 $VAR_NAME 环境变量引用。

仅对值为 $VAR_NAME 形式的字符串进行替换。 如果环境变量不存在或为空字符串,则保留原始 $VAR_NAME 引用。

参数:

config -- 原始配置字典。

返回:

替换环境变量后的配置字典。

taolib.symphony.config.resolver._resolve_env_vars_recursive(value: object) object#

递归替换环境变量引用。

taolib.symphony.config.resolver.resolve_paths(config: dict, base_dir: pathlib.Path) dict#

解析配置中的路径值。

对已知的路径字段进行 ~ 展开和相对路径解析: - ~ 展开为用户主目录。 - 相对路径基于 base_dir 解析为绝对路径。 - 仅处理已知的路径字段,不重写 URI 或任意命令字符串。

参数:
  • config -- 配置字典。

  • base_dir -- 相对路径的基准目录(通常为 WORKFLOW.md 所在目录)。

返回:

路径解析后的配置字典。

taolib.symphony.config.resolver._resolve_path_value(value: object, base_dir: pathlib.Path) object#

解析单个路径值。

taolib.symphony.config.resolver.resolve_config(cli_args: dict, toml_path: pathlib.Path | None, workflow_path: pathlib.Path) taolib.symphony.config.schema.SymphonyConfig#

组装最终配置。

按优先级从低到高合并配置源: 1. Pydantic 默认值 2. symphony.toml [defaults] 段 3. WORKFLOW.md YAML 前置数据 4. 环境 $VAR 替换 5. 路径解析 6. CLI 参数覆盖

参数:
  • cli_args -- CLI 参数字典,例如 {"port": 8080, "logs_root": Path("./log")}

  • toml_path -- symphony.toml 文件路径,为 None 则跳过。

  • workflow_path -- WORKFLOW.md 文件路径。

返回:

校验后的 SymphonyConfig 实例。

抛出:
taolib.symphony.config.resolver._apply_cli_overrides(config: dict, cli_args: dict) dict#

将 CLI 参数应用到配置字典。

仅在 CLI 参数非 None 时覆盖对应配置项。