PythonizeYAML
教程
API
GitHub
  • English
  • 简体中文
教程
API
GitHub
  • English
  • 简体中文
  • 教程

    • 教程
    • 加载与导出
    • 编辑值
    • 命令行
    • 注释、样式、标签与锚点
    • 加载不受信任的 YAML
  • 实战示例

    • 编辑服务配置
    • 构建发布元数据命令

构建发布元数据命令

本示例更新一个小型 Python 项目使用的发布文件。加载得到的 Document 对修改值来说已经足够;同一个对象还暴露样式编辑能力,本命令用它处理注释、引号和集合样式。

1. 从一个发布文件开始

创建 release.yaml:

# Published by release.py.
version: '0.3.0'
channel: stable
artifacts:
  - pythonizeyaml
  - pythonizeyaml-docs

2. 加载文档并更新元数据

创建 release.py:

from pathlib import Path

from pythonizeyaml import ScalarStyle, load_document


def publish(version: str) -> None:
    path = Path("release.yaml")
    document = load_document(path.read_text(encoding="utf-8"))

    document["version"].set(
        value=version,
        style=ScalarStyle.SINGLE,
        inline="# Release version",
    )
    document["channel"].comments.before = ["# Published channel"]
    path.write_text(document.dump(), encoding="utf-8")


if __name__ == "__main__":
    publish("0.4.0")

set() 会先校验所有请求的样式字段,再应用变更。如果后面的字段无效,文档会恢复到之前的状态。

3. 验证结果

运行 python release.py 会得到:

# Published by release.py.
# Published channel
version: '0.4.0'  # Release version
channel: stable
artifacts:
  - pythonizeyaml
  - pythonizeyaml-docs

原有的引号样式得以保留,新的注释被挂载到具体的节点上。document.source 仍是原始源文本;当前的表示请使用 document.dump() 获取。

4. 添加带样式元数据的新字段

像普通 dict 一样先赋值——被赋的值会被包装,可以立即设置样式:

document["build"]["command"] = "python -m build"
document["build"]["command"].set(
    style=ScalarStyle.DOUBLE,
    before="# Command used by CI",
)

如果希望某个集合以 [pythonizeyaml, pythonizeyaml-docs] 的形式输出,可以使用 document["artifacts"].collection_style = "flow"。

最近更新: 2026/10/3 15:52
Contributors: originalFactor
Prev
编辑服务配置