Boolean (Bool)

Boolean values can be parsed using a Bool validator.

It case-insensitively interprets “yes”, “true”, “1”, “on” as “True”, “y” and their opposites as False.

Different values will trigger a validation error.

When updating boolean values on a YAML object with True or False, the roundtripped string version is set to “yes” and “no”.

To have your boolean values updated to a different yes/no string, update with a string instead - e.g. “on” or “off”.

Example yaml_snippet:

a: yes
b: true
c: on
d: 1
e: True
f: Y

u: n
v: False
w: 0
x: Off
y: FALSE
z: no
from strictyaml import Bool, Str, MapPattern, load
from ensure import Ensure

schema = MapPattern(Str(), Bool())

Parse to YAML object:

Ensure(load(yaml_snippet, schema)).equals({
    "a": True, "b": True, "c": True, "d": True, "e": True, "f": True,
    "u": False, "v": False, "w": False, "x": False, "y": False, "z": False,
})

YAML object should resolve to True or False:

Ensure(load(yaml_snippet, schema)["w"]).equals(False)

Using .data you can get the actual boolean value parsed:

assert load(yaml_snippet, schema)["a"].data is True

.text returns the text of the boolean YAML:

Ensure(load(yaml_snippet, schema)["y"].text).equals("FALSE")

Update boolean values with string and bool type:

yaml = load(yaml_snippet, schema)
yaml['a'] = 'no'
yaml['b'] = False
yaml['c'] = True
print(yaml.as_yaml())
a: no
b: no
c: yes
d: 1
e: True
f: Y

u: n
v: False
w: 0
x: Off
y: FALSE
z: no

Cannot cast boolean to string:

str(load(yaml_snippet, schema)["y"])
builtins.TypeError:
Cannot cast 'YAML(False)' to str.
Use str(yamlobj.data) or str(yamlobj.text) instead.

Different uninterpretable values raise validation error:

load('a: yâs', schema)
strictyaml.exceptions.YAMLValidationError:
when expecting a boolean value (one of "yes", "true", "on", "1", "y", "no", "false", "off", "0", "n")
found arbitrary text
  in "<unicode string>", line 1, column 1:
    a: "y\xE2s"
     ^ (line: 1)

Executable specification

Page automatically generated from boolean.story.