Duplicate keys

Duplicate keys are allowed in regular YAML - as parsed by pyyaml, ruamel.yaml and poyo:

Not only is it unclear whether x should be "cow" or "bull" (the parser will decide 'bull', but did you know that?), if there are 200 lines between x: cow and x: bull, a user might very likely change the first x and erroneously believe that the resulting value of x has been changed - when it has not.

In order to avoid all possible confusion, StrictYAML will simply refuse to parse this and will only accept associative arrays where all of the keys are unique. It will throw a DuplicateKeysDisallowed exception.

Example yaml_snippet:

a: cow
a: bull
from strictyaml import load, DuplicateKeysDisallowed

Nameless exception:

load(yaml_snippet)
strictyaml.exceptions.DuplicateKeysDisallowed:
While parsing
  in "<unicode string>", line 2, column 1:
    a: bull
    ^ (line: 2)
Duplicate key 'a' found
  in "<unicode string>", line 2, column 2:
    a: bull
     ^ (line: 2)

Named exception:

load(yaml_snippet, label="mylabel")
strictyaml.exceptions.DuplicateKeysDisallowed:
While parsing
  in "mylabel", line 2, column 1:
    a: bull
    ^ (line: 2)
Duplicate key 'a' found
  in "mylabel", line 2, column 2:
    a: bull
     ^ (line: 2)

Executable specification

Documentation automatically generated from duplicatekeys.story storytests.