跳转到主要内容

严格的类型化YAML解析器

项目描述

StrictYAML

StrictYAML是一个类型安全的YAML解析器,它解析并验证YAML规范的一个受限子集

优先级

  • 美丽的API
  • 拒绝解析YAML中丑陋、难以阅读和不安全的特性,如挪威问题
  • 对标记进行严格的验证和简单的类型转换。
  • 具有代码片段和行号的清晰、可读的异常。
  • 可以作为pyyaml、ruamel.yaml或poyo的近似替代品。
  • 能够读取YAML,进行更改,并带注释地重新写入。
  • 不是速度,目前。

简单示例

# All about the character
name: Ford Prefect
age: 42
possessions:
- Towel
from strictyaml import load, Map, Str, Int, Seq, YAMLError

默认解析结果

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

所有数据都是字符串、列表或OrderedDict

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

使用模式快速入门

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)

如果正确解析

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

并从字典或列表构建YAML文档

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

安装

$ pip install strictyaml

为什么选择StrictYAML?

有许多格式和方法可以实现与StrictYAML相似的目的。我已经尽力使其成为最好的一个。以下是一系列文档化的理由

使用StrictYAML

如何

复合验证器

标量验证器

限制

设计理由

StrictYAML中的一些设计决策是有争议的,或者不是很明显。这些将在下面进行说明

Star贡献者

  • @wwoods
  • @chrisburr
  • @jnichols0

其他贡献者

  • @eulores
  • @WaltWoods
  • @ChristopherGS
  • @gvx
  • @AlexandreDecan
  • @lots0logs
  • @tobbez
  • @jaredsampson
  • @BoboTIG

StrictYAML还包括来自ruamel.yaml的代码,版权属于Anthon van der Neut。

贡献

  • 在编写任何代码之前,请阅读有关向hitchdev库贡献的教程。
  • 在编写任何代码之前,如果您正在提议一个新功能,请将其在github上提出。如果是现有功能/错误,请评论并简要描述您将如何实现它。
  • 所有代码都需要附带一个使用它的故事或修改现有故事。这既用于测试代码,也用于构建文档。

项目详情


版本历史 发布通知 | RSS 源

下载文件

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

源代码分发

strictyaml-1.7.3.tar.gz (115.2 kB 查看哈希值)

上传时间 源代码

构建分发

strictyaml-1.7.3-py3-none-any.whl (123.9 kB 查看哈希值)

上传时间 Python 3

由以下支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面