Skip to content

Commit b2ec94d

Browse files
committed
allow default value in enums
1 parent 1df45bf commit b2ec94d

File tree

3 files changed

+11
-6
lines changed

3 files changed

+11
-6
lines changed

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[project]
22
name = 'normalize_json'
3-
version = '0.0.16'
3+
version = '0.0.17'
44
authors = [
55
{ name = 'João Gabriel Santos', email = '[email protected]' }
66
]

src/normalize_json/normalize.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -261,19 +261,21 @@ def translate(
261261
if node.get('array') and not isinstance(value, list):
262262
value = [value]
263263

264+
default = node.get('default')
264265
if err := check_types(node, value, modifiers):
265-
raise ValueError('check_types @ %s (got "%s", expected "%s")' % (original_name, *err))
266+
if not default:
267+
raise ValueError('check_types @ %s (got "%s", expected "%s")' % (original_name, *err))
266268

267269
if (node_enum := node.get('enum')) and value != None:
268270
if node.get('array'):
269271
if not isinstance(value, list):
270272
raise TypeError()
271273
value = [
272-
node.get('enum', {}).get(v)
274+
node.get('enum', {}).get(v, default)
273275
for v in typing.cast(list[str], value)
274276
]
275277
else:
276-
value = node_enum.get(typing.cast(typing.Any, value))
278+
value = node_enum.get(typing.cast(typing.Any, value), default)
277279

278280
ret[original_name] = value
279281

tests/translate.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -131,15 +131,16 @@
131131
'pago': 'paid',
132132
'pendente': 'pending',
133133
'recusado': 'refused',
134-
}
134+
},
135135
},
136136
'statuses': {
137137
'array': True,
138138
'enum': {
139139
'pago': 'paid',
140140
'pendente': 'pending',
141141
'recusado': 'refused',
142-
}
142+
},
143+
'default': 'pending'
143144
},
144145
'items': {
145146
'map': 'items',
@@ -181,6 +182,7 @@
181182
'statuses': [
182183
'pendente',
183184
'recusado',
185+
'invalid',
184186
],
185187
'items': {
186188
'meta': {
@@ -229,6 +231,7 @@ def test_translate_enums(self):
229231
self.assertEqual(result['status'], 'paid')
230232
self.assertEqual(result['statuses'][0], 'pending')
231233
self.assertEqual(result['statuses'][1], 'refused')
234+
self.assertEqual(result['statuses'][2], 'pending')
232235

233236

234237
def test_translate_substitute(self):

0 commit comments

Comments
 (0)