Using a YAML object of a parsed mapping

When a YAML document with mappings is parsed, it is not parsed as a dict but as a YAML object which behaves very similarly to a dict, but with some extra capabilities.

You can use .items(), .keys(), .values(), look up items with square bracket notation, .get(key, with_default_if_nonexistent) and use "x in y" notation to determine key membership.

To retrieve the equivalent dict (containing just other dicts, lists and strings/ints/etc.) use .data.

Example yaml_snippet:

a: 1
b: 2
c: 3
from strictyaml import Map, Int, load
from ensure import Ensure

schema = Map({"a": Int(), "b": Int(), "c": Int()})

.is_mapping():

Ensure(load(yaml_snippet, schema).is_mapping()).is_true()

Equivalence with equivalent plain dict:

Ensure(load(yaml_snippet, schema)).equals({"a": 1, "b": 2, "c": 3})

.items():

Ensure(load(yaml_snippet, schema).items()).equals([("a", 1), ("b", 2), ("c", 3)])

Use in to detect presence of a key:

Ensure("a" in load(yaml_snippet, schema)).is_true()

.values():

Ensure(load(yaml_snippet, schema).values()).equals([1, 2, 3])

.keys():

Ensure(load(yaml_snippet, schema).keys()).equals(["a", "b", "c"])

Key lookup:

yaml = load(yaml_snippet, schema)
Ensure(yaml[yaml.keys()[0]]).equals(1)

Dict lookup:

Ensure(load(yaml_snippet, schema)["a"]).equals(1)

.get():

Ensure(load(yaml_snippet, schema).get("a")).equals(1)

.get() nonexistent:

Ensure(load(yaml_snippet, schema).get("nonexistent")).equals(None)

len():

Ensure(len(load(yaml_snippet, schema))).equals(3)

Executable specification

Documentation automatically generated from mapping-representation.story storytests.