Validating strings with regexes (Regex)

StrictYAML can validate regular expressions and return a string. If the regular expression does not match, an exception is raised.

from strictyaml import Regex, Map, load, as_document
from collections import OrderedDict
from ensure import Ensure

schema = Map({"a": Regex(u"[1-4]"), "b": Regex(u"[5-9]")})

Parsed correctly:

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

Non-matching:

a: 5
b: 5
load(yaml_snippet, schema)
strictyaml.exceptions.YAMLValidationError:
when expecting string matching [1-4]
found non-matching string
  in "<unicode string>", line 1, column 1:
    a: '5'
     ^ (line: 1)

Non-matching suffix:

a: 1 Hello
b: 5
load(yaml_snippet, schema)
strictyaml.exceptions.YAMLValidationError:
when expecting string matching [1-4]
found non-matching string
  in "<unicode string>", line 1, column 1:
    a: 1 Hello
     ^ (line: 1)

Serialized successfully:

print(as_document(OrderedDict([("a", "1"), ("b", "5")]), schema).as_yaml())
a: 1
b: 5

Serialization failure non matching regex:

as_document(OrderedDict([("a", "x"), ("b", "5")]), schema)
strictyaml.exceptions.YAMLSerializationError:
when expecting string matching [1-4] found 'x'

Serialization failure not a string:

as_document(OrderedDict([("a", 1), ("b", "5")]), schema)
strictyaml.exceptions.YAMLSerializationError:
when expecting string matching [1-4] got '1' of type int.

Executable specification

Documentation automatically generated from regexp.story storytests.