strictyaml

2025-12-11 0 159

strictyaml

strictyaml是一种类型的YAML解析器,可以解析验证YAML规范的受限子集。

优先事项:

  • 美丽的API
  • 拒绝解析像挪威问题一样的丑陋,难以阅读和不安全的特征。
  • 严格验证标记和直截了当的铸造。
  • 清晰,可读的异常,带有代码片段行号
  • 充当替换Pyyaml,Ruamel.yaml或Poyo的近滴。
  • 能够在YAML中阅读,进行更改并再次写出评论。
  • 目前没有速度。

简单示例

 # All about the character
name : Ford Prefect
age : 42
possessions :
- Towel

strictyaml import load, Map, Str, Int, Seq, YAMLError
\”>

 from strictyaml import load , Map , Str , Int , Seq , YAMLError

默认分析结果:

 > >> load ( yaml_snippet )
YAML ({ \'name\' : \'Ford Prefect\' , \'age\' : \'42\' , \'possessions\' : [ \'Towel\' ]})

所有数据都是字符串,列表或订购:

 > >> load ( yaml_snippet ). data
{ \'name\' : \'Ford Prefect\' , \'age\' : \'42\' , \'possessions\' : [ \'Towel\' ]}

QuickStart with Schema:

strictyaml import load, Map, Str, Int, Seq, YAMLError

schema = Map({"name": Str(), "age": Int(), "possessions": Seq(Str())})
\”>

 from strictyaml import load , Map , Str , Int , Seq , YAMLError

schema = Map ({ \"name\" : Str (), \"age\" : Int (), \"possessions\" : Seq ( Str ())})

42现在被解析为整数:

 > >> person = load ( yaml_snippet , schema )
> >> person . data
{ \'name\' : \'Ford Prefect\' , \'age\' : 42 , \'possessions\' : [ \'Towel\' ]}

如果存在句法问题,违反模式或使用不允许的YAML功能,将提出Yamlerror:

 # All about the character
name : Ford Prefect
age : 42

例如,违反模式:

 try :
    person = load ( yaml_snippet , schema )
except YAMLError as error :
    print ( error )
 while parsing a mapping
  in \"<unicode string>\", line 1, column 1 :
    # All about the character
     ^ (line : 1)
required key(s) \'possessions\' not found
  in \"<unicode string>\", line 3, column 1 :
    age : \' 42 \'
    ^ (line : 3)

如果正确解析:

strictyaml import load, Map, Str, Int, Seq, YAMLError, as_document

schema = Map({"name": Str(), "age": Int(), "possessions": Seq(Str())})
\”>

 from strictyaml import load , Map , Str , Int , Seq , YAMLError , as_document

schema = Map ({ \"name\" : Str (), \"age\" : Int (), \"possessions\" : Seq ( Str ())})

您可以修改值并以保存评论的注释写出YAML:

 person = load ( yaml_snippet , schema )
person [ \'age\' ] = 43
print ( person . as_yaml ())
 # All about the character
name : Ford Prefect
age : 43
possessions :
- Towel

以及查找行号:

 > >> person = load ( yaml_snippet , schema )
> >> person [ \'possessions\' ][ 0 ]. start_line
5

并从DICS或列表中构造YAML文档:

 print ( as_document ({ \"x\" : 1 }). as_yaml ())
 x : 1 

安装

$ pip install strictyaml 

为什么要strictyaml ?

有许多格式和方法可以实现与strictyaml或多或少相同的目的。我试图使它成为最好的。以下是一系列有记录的理由:

  • 为什么要避免使用环境变量作为配置?
  • 为什么不使用HJSON?
  • 为什么不霍康?
  • 为什么不使用INI文件?
  • 为什么不使用JSON模式进行验证?
  • 为什么不使用简单配置文件的JSON?
  • 为什么不JSON5?
  • 为什么不使用YAML 1.2标准? – 我们不需要新标准!
  • 为什么不将Kwalify与标准YAML一起验证我的YAML?
  • 为什么不使用Python的架构库(或类似)进行验证?
  • 为什么不使用sdlang?
  • Toml怎么了?
  • 为什么我不应该只使用Python代码进行配置?
  • 为什么不使用XML进行配置或DSL?

使用strictyaml

如何:

  • 在代码中从头开始构建YAML文档
  • 要么/或模式验证不同的,同样有效的不同种类的YAML
  • 标签异常
  • 合并YAML文件
  • 重新验证已经验证的文档
  • 阅读YAML,编辑并将其写回去
  • 获取yaml元素的行数
  • 没有模式的山药解析

复合验证器:

  • 固定长度序列(reideseq)
  • 结合定义和未定义键的映射(MAPCOMBINED)
  • 具有任意关键名称的映射(Mappattern)
  • 用定义的键和自定义密钥验证器(MAP)映射
  • 使用解析映射的YAML对象
  • 用定义键的映射(地图)
  • 带有默认值的可选键(地图/可选)
  • 验证映射中的可选键(地图)
  • 独特物品的序列(Uniqueseq)
  • 序列/列表验证器(SEQ)
  • 使用模式更新文档

标量验证器:

  • 布尔(布尔)
  • 解析逗号分开的物品(连续分离)
  • 数据时间(DateTime)
  • 十进制数(十进制)
  • 电子邮件和URL验证器
  • 空密钥验证
  • 枚举标量(枚举)
  • 浮点号(浮动)
  • 十六进制整数(Hexint)
  • 整数(int)
  • 用REGEXES(REGEX)验证字符串
  • 解析字符串(str)

限制:

  • 不允许yaml
  • 重复键
  • 肮脏的负载

设计理由

strictyaml中有一些设计决策引起了争议和/或不明显。这些记录在这里:

  • 重复键有什么问题?
  • 显式标签有什么问题?
  • 流风格的YAML怎么了?
  • 挪威问题 – 为什么strictyaml拒绝进行隐式打字,您也应该如此
  • 节点锚和参考有什么问题?
  • 为什么strictyaml不解析Python对象的直接表示?
  • 为什么strictyaml仅从字符串而不是文件中解析?
  • 为什么解析速度不是strictyaml的优先级?
  • 什么是语法键入?
  • 为什么strictyaml会让您定义python的架构 – 一种图灵完整的语言?

明星贡献者

  • @Wwoods
  • @chrisburr
  • @jnichols0

其他贡献者

  • @eulores
  • @Waltwoods
  • @christophergs
  • @gvx
  • @AlexandRedeCan
  • @lots0logs
  • @tobbez
  • @JaredSampson
  • @bobotig

strictyaml还包括Ruamel.yaml的代码,版权所有Anthon van der Neut。

贡献

  • 在编写任何代码之前,请阅读有关Hitchdev库的贡献的教程。
  • 在编写任何代码之前,如果您提出了新功能,请在Github上提出。如果是现有功能 /错误,请评论并简要描述您将如何实现它。
  • 所有代码都需要伴随着一个故事或对现有故事进行修改的故事。这既用于测试代码并构建文档。

下载源码

通过命令行克隆项目:

git clone https://github.com/crdoconnor/strictyaml.git

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

申明:本文由第三方发布,内容仅代表作者观点,与本网站无关。对本文以及其中全部或者部分内容的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。本网发布或转载文章出于传递更多信息之目的,并不意味着赞同其观点或证实其描述,也不代表本网对其真实性负责。

左子网 编程相关 strictyaml https://www.zuozi.net/34197.html

neofetch themes
上一篇: neofetch themes
libsodium
下一篇: libsodium
常见问题
  • 1、自动:拍下后,点击(下载)链接即可下载;2、手动:拍下后,联系卖家发放即可或者联系官方找开发者发货。
查看详情
  • 1、源码默认交易周期:手动发货商品为1-3天,并且用户付款金额将会进入平台担保直到交易完成或者3-7天即可发放,如遇纠纷无限期延长收款金额直至纠纷解决或者退款!;
查看详情
  • 1、描述:源码描述(含标题)与实际源码不一致的(例:货不对板); 2、演示:有演示站时,与实际源码小于95%一致的(但描述中有”不保证完全一样、有变化的可能性”类似显著声明的除外); 3、发货:不发货可无理由退款; 4、安装:免费提供安装服务的源码但卖家不履行的; 5、收费:价格虚标,额外收取其他费用的(但描述中有显著声明或双方交易前有商定的除外); 6、其他:如质量方面的硬性常规问题BUG等。 注:经核实符合上述任一,均支持退款,但卖家予以积极解决问题则除外。
查看详情
  • 1、左子会对双方交易的过程及交易商品的快照进行永久存档,以确保交易的真实、有效、安全! 2、左子无法对如“永久包更新”、“永久技术支持”等类似交易之后的商家承诺做担保,请买家自行鉴别; 3、在源码同时有网站演示与图片演示,且站演与图演不一致时,默认按图演作为纠纷评判依据(特别声明或有商定除外); 4、在没有”无任何正当退款依据”的前提下,商品写有”一旦售出,概不支持退款”等类似的声明,视为无效声明; 5、在未拍下前,双方在QQ上所商定的交易内容,亦可成为纠纷评判依据(商定与描述冲突时,商定为准); 6、因聊天记录可作为纠纷评判依据,故双方联系时,只与对方在左子上所留的QQ、手机号沟通,以防对方不承认自我承诺。 7、虽然交易产生纠纷的几率很小,但一定要保留如聊天记录、手机短信等这样的重要信息,以防产生纠纷时便于左子介入快速处理。
查看详情

相关文章

猜你喜欢
发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务