@@ -80,6 +80,9 @@ def _report_progress(_stats, progress_logger, duration):
8080PURGE_LEVEL_RANGE_MSG = 'cache_purge_level should be 0, 1, or 2.'
8181_ENABLE_CACHE_EVERY_X_DIFF = '_ENABLE_CACHE_EVERY_X_DIFF'
8282
83+ model_fields_set = frozenset (["model_fields_set" ])
84+
85+
8386# What is the threshold to consider 2 items to be pairs. Only used when ignore_order = True.
8487CUTOFF_DISTANCE_FOR_PAIRS_DEFAULT = 0.3
8588
@@ -437,13 +440,16 @@ def _diff_enum(self, level, parents_ids=frozenset(), local_tree=None):
437440 local_tree = local_tree ,
438441 )
439442
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 ):
441444 """Difference of 2 objects"""
442445 processing_error = False
443446 try :
444447 if is_namedtuple :
445448 t1 = level .t1 ._asdict ()
446449 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 )
447453 elif all ('__dict__' in dir (t ) for t in level ):
448454 t1 = detailed__dict__ (level .t1 , ignore_private_variables = self .ignore_private_variables )
449455 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=
16781684 self ._diff_numpy_array (level , parents_ids , local_tree = local_tree )
16791685
16801686 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 )
16821688
16831689 elif isinstance (level .t1 , Iterable ):
16841690 self ._diff_iterable (level , parents_ids , _original_type = _original_type , local_tree = local_tree )
0 commit comments