空键验证

有时你可能希望不指定值或指定它不存在。

使用 StrictYAML,你可以接受它作为一个有效的值,并将其解析为以下三种内容之一 - None、{}(空字典)或 [](空列表)。

示例 yaml_snippet

a:
from strictyaml import Map, Str, Enum, EmptyNone, EmptyDict, EmptyList, NullNone, load, as_document
from ensure import Ensure

EmptyNone 带有空值

Ensure(load(yaml_snippet, Map({"a": EmptyNone() | Enum(["A", "B",])}))).equals({"a": None})

EmptyDict

Ensure(load(yaml_snippet, Map({"a": EmptyDict() | Enum(["A", "B",])}))).equals({"a": {}})

EmptyList

Ensure(load(yaml_snippet, Map({"a": EmptyList() | Enum(["A", "B",])}))).equals({"a": []})

NullNone

Ensure(load("a: null", Map({"a": NullNone() | Enum(["A", "B",])}))).equals({"a": None})

EmptyNone 没有空值

a: A
Ensure(load(yaml_snippet, Map({"a": EmptyNone() | Enum(["A", "B",])}))).equals({"a": "A"})

结合 Str 与 EmptyNone,Str 首先进行评估

Ensure(load(yaml_snippet, Map({"a": Str() | EmptyNone()}))).equals({"a": ""})

结合 EmptyNone 与 Str,Str 最后进行评估

Ensure(load(yaml_snippet, Map({"a": EmptyNone() | Str()}))).equals({"a": None})

非空值

a: C
load(yaml_snippet, Map({"a": Enum(["A", "B",]) | EmptyNone()}))
strictyaml.exceptions.YAMLValidationError:
when expecting an empty value
found arbitrary text
  in "<unicode string>", line 1, column 1:
    a: C
     ^ (line: 1)

序列化空字典

print(as_document({"a": {}}, Map({"a": EmptyDict() | Str()})).as_yaml())
a:

序列化空列表

print(as_document({"a": []}, Map({"a": EmptyList() | Str()})).as_yaml())
a:

序列化 None

print(as_document({"a": None}, Map({"a": EmptyNone() | Str()})).as_yaml())
a:

可执行规范

empty.story storytests 自动生成的文档。