1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132
|
---
title: Validating optional keys in mappings (Map)
---
Not every key in a YAML mapping will be required. If
you use the "Optional('key')" validator with YAML,
you can signal that a key/value pair is not required.
```python
from strictyaml import Map, Int, Str, Bool, Optional, load
from ensure import Ensure
schema = Map({"a": Int(), Optional("b"): Bool(), })
```
Valid example 1:
```yaml
a: 1
b: yes
```
```python
Ensure(load(yaml_snippet, schema)).equals({"a": 1, "b": True})
```
Valid example 2:
```yaml
a: 1
b: no
```
```python
Ensure(load(yaml_snippet, schema)).equals({"a": 1, "b": False})
```
Valid example missing key:
```yaml
a: 1
```
```python
Ensure(load(yaml_snippet, schema)).equals({"a": 1})
```
Invalid 1:
```yaml
a: 1
b: 2
```
```python
load(yaml_snippet, schema)
```
```python
strictyaml.exceptions.YAMLValidationError:
when expecting a boolean value (one of "yes", "true", "on", "1", "y", "no", "false", "off", "0", "n")
found an arbitrary integer
in "<unicode string>", line 2, column 1:
b: '2'
^ (line: 2)
```
Invalid 2:
```yaml
a: 1
b: yes
c: 3
```
```python
load(yaml_snippet, schema)
```
```python
strictyaml.exceptions.YAMLValidationError:
while parsing a mapping
unexpected key not in schema 'c'
in "<unicode string>", line 3, column 1:
c: '3'
^ (line: 3)
```
!!! note "Executable specification"
Documentation automatically generated from
<a href="https://github.com/crdoconnor/strictyaml/blob/master/hitch/story/optional.story">optional.story
storytests.
|