Disallowed YAML

StrictYAML parses an opinionated subset of the YAML specification which refuses to parse features which are otherwise valid in standard YAML.

For an explanation as to why these features are stripped out of StrictYAML, see the FAQ.

Disallowed YAML features raise Disallowed exceptions while syntactically invalid YAML raises ScannerError or ComposerError.

Every error inherits from YAMLError.

from strictyaml import Map, Int, Any, load
from strictyaml import TagTokenDisallowed, FlowMappingDisallowed, AnchorTokenDisallowed

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

Tag tokens:

x:
  a: !!str yes
  b: !!str 3.5
  c: !!str yes
load(yaml_snippet, schema, label="disallowed")
strictyaml.exceptions.TagTokenDisallowed:
While scanning
  in "disallowed", line 2, column 11:
      a: !!str yes
              ^ (line: 2)
Found disallowed tag tokens (do not specify types in markup)
  in "disallowed", line 2, column 6:
      a: !!str yes
         ^ (line: 2)

Flow style sequence:

[a, b]: [x, y]
load(yaml_snippet, schema, label="disallowed")
strictyaml.exceptions.FlowMappingDisallowed:
While scanning
  in "disallowed", line 1, column 1:
    [a, b]: [x, y]
    ^ (line: 1)
Found ugly disallowed JSONesque flow mapping (surround with ' and ' to make text appear literally)
  in "disallowed", line 1, column 2:
    [a, b]: [x, y]
     ^ (line: 1)

Flow style mapping:

x: { a: 1, b: 2, c: 3 }
load(yaml_snippet, schema, label="disallowed")
strictyaml.exceptions.FlowMappingDisallowed:
While scanning
  in "disallowed", line 1, column 4:
    x: { a: 1, b: 2, c: 3 }
       ^ (line: 1)
Found ugly disallowed JSONesque flow mapping (surround with ' and ' to make text appear literally)
  in "disallowed", line 1, column 5:
    x: { a: 1, b: 2, c: 3 }
        ^ (line: 1)

Node anchors and references:

x: 
  a: &node1 3.5
  b: 1
  c: *node1
load(yaml_snippet, schema, label="disallowed")
strictyaml.exceptions.AnchorTokenDisallowed:
While scanning
  in "disallowed", line 2, column 6:
      a: &node1 3.5
         ^ (line: 2)
Found confusing disallowed anchor token (surround with ' and ' to make text appear literally)
  in "disallowed", line 2, column 12:
      a: &node1 3.5
               ^ (line: 2)

Syntactically invalid YAML:

- invalid
string
load(yaml_snippet, schema, label="disallowed")
strictyaml.ruamel.scanner.ScannerError:
while scanning a simple key
  in "disallowed", line 2, column 1:
    string
    ^ (line: 2)
could not find expected ':'
  in "disallowed", line 3, column 1:

    ^ (line: 3)

Mixed space indentation:

item:
  two space indent: 2
item two:
    four space indent: 2
load(yaml_snippet, label="disallowed")
strictyaml.exceptions.InconsistentIndentationDisallowed:
While parsing
  in "disallowed", line 4, column 5:
        four space indent: 2
        ^ (line: 4)
Found mapping with indentation inconsistent with previous mapping
  in "disallowed", line 5, column 1:

    ^ (line: 5)

Executable specification

Documentation automatically generated from disallow.story storytests.