@@ -80,6 +80,9 @@ def _report_progress(_stats, progress_logger, duration):
80
80
PURGE_LEVEL_RANGE_MSG = 'cache_purge_level should be 0, 1, or 2.'
81
81
_ENABLE_CACHE_EVERY_X_DIFF = '_ENABLE_CACHE_EVERY_X_DIFF'
82
82
83
+ model_fields_set = frozenset (["model_fields_set" ])
84
+
85
+
83
86
# What is the threshold to consider 2 items to be pairs. Only used when ignore_order = True.
84
87
CUTOFF_DISTANCE_FOR_PAIRS_DEFAULT = 0.3
85
88
@@ -437,13 +440,16 @@ def _diff_enum(self, level, parents_ids=frozenset(), local_tree=None):
437
440
local_tree = local_tree ,
438
441
)
439
442
440
- def _diff_obj (self , level , parents_ids = frozenset (), is_namedtuple = False , local_tree = None ):
443
+ def _diff_obj (self , level , parents_ids = frozenset (), is_namedtuple = False , local_tree = None , is_pydantic_object = False ):
441
444
"""Difference of 2 objects"""
442
445
processing_error = False
443
446
try :
444
447
if is_namedtuple :
445
448
t1 = level .t1 ._asdict ()
446
449
t2 = level .t2 ._asdict ()
450
+ elif is_pydantic_object :
451
+ t1 = detailed__dict__ (level .t1 , ignore_private_variables = self .ignore_private_variables , ignore_keys = model_fields_set )
452
+ t2 = detailed__dict__ (level .t2 , ignore_private_variables = self .ignore_private_variables , ignore_keys = model_fields_set )
447
453
elif all ('__dict__' in dir (t ) for t in level ):
448
454
t1 = detailed__dict__ (level .t1 , ignore_private_variables = self .ignore_private_variables )
449
455
t2 = detailed__dict__ (level .t2 , ignore_private_variables = self .ignore_private_variables )
@@ -1678,7 +1684,7 @@ def _diff(self, level, parents_ids=frozenset(), _original_type=None, local_tree=
1678
1684
self ._diff_numpy_array (level , parents_ids , local_tree = local_tree )
1679
1685
1680
1686
elif isinstance (level .t1 , PydanticBaseModel ):
1681
- self ._diff_obj (level , parents_ids , local_tree = local_tree )
1687
+ self ._diff_obj (level , parents_ids , local_tree = local_tree , is_pydantic_object = True )
1682
1688
1683
1689
elif isinstance (level .t1 , Iterable ):
1684
1690
self ._diff_iterable (level , parents_ids , _original_type = _original_type , local_tree = local_tree )
0 commit comments