Skip to content

Commit 429b348

Browse files
committed
fixes #439 by adding support for data classes
1 parent 5f25cc5 commit 429b348

File tree

2 files changed

+38
-0
lines changed

2 files changed

+38
-0
lines changed

deepdiff/model.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -905,6 +905,9 @@ def stringify_param(self, force=None):
905905
result = stringify_element(param, quote_str=self.quote_str)
906906
elif isinstance(param, tuple): # Currently only for numpy ndarrays
907907
result = ']['.join(map(repr, param))
908+
elif hasattr(param, '__dataclass_fields__'):
909+
attrs_to_values = [f"{key}={value}" for key, value in [(i, getattr(param, i)) for i in param.__dataclass_fields__]]
910+
result = f"{param.__class__.__name__}({','.join(attrs_to_values)})"
908911
else:
909912
candidate = repr(param)
910913
try:

tests/test_diff_text.py

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import re
66
import uuid
77
from enum import Enum
8+
from dataclasses import dataclass
89
from typing import List
910
from decimal import Decimal
1011
from deepdiff import DeepDiff
@@ -25,6 +26,11 @@ class MyEnum2(str, Enum):
2526
cake = "cake"
2627

2728

29+
@dataclass(frozen=True)
30+
class MyDataClass:
31+
val: int
32+
val2: int
33+
2834

2935
class TestDeepDiffText:
3036
"""DeepDiff Tests."""
@@ -2073,3 +2079,32 @@ class Bar(PydanticBaseModel):
20732079
diff = DeepDiff(t1, t2)
20742080
expected = {'values_changed': {'root.stuff[0].thing': {'new_value': 2, 'old_value': 1}}}
20752081
assert expected == diff
2082+
2083+
def test_dataclass1(self):
2084+
2085+
2086+
t1 = MyDataClass(1, 4)
2087+
t2 = MyDataClass(2, 4)
2088+
2089+
diff = DeepDiff(t1, t2, exclude_regex_paths=["any"])
2090+
assert {'values_changed': {'root.val': {'new_value': 2, 'old_value': 1}}} == diff
2091+
2092+
def test_dataclass2(self):
2093+
2094+
@dataclass(frozen=True)
2095+
class MyDataClass:
2096+
val: int
2097+
val2: int
2098+
2099+
t1 = {
2100+
MyDataClass(1, 4): 10,
2101+
MyDataClass(2, 4): 20,
2102+
}
2103+
2104+
t2 = {
2105+
MyDataClass(1, 4): 10,
2106+
MyDataClass(2, 4): 10,
2107+
}
2108+
2109+
diff = DeepDiff(t1, t2, exclude_regex_paths=["any"])
2110+
assert {'values_changed': {'root[MyDataClass(val=2,val2=4)]': {'new_value': 10, 'old_value': 20}}} == diff

0 commit comments

Comments
 (0)