@@ -283,14 +283,12 @@ def sqlmodel_table_construct(
283
283
# End SQLModel override
284
284
return self_instance
285
285
286
- def sqlmodel_validate (
286
+ def _sqlmodel_validate (
287
287
cls : Type [_TSQLModel ],
288
288
obj : Any ,
289
289
* ,
290
- strict : Union [bool , None ] = None ,
291
- from_attributes : Union [bool , None ] = None ,
292
- context : Union [Dict [str , Any ], None ] = None ,
293
290
update : Union [Dict [str , Any ], None ] = None ,
291
+ validator : Callable [[Any , _TSQLModel ], None ],
294
292
) -> _TSQLModel :
295
293
if not is_table_model_class (cls ):
296
294
new_obj : _TSQLModel = cls .__new__ (cls )
@@ -308,13 +306,7 @@ def sqlmodel_validate(
308
306
use_obj = {** obj , ** update }
309
307
elif update :
310
308
use_obj = ObjectWithUpdateWrapper (obj = obj , update = update )
311
- cls .__pydantic_validator__ .validate_python (
312
- use_obj ,
313
- strict = strict ,
314
- from_attributes = from_attributes ,
315
- context = context ,
316
- self_instance = new_obj ,
317
- )
309
+ validator (use_obj , new_obj )
318
310
# Capture fields set to restore it later
319
311
fields_set = new_obj .__pydantic_fields_set__ .copy ()
320
312
if not is_table_model_class (cls ):
@@ -335,6 +327,46 @@ def sqlmodel_validate(
335
327
setattr (new_obj , key , value )
336
328
return new_obj
337
329
330
+ def sqlmodel_validate_python (
331
+ cls : Type [_TSQLModel ],
332
+ obj : Any ,
333
+ * ,
334
+ strict : Union [bool , None ] = None ,
335
+ from_attributes : Union [bool , None ] = None ,
336
+ context : Union [Dict [str , Any ], None ] = None ,
337
+ update : Union [Dict [str , Any ], None ] = None ,
338
+ ) -> _TSQLModel :
339
+ def validate (use_obj : Any , new_obj : _TSQLModel ) -> None :
340
+ cls .__pydantic_validator__ .validate_python (
341
+ use_obj ,
342
+ strict = strict ,
343
+ from_attributes = from_attributes ,
344
+ context = context ,
345
+ self_instance = new_obj ,
346
+ )
347
+
348
+ return _sqlmodel_validate (cls , obj , update = update , validator = validate )
349
+
350
+ def sqlmodel_validate_json (
351
+ cls : Type [_TSQLModel ],
352
+ json_data : Union [str , bytes , bytearray ],
353
+ * ,
354
+ strict : Union [bool , None ] = None ,
355
+ context : Union [Dict [str , Any ], None ] = None ,
356
+ update : Union [Dict [str , Any ], None ] = None ,
357
+ ) -> _TSQLModel :
358
+ def validate (use_obj : Any , new_obj : _TSQLModel ) -> None :
359
+ cls .__pydantic_validator__ .validate_json (
360
+ use_obj ,
361
+ strict = strict ,
362
+ context = context ,
363
+ self_instance = new_obj ,
364
+ )
365
+
366
+ return _sqlmodel_validate (
367
+ cls = cls , obj = json_data , update = update , validator = validate
368
+ )
369
+
338
370
def sqlmodel_init (* , self : "SQLModel" , data : Dict [str , Any ]) -> None :
339
371
old_dict = self .__dict__ .copy ()
340
372
if not is_table_model_class (self .__class__ ):
@@ -496,7 +528,7 @@ def _calculate_keys(
496
528
497
529
return keys
498
530
499
- def sqlmodel_validate (
531
+ def sqlmodel_validate_python (
500
532
cls : Type [_TSQLModel ],
501
533
obj : Any ,
502
534
* ,
@@ -542,6 +574,19 @@ def sqlmodel_validate(
542
574
m ._init_private_attributes () # type: ignore[attr-defined] # noqa
543
575
return m
544
576
577
+ def sqlmodel_validate_json (
578
+ cls : Type [_TSQLModel ],
579
+ json_data : Union [str , bytes , bytearray ],
580
+ * ,
581
+ strict : Union [bool , None ] = None ,
582
+ context : Union [Dict [str , Any ], None ] = None ,
583
+ update : Union [Dict [str , Any ], None ] = None ,
584
+ ) -> _TSQLModel :
585
+ # We're not doing any real json validation for pydantic v1.
586
+ return sqlmodel_validate_python (
587
+ cls = cls , obj = json_data , strict = strict , context = context , update = update
588
+ )
589
+
545
590
def sqlmodel_init (* , self : "SQLModel" , data : Dict [str , Any ]) -> None :
546
591
values , fields_set , validation_error = validate_model (self .__class__ , data )
547
592
# Only raise errors if not a SQLModel model
0 commit comments