跳转到主要内容

支持Jinja条件表达式的YAML解析器

项目描述

YAMX

使用jinja2表达式扩展YAML配置


使用方法

创建

使用模板语法创建第一个配置

# starship.yml

type: Exploration vessel
{% if toggles.speed_improved %}
speed: 50
max_speed: 100
{% else %}
max_speed: 35
speed: 20
{% endif %}
name: Starship Enterprise

weapons:
  - name: Laser Blaster
    fire_rate: 2.0
    damage: 20
    ammo_capacity: 50
  {% if toggles.new_missiles_weapon %}
  - damage: 100
    fire_rate: 0.1
    ammo_capacity: 10
    name: Missiles
  {% endif %}

额外功能

库的一些部分还没有一般支持,仅作为一组extra工具提供,用于处理特定格式的条件,例如

defines.get("FEATURE_FLAG")

toggles.FEATURE_FLAG

toggles.get("FEATURE_FLAG")

toggles["FEATURE_FLAG"]

config_flags.NAME

config_flags.get("NAME")

config_flags["NAME"]

支持对它们进行notand操作。

提取配置中使用的开关名称

from yamx import YAMX
from yamx.extra import extract_toggles

yamx = YAMX()

with open("starship.yml") as fp:
  data = yamx.load(fp)


toggles = extract_toggles(data)

assert toggles == {"speed_improved", "new_missiles_weapon"}

使用yamx.extra.resolve_toggles解析jinja逻辑配置

from immutables import Map

from yamx import YAMX
from yamx.extra import resolve_toggles, ResolvingContext

yamx = YAMX()

with open("starship.yml") as fp:
  data = yamx.load(fp)


context = {
  "toggles": ResolvingContext({
    "speed_improved":True,
    "new_missiles_weapon":False,
  })
}
resolved_data = resolve_toggles(data, context)

assert resolved_data["speed"] == 50

格式

使用sort_keys格式化文件结构和排序属性键

from yamx import YAMX

yamx = YAMX(sort_keys=True)

with open("data.yaml") as f:
    data = yamx.load(f)

data_raw = yamx.dump_to_string(data)
print(data_raw)
name: Starship Enterprise
type: Exploration vessel
{% if features["speed_improved"] %}
speed: 50
max_speed: 100
{% else %}
speed: 20
max_speed: 35
{% endif %}

weapons:
  - name: Laser Blaster
    damage: 20
    fire_rate: 2.0
    ammo_capacity: 50
  {% if features["new_missiles_weapon"] %}
  - name: Missiles
    damage: 100
    fire_rate: 0.1
    ammo_capacity: 10
  {% endif %}

开发

代码检查器

使用以下命令运行代码检查器

make lint

测试

使用以下命令运行测试

make test

Apache许可证版本2.0 Apache许可证版本2.0,2004年1月

https://apache.ac.cn/licenses/

使用、复制和分发条款和条件

  1. 定义。"许可"指本文件第1至9节所定义的使用、复制和分发条款。"许可方"指版权所有者或经版权所有者授权,授予本许可的实体。"法人实体"指行为实体及其所有控制、受控制或与该实体共同控制的实体之集合。在此定义中,“控制”意味着(i)直接或间接地决定该实体方向或管理的权力,不论是通过合同还是其他方式,或(ii)拥有50%或以上的未偿还股份,或(iii)对该实体的有益所有权。"您"(或"您的")指行使本许可所授予权限的个人或法人实体。"源代码"形式指修改的首选形式,包括但不限于软件源代码、文档源代码和配置文件。"目标代码"形式指从源代码形式的机械变换或翻译所得的任何形式,包括但不限于编译后的目标代码、生成的文档以及其他媒体类型的转换。"作品"指在源代码或目标代码形式下的著作权作品,根据包含在或附属于作品中的版权声明(以下附录提供示例)在许可下提供。"衍生作品"指基于(或源自)作品的作品,无论在源代码或目标代码形式,其编辑修订、注释、详述或其他修改整体上构成一个原创著作权作品。在本许可中,衍生作品不包括与作品及其衍生作品保持可分离性或仅通过链接(或按名称绑定)到作品接口的作品。"贡献"指任何著作权作品,包括作品的原始版本及其对作品或衍生作品的任何修改或增加,该作品是版权所有者或经授权代表版权所有者提交给许可方以包含在作品中的,有意提交的。在此定义中,“提交”意味着发送给许可方或其代表的任何形式的电子、口头或书面通信,包括但不限于电子邮件列表、源代码控制系统和问题跟踪系统,这些系统由许可方或代表许可方管理,用于讨论和改进作品,但排除版权所有者明确标记或以其他方式书面指定为“非贡献”的通信。"贡献者"指许可方以及任何从许可方收到贡献并将其纳入作品的个人或法人实体。

  2. 版权许可的授予。在本许可的条款和条件下,每个贡献者在此授予您一项永久性、全球性、非独家、无偿、免版税、不可撤销的版权许可,以复制、制作衍生作品、公开展示、公开表演、再许可和分发作品及其衍生作品,无论其形式为源代码或目标代码。

  3. 专利许可授予。根据本许可的条款和条件,每个贡献者在此授予您一项永久性、全球性、非排他性、无偿、免版税、不可撤销(除本节所述外)的专利许可,以制造、拥有制造、使用、提供销售、销售、进口以及以其他方式转让该作品,该许可仅适用于该贡献者可许可的专利权要求,这些专利权要求仅由其贡献本身或其贡献与提交的作品的结合所必然侵权。如果您针对任何实体(包括诉讼中的交叉诉讼或反诉)提起专利诉讼,声称作品或作品内包含的贡献构成直接或从属专利侵权,则根据本许可授予您针对该作品的所有专利许可应自提起诉讼之日起终止。

  4. 再分发。您可以在任何媒介中复制和分发作品或其衍生物的副本,带有或没有修改,以源代码或目标代码形式,只要您满足以下条件:您必须向作品或衍生物的其他接收者提供本许可的副本;您必须使任何修改过的文件包含显眼的声明,说明您已更改文件;并且您必须在您分发的任何衍生物的源代码形式中保留所有版权、专利、商标和归属通知,从作品源代码形式中排除不涉及衍生物任何部分的那些通知;如果作品在其分发中包含一个“NOTICE”文本文件,则您分发的任何衍生物必须至少包含一个可读的归属通知副本,其中包含此类NOTICE文件中的归属通知,排除不涉及衍生物任何部分的那些通知,在以下至少一个位置:在作为衍生物一部分分发的NOTICE文本文件中;在源代码形式或文档中,如果与衍生物一起提供;或者,在衍生物生成的显示中,如果此类第三方通知通常出现的地方。NOTICE文件的内容仅用于信息目的,并不修改本许可。您可以在您分发的衍生物中添加自己的归属通知,并将其作为作品NOTICE文本的补充或并列添加,只要此类附加归属通知不能被解释为修改本许可。您可以在您的修改中添加自己的版权声明,并可以为您的修改或任何此类衍生物的整体使用、复制或分发提供额外的或不同的许可条款和条件,前提是您的使用、复制和分发作品否则符合本许可中规定的条件。

  5. 贡献提交。除非您明确表示,否则您提交给许可人的任何有意包含在作品中的贡献均应受本许可的条款和条件约束,不附加任何其他条款或条件。尽管有上述规定,本条不应取代或修改您与许可人就此类贡献可能签订的任何单独许可协议的条款。

  6. 商标。本许可不授予使用许可人的商号、商标、服务标记或产品名称的权利,除非根据合理且习惯性的使用,描述作品的来源和复制NOTICE文件的内容所必需。

  7. 免责声明。除非适用法律要求或书面同意,否则许可方提供作品(以及每个贡献者提供其贡献)基于“现状”原则,不提供任何形式的保证或条件,包括但不限于关于所有权、非侵权、适销性或特定用途适用性的保证或条件。您单独负责确定使用或重新分发作品是否适当,并承担根据本许可证行使许可权所涉及的所有风险。

  8. 责任限制。在任何情况下,无论基于何种法律理论(包括疏忽侵权),除非适用法律(如故意和重大疏忽行为)要求或书面同意,否则任何贡献者不对您因本许可证或使用或无法使用作品而产生的任何性质的直接、间接、特殊、偶然或后果性损害承担责任,即使该贡献者已被告知此类损害的可能性。

  9. 接受保证或附加责任。在重新分发作品或其衍生作品时,您可以选择提供并收取支持、保证、赔偿或与其他许可一致的其他责任义务和/或权利的费用。然而,在承担此类义务时,您只能代表自己并承担个人责任,而不是代表任何其他贡献者,并且只有在您同意赔偿、辩护并使每个贡献者免受因您接受此类保证或附加责任而产生的任何责任或索赔的情况下,方可如此。

条款和条件结束

©2023 Workday, Inc. 保留所有权利。Workday及其标志是Workday, Inc.的注册商标。所有其他品牌和产品名称均为其各自持有者的商标或注册商标。

根据Apache许可证2.0版本(以下简称“许可证”)授权;您只能在遵守许可证的情况下使用此文件。您可以在https://apache.ac.cn/licenses/LICENSE-2.0获取许可证副本。

除非适用法律要求或书面同意,否则根据许可证分发的软件基于“现状”原则分发,不提供任何形式的保证或条件,无论是明示的还是默示的。有关许可证下管理权限和限制的具体语言,请参阅许可证。

项目详情


下载文件

下载适合您平台文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源代码分发

yamx-1.0.0.tar.gz (27.6 kB 查看哈希值)

上传时间 源代码

构建分发

yamx-1.0.0-py3-none-any.whl (32.8 kB 查看哈希值)

上传时间 Python 3

由以下支持