certflow.config.paths_override module

per-machine 目录覆盖层 (paths.local.yaml) 读取器 + deep-merge.

设计见 docs/discussions/resource-paths-audit.md §13。与现有 ConfigLoader / _cfg / RootConfig(extra="forbid") 严格校验共存:采用「点路径逐键生效」,不重建模型,规避 extra=forbid 限制。

覆盖层只承载 paths.* 目录类覆盖,不自动回写(区别于 userconfig.yaml 的偏好/状态)。

certflow.config.paths_override.load_paths_local(config_dir=None)[源代码]

读取本机目录覆盖层。

  • 文件缺失/为空/解析失败 → 返回 {},完全不影响 base 配置。

  • 支持 ${ENV_VAR:default} 环境变量替换;不做 !include 展开(覆盖层自包含)。

  • 结果懒缓存;修改后调用 reload_paths_local() 失效。

参数:

config_dir (Path | None)

返回类型:

dict

certflow.config.paths_override.reload_paths_local()[源代码]

清除覆盖层缓存,下次 load_paths_local() 重新读取。

返回类型:

None

certflow.config.paths_override.cfg(key, default=None)[源代码]

统一配置读取:覆盖层 > 基础层,按值类型智能解析。

  • 覆盖层(paths.local.yaml)含该点路径 → 取覆盖值;否则回退 _cfg(key, default)。 **对任意键生效**(不限于 paths.*),实现全局可覆盖。

  • 解析规则(仅对"像路径的字符串"走 _resolve_path,其余原样返回):
    • int / dict / list / bool / None → 原样返回(杜绝把数字/字典误当路径解析成垃圾路径)

    • 普通字符串(文件名、标签、单段目录名)→ 原样返回

    • 含分隔符或绝对路径的字符串 → 解析为 BASE_DIR 下的绝对路径

未配置 paths.local.yaml 时行为与 _cfg 完全一致。

这是 pcfg 的继任者:pcfg 现为其别名,新代码请直接用 cfg。

参数:
返回类型:

Any

certflow.config.paths_override.pcfg(key, default=None)

统一配置读取:覆盖层 > 基础层,按值类型智能解析。

  • 覆盖层(paths.local.yaml)含该点路径 → 取覆盖值;否则回退 _cfg(key, default)。 **对任意键生效**(不限于 paths.*),实现全局可覆盖。

  • 解析规则(仅对"像路径的字符串"走 _resolve_path,其余原样返回):
    • int / dict / list / bool / None → 原样返回(杜绝把数字/字典误当路径解析成垃圾路径)

    • 普通字符串(文件名、标签、单段目录名)→ 原样返回

    • 含分隔符或绝对路径的字符串 → 解析为 BASE_DIR 下的绝对路径

未配置 paths.local.yaml 时行为与 _cfg 完全一致。

这是 pcfg 的继任者:pcfg 现为其别名,新代码请直接用 cfg。

参数:
返回类型:

Any

certflow.config.paths_override.set_path_override(key, value)[源代码]

写入一个路径覆盖(点路径)。独立落盘,不触碰 userconfig.yaml。

参数:
返回类型:

None

certflow.config.paths_override.clear_path_override(key)[源代码]

清除一个路径覆盖(点路径)。

参数:

key (str)

返回类型:

None

certflow.config.paths_override.reset_path_overrides()[源代码]

清空整个覆盖文件("恢复默认")。

返回类型:

None

certflow.config.paths_override.list_path_overrides()[源代码]

返回所有已生效覆盖的点路径列表(配置中心"我的覆盖" tab 数据源)。

返回类型:

list[str]