严格的、类型化的yaml解析器

strictyaml的Python项目详细描述


严格

strictyaml是一个type-safeyaml解析器 解析并验证YAMLrestricted subset 规范。

优先级:

简单示例:

# All about the charactername:Ford Prefectage:42possessions:-Towel
fromstrictyamlimportload,Map,Str,Int,Seq,YAMLError

默认分析结果:

>>>load(yaml_snippet)YAML(OrderedDict([('name','Ford Prefect'),('age','42'),('possessions',['Towel'])]))

所有数据都是字符串、列表或顺序数据:

>>>load(yaml_snippet).dataOrderedDict([('name','Ford Prefect'),('age','42'),('possessions',['Towel'])])

快速启动模式:

fromstrictyamlimportload,Map,Str,Int,Seq,YAMLErrorschema=Map({"name":Str(),"age":Int(),"possessions":Seq(Str())})

42现在被解析为一个整数:

>>>person=load(yaml_snippet,schema)>>>person.dataOrderedDict([('name','Ford Prefect'),('age',42),('possessions',['Towel'])])

如果存在语法问题、违反模式或使用不允许的yaml功能,则会引发yamlerror:

# All about the charactername:Ford Prefectage:42

例如,架构冲突:

try:person=load(yaml_snippet,schema)exceptYAMLErroraserror:print(error)
while parsing a mappingin "<unicode string>", line 1, column 1:# All about the character^ (line:1)required key(s) 'possessions' not foundin "<unicode string>", line 3, column 1:age:'42'^ (line:3)

如果分析正确:

fromstrictyamlimportload,Map,Str,Int,Seq,YAMLErrorschema=Map({"name":Str(),"age":Int(),"possessions":Seq(Str())})

您可以修改值并写出保留注释的yaml:

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

以及查找行号:

>>>person=load(yaml_snippet,schema)>>>person['possessions'][0].start_line5

安装

$ pip install strictyaml

为什么是严格的?

有许多格式和方法可以实现 与Strictymal的用途不同。我试着把它变成最好的。 以下是一系列书面证明:

使用strictyaml

如何:

复合验证器:

标量验证器:

限制:

设计理由

在Strictymal中有一些设计决策是有争议的 和/或不明显。这些记录如下:

贡献者

  • @gvx
  • @亚历山大
  • @LOTS0日志
  • @托比兹

贡献

  • 在编写任何代码之前,请阅读contributing to hitchdev libraries上的教程。

  • 在编写任何代码之前,如果您提出了一个新功能,请在github上提出。如果它是一个现有的特征/ bug,请评论并简要描述您将如何实现它。

  • 所有的代码都需要伴随着一个故事来练习或修改现有的故事。这用于测试代码和构建文档。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
如何加载。java文件到编译器?   java写入文件和I/O   java日历返回错误的当前日期安卓   if语句if变量等于1(java)   java很难让Joda有时间使用我的bukkit插件   json如何创建基于java的应用程序,该应用程序将从网站获取输入   java如何在多页中打印大型JPanel   java my spinner在添加从firebase数据库中选择的多个值时被覆盖   java用Play框架覆盖HTTP方法   试图获取所有用户时,java错误请求400。Dto和表格   java支持bean加载图像后javascript自动调用JS函数   java在MTOM的@StreamingAttachment(Metro)中,Parsely的意思是什么   具有可抢占线程队列的多线程java执行器   Java Opencv connectedComponentsWithStats   java如何向数组中添加2D数组的数目   eclipse为什么我的Java Zork克隆不能正确循环?   java在哪里放置定制的第二个web。xml   java如何更改最近应用列表中显示的快照?   java Browser#getText()返回空字符串