@@ -189,7 +189,10 @@ def _handle_list_of_dataclasses(self, value, _type):
189
189
pass
190
190
return value
191
191
192
- def _process_field_ (self , name : str , value : Any , f : Field ) -> dict [Any ]:
192
+ def _process_field_ (
193
+ self ,
194
+ name : str , value : Any , f : Field
195
+ ) -> Optional [dict [Any , Any ]]:
193
196
_type = f .type
194
197
_encoder = f .metadata .get ('encoder' )
195
198
new_val = value
@@ -203,7 +206,8 @@ def _process_field_(self, name: str, value: Any, f: Field) -> dict[Any]:
203
206
204
207
if is_primitive (_type ):
205
208
try :
206
- new_val = parse_basic (f .type , value , _encoder )
209
+ if value is not None :
210
+ new_val = parse_basic (f .type , value , _encoder )
207
211
return self ._validation_ (name , new_val , f , _type )
208
212
except (TypeError , ValueError ) as ex :
209
213
raise ValueError (
@@ -266,7 +270,7 @@ def _validation_(
266
270
name : str ,
267
271
value : Any ,
268
272
f : Field , _type : Any
269
- ) -> Optional [Any ]:
273
+ ) -> Optional [dict [ Any , Any ] ]:
270
274
"""
271
275
_validation_.
272
276
TODO: cover validations as length, not_null, required, max, min, etc
@@ -276,7 +280,11 @@ def _validation_(
276
280
setattr (self , name , value )
277
281
278
282
if val_type == type or value == _type or is_empty (value ):
279
- self ._field_checks_ (f , name , value )
283
+ try :
284
+ self ._field_checks_ (f , name , value )
285
+ return True
286
+ except (ValueError , TypeError ):
287
+ raise
280
288
else :
281
289
# capturing other errors from validator:
282
290
return _validation (f , name , value , _type , val_type )
0 commit comments