waylan/pyyaml-env-tag
GitHub: waylan/pyyaml-env-tag
一个 PyYAML 扩展库,通过自定义 !ENV 标签在 YAML 文件中直接引用环境变量,支持类型解析、默认值和多变量回退。
Stars: 13 | Forks: 4
# pyyaml_env_tag
一个用于在 YAML 文件中引用环境变量的自定义 YAML 标签。
[][pypi-link]
[][GHAction-link]
[][codecov-link]
## 安装
使用 pip 安装 `pyyaml_env_tag` 包:
```
pip install pyyaml_env_tag
```
### 启用标签
要启用该标签,请将您选择的加载器传入 `add_env_tag` 函数,该函数将返回已添加构造器的加载器。
```
import yaml
from yaml_env_tag import add_env_tag
myLoader = add_env_tag(yaml.Loader)
```
然后您就可以像往常一样使用该加载器。例如:
```
yaml.load(data, Loader=myLoader)
```
`add_env_tag` 是一个高级辅助函数。如果您需要更底层的访问权限,可以使用加载器的 `add_constructor` 方法将构造器(`yaml_env_tag.construct_env_tag`)直接添加到加载器中。请注意,这要求同时定义标签(`!ENV`)。
```
from yaml_env_tag import construct_env_tag
Loader.add_constructor('!ENV', construct_env_tag)
```
## 使用标签
在 YAML 文件中包含标签 `!ENV` 并在后面加上环境变量的名称,该环境变量的值将被用于替代标签位置。
```
key: !ENV SOME_VARIABLE
```
如果 `SOME_VARIABLE` 被设置为 `A string!`,那么上述 YAML 将生成以下 Python 对象:
```
{'key': 'A string!'}
```
变量的内容使用 YAML 的隐式标量类型进行解析,例如字符串、布尔值、整数、浮点数、时间戳和空值。更复杂的类型将无法识别,并直接作为字符串传递。例如,如果 `SOME_VARIABLE` 被设置为字符串 `true`,那么上述 YAML 将生成以下内容:
```
{'key': True}
```
如果指定的变量未设置,则默认分配一个 `null` 值。您可以将自定义的默认值定义为序列中的最后一项。
```
key: !ENV [SOME_VARIABLE, default]
```
在上述示例中,如果未定义 `SOME_VARIABLE`,则将使用字符串 `default` 代替,如下所示:
```
{'key': 'default'}
```
您可以列出多个变量作为回退。系统将使用第一个已设置的变量。在任何包含多个项目的序列中,最后一项必须始终是默认值,且不会被解析为环境变量。
```
key: !ENV [SOME_VARIABLE, FALLBACK, default]
```
与变量的内容一样,默认值也会被解析为隐含类型(字符串、布尔值、整数、浮点数、时间戳和空值)的 Python 对象。
当未设置 `SOME_VARIABLE` 时,以下四项将解析为相同的值(`None`):
```
- !ENV SOME_VARIABLE
- !ENV [SOME_VARIABLE]
- !ENV [SOME_VARIABLE, ~]
- !ENV [SOME_VARIABLE, null]
```
## 相关项目
pyyaml_env_tag 的灵感来源于 Ruby 包 [yaml-env-tag]。
[pyyaml-tags] 和 [python_yaml_environment_variables] 实现了一种在 YAML 文件中引用环境变量的替代方法。
这些库均使用模板字符串,并用变量的内容替换模板标签。虽然这允许单个值引用多个变量并包含额外内容,但这会将所有值限制为只能是字符串,并且不提供定义默认值的方法。
## 许可证
pyyaml_env_tag 采用 `LICENSE` 中定义的 [MIT License] 授权。
## 更新日志
### [1.1] - 2025-05-13
- 确保测试随发行版一起包含 (#9)。
### [1.0] - 2025-05-09
- 添加 `add_env_tag` 辅助函数,作为一种修改加载器的更高级方式。
### [0.1] - 2020-11-11
初始版本。
标签:!ENV, PyPI, Python, PyYAML, YAML Loader, YAML解析, 变量注入, 恶意代码分析, 恶意代码分类, 数据序列化, 无后门, 环境变量, 自定义标签, 逆向工具, 配置文件