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 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187
|
---
title: Empty key validation
---
Sometimes you may wish to not specify a value or specify
that it does not exist.
Using StrictYAML you can accept this as a valid value and
have it parsed to one of three things - None, {} (empty dict),
or [] (empty list).
Example yaml_snippet:
```yaml
a:
```
```python
from strictyaml import Map, Str, Enum, EmptyNone, EmptyDict, EmptyList, NullNone, load, as_document
from ensure import Ensure
```
EmptyNone with empty value:
```python
Ensure(load(yaml_snippet, Map({"a": EmptyNone() | Enum(["A", "B",])}))).equals({"a": None})
```
EmptyDict:
```python
Ensure(load(yaml_snippet, Map({"a": EmptyDict() | Enum(["A", "B",])}))).equals({"a": {}})
```
EmptyList:
```python
Ensure(load(yaml_snippet, Map({"a": EmptyList() | Enum(["A", "B",])}))).equals({"a": []})
```
NullNone:
```python
Ensure(load("a: null", Map({"a": NullNone() | Enum(["A", "B",])}))).equals({"a": None})
```
EmptyNone no empty value:
```yaml
a: A
```
```python
Ensure(load(yaml_snippet, Map({"a": EmptyNone() | Enum(["A", "B",])}))).equals({"a": "A"})
```
Combine Str with EmptyNone and Str is evaluated first:
```python
Ensure(load(yaml_snippet, Map({"a": Str() | EmptyNone()}))).equals({"a": ""})
```
Combine EmptyNone with Str and Str is evaluated last:
```python
Ensure(load(yaml_snippet, Map({"a": EmptyNone() | Str()}))).equals({"a": None})
```
Non-empty value:
```yaml
a: C
```
```python
load(yaml_snippet, Map({"a": Enum(["A", "B",]) | EmptyNone()}))
```
```python
strictyaml.exceptions.YAMLValidationError:
when expecting an empty value
found arbitrary text
in "<unicode string>", line 1, column 1:
a: C
^ (line: 1)
```
Serialize empty dict:
```python
print(as_document({"a": {}}, Map({"a": EmptyDict() | Str()})).as_yaml())
```
```yaml
a:
```
Serialize empty list:
```python
print(as_document({"a": []}, Map({"a": EmptyList() | Str()})).as_yaml())
```
```yaml
a:
```
Serialize None:
```python
print(as_document({"a": None}, Map({"a": EmptyNone() | Str()})).as_yaml())
```
```yaml
a:
```
!!! note "Executable specification"
Documentation automatically generated from
<a href="https://github.com/crdoconnor/strictyaml/blob/master/hitch/story/empty.story">empty.story
storytests.
|