Sequence/list validator (Seq)

Sequences in YAML are denoted by a series of dashes ('-') and parsed as a list in python.

Validating sequences of a particular type can be done with the Seq validator, specifying the type.

See also UniqueSeq and FixedSeq for other types of sequence validation.

Example yaml_snippet:

- 1
- 2
- 3
from strictyaml import Seq, Str, Int, load
from ensure import Ensure

Valid Parsed:

Ensure(load(yaml_snippet, Seq(Str()))).equals(["1", "2", "3", ])

Is sequence:

assert load(yaml_snippet, Seq(Str())).is_sequence()

Iterator:

assert [x for x in load(yaml_snippet, Seq(Str()))] == ["1", "2", "3"]

Lists of lists:

-
  - a
  - b
  - c
-
  - d
  - e
  - f
assert load(yaml_snippet, Seq(Seq(Str()))) == [["a", "b", "c"], ["d", "e", "f"]]

.text is nonsensical:

- â
- 2
- 3
load(yaml_snippet, Seq(Str())).text
builtins.TypeError:YAML(['â', '2', '3']) is a sequence, has no text value.:

Invalid mapping instead:

a: 1
b: 2
c: 3
load(yaml_snippet, Seq(Str()))
strictyaml.exceptions.YAMLValidationError:
when expecting a sequence
  in "<unicode string>", line 1, column 1:
    a: '1'
     ^ (line: 1)
found a mapping
  in "<unicode string>", line 3, column 1:
    c: '3'
    ^ (line: 3)

Invalid nested structure instead:

- 2
- 3
- a:
  - 1
  - 2
load(yaml_snippet, Seq(Str()))
strictyaml.exceptions.YAMLValidationError:
when expecting a str
  in "<unicode string>", line 3, column 1:
    - a:
    ^ (line: 3)
found a mapping
  in "<unicode string>", line 5, column 1:
      - '2'
    ^ (line: 5)

Invalid item in sequence:

- 1.1
- 1.2
load(yaml_snippet, Seq(Int()))
strictyaml.exceptions.YAMLValidationError:
when expecting an integer
found an arbitrary number
  in "<unicode string>", line 1, column 1:
    - '1.1'
     ^ (line: 1)

One invalid item in sequence:

- 1
- 2
- 3.4
load(yaml_snippet, Seq(Int()))
strictyaml.exceptions.YAMLValidationError:
when expecting an integer
found an arbitrary number
  in "<unicode string>", line 3, column 1:
    - '3.4'
    ^ (line: 3)

Executable specification

Documentation automatically generated from sequence.story storytests.