You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: CHANGELOG.md
+20-4Lines changed: 20 additions & 4 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,8 +1,24 @@
1
1
# DeepDiff Change log
2
2
3
+
- v8-7-0
4
+
- migration note:
5
+
- `to_dict()` and `to_json()` now accept a `verbose_level` parameter and always return a usable text-view dict. When the original view is `'tree'`, they default to `verbose_level=2` for full detail. The old `view_override` parameter is removed. To get the previous results, you will need to pass the explicit verbose_level to `to_json` and `to_dict` if you are using the tree view.
6
+
- Dropping support for Python 3.9
7
+
- Support for python 3.14
8
+
- Added support for callable `group_by` thanks to [echan5](https://github.com/echan5)
9
+
- Added `FlatDeltaDict` TypedDict for `to_flat_dicts` return type
10
+
- Fixed colored view display when all list items are removed thanks to [yannrouillard](https://github.com/yannrouillard)
11
+
- Fixed `hasattr()` swallowing `AttributeError` in `__slots__` handling for objects with `__getattr__` thanks to [tpvasconcelos](https://github.com/tpvasconcelos)
12
+
- Fixed `ignore_order=True` missing int-vs-float type changes
13
+
- Always use t1 path for reporting thanks to [devin13cox](https://github.com/devin13cox)
14
+
- Fixed `_convert_oversized_ints` failing on NamedTuples
15
+
- Fixed orjson `TypeError` for integers exceeding 64-bit range
16
+
- Fixed parameter bug in `to_flat_dicts` where `include_action_in_path` and `report_type_changes` were not being passed through
17
+
- Fixed `ignore_keys` issue in `detailed__dict__` thanks to [vitalis89](https://github.com/vitalis89)
18
+
- Fixed logarithmic similarity type hint thanks to [ljames8](https://github.com/ljames8)
19
+
- Added `Fraction` numeric support thanks to [akshat62](https://github.com/akshat62)
3
20
- v8-6-2
4
21
- Security fix (CVE-2026-33155): Prevent denial-of-service via crafted pickle payloads that trigger massive memory allocation through the REDUCE opcode. Size-sensitive callables like `bytes()` and `bytearray()` are now wrapped to reject allocations exceeding 128 MB.
5
-
6
22
- v8-6-1
7
23
- Patched security vulnerability in the Delta class which was vulnerable to class pollution via its constructor, and when combined with a gadget available in DeltaDiff itself, it could lead to Denial of Service and Remote Code Execution (via insecure Pickle deserialization).
8
24
@@ -21,7 +37,7 @@
21
37
- Added support for memoryview serialization
22
38
- Added support for bytes serialization (non-UTF8 compatible)
23
39
- Fixed bug where group_by with numbers would leak type info into group path reports
24
-
- Fixed bug in `_get_clean_to_keys_mapping without` explicit significant digits
40
+
- Fixed bug in `_get_clean_to_keys_mapping` without explicit significant digits
25
41
- Added support for python dict key serialization
26
42
- Enhanced support for IP address serialization with safe module imports
27
43
- Added development tooling improvements (pyright config, .envrc example)
@@ -30,7 +46,7 @@
30
46
- v8-5-0
31
47
- Updating deprecated pydantic calls
32
48
- Switching to pyproject.toml
33
-
- Fix for moving nested tables when using iterable_compare_func. by
49
+
- Fix for moving nested tables when using iterable_compare_func.
34
50
- Fix recursion depth limit when hashing numpy.datetime64
35
51
- Moving from legacy setuptools use to pyproject.toml
36
52
@@ -216,7 +232,7 @@
216
232
- v1-0-2: Checking for ImmutableMapping type instead of dict
217
233
- v1-0-1: Better ignore order support
218
234
- v1-0-0: Restructuring output to make it more useful. This is NOT backward compatible.
219
-
- v0-6-1: Fixiing iterables with unhashable when order is ignored
235
+
- v0-6-1: Fixing iterables with unhashable when order is ignored
220
236
- v0-6-0: Adding unicode support
221
237
- v0-5-9: Adding decimal support
222
238
- v0-5-8: Adding ignore order of unhashables support
**DeepDiff is now part of [Qluster](https://getqluster.com).**
10
+
11
+
*If you're building workflows around data validation and correction, [Qluster](https://getqluster.com) gives your team a structured way to manage rules, review failures, approve fixes, and reuse decisions—without building the entire system from scratch.*
12
+
9
13
## Modules
10
14
11
15
-[DeepDiff](https://zepworks.com/deepdiff/current/diff.html): Deep Difference of dictionaries, iterables, strings, and ANY other object.
@@ -15,57 +19,31 @@
15
19
-[Extract](https://zepworks.com/deepdiff/current/extract.html): Extract an item from a nested Python object using its path.
16
20
-[commandline](https://zepworks.com/deepdiff/current/commandline.html): Use DeepDiff from commandline.
Please check the [ChangeLog](CHANGELOG.md) file for the detailed information.
25
29
26
-
DeepDiff 8-6-2
27
-
-**Security (CVE-2026-33155):** Fixed a memory exhaustion DoS vulnerability in `_RestrictedUnpickler` by limiting the maximum allocation size for `bytes` and `bytearray` during deserialization.
28
-
29
-
DeepDiff 8-6-1
30
-
- Patched security vulnerability in the Delta class which was vulnerable to class pollution via its constructor, and when combined with a gadget available in DeltaDiff itself, it could lead to Denial of Service and Remote Code Execution (via insecure Pickle deserialization).
31
-
32
-
DeepDiff 8-6-0
33
-
34
-
- Added Colored View thanks to @mauvilsa
35
-
- Added support for applying deltas to NamedTuple thanks to @paulsc
36
-
- Fixed test_delta.py with Python 3.14 thanks to @Romain-Geissler-1A
37
-
- Added python property serialization to json
38
-
- Added ip address serialization
39
-
- Switched to UV from pip
40
-
- Added Claude.md
41
-
- Added uuid hashing thanks to @akshat62
42
-
- Added `ignore_uuid_types` flag to DeepDiff to avoid type reports when comparing UUID and string.
43
-
- Added comprehensive type hints across the codebase (multiple commits for better type safety)
44
-
- Added support for memoryview serialization
45
-
- Added support for bytes serialization (non-UTF8 compatible)
46
-
- Fixed bug where group_by with numbers would leak type info into group path reports
47
-
- Fixed bug in `_get_clean_to_keys_mapping without` explicit significant digits
48
-
- Added support for python dict key serialization
49
-
- Enhanced support for IP address serialization with safe module imports
50
-
- Added development tooling improvements (pyright config, .envrc example)
51
-
- Updated documentation and development instructions
52
-
53
-
54
-
DeepDiff 8-5-0
55
-
56
-
- Updating deprecated pydantic calls
57
-
- Switching to pyproject.toml
58
-
- Fix for moving nested tables when using iterable_compare_func. by
59
-
- Fix recursion depth limit when hashing numpy.datetime64
60
-
- Moving from legacy setuptools use to pyproject.toml
61
-
62
-
63
-
DeepDiff 8-4-2
64
-
65
-
- fixes the type hints for the base
66
-
- fixes summarize so if json dumps fails, we can still get a repr of the results
67
-
- adds ipaddress support
68
-
30
+
DeepDiff 9-0-0
31
+
- migration note:
32
+
-`to_dict()` and `to_json()` now accept a `verbose_level` parameter and always return a usable text-view dict. When the original view is `'tree'`, they default to `verbose_level=2` for full detail. The old `view_override` parameter is removed. To get the previous results, you will need to pass the explicit verbose_level to `to_json` and `to_dict` if you are using the tree view.
33
+
- Dropping support for Python 3.9
34
+
- Support for python 3.14
35
+
- Added support for callable `group_by` thanks to @echan5
36
+
- Added `FlatDeltaDict` TypedDict for `to_flat_dicts` return type
37
+
- Fixed colored view display when all list items are removed thanks to @yannrouillard
38
+
- Fixed `hasattr()` swallowing `AttributeError` in `__slots__` handling for objects with `__getattr__` thanks to @tpvasconcelos
39
+
- Fixed `ignore_order=True` missing int-vs-float type changes
40
+
- Always use t1 path for reporting thanks to @devin13cox
41
+
- Fixed `_convert_oversized_ints` failing on NamedTuples
42
+
- Fixed orjson `TypeError` for integers exceeding 64-bit range
43
+
- Fixed parameter bug in `to_flat_dicts` where `include_action_in_path` and `report_type_changes` were not being passed through
44
+
- Fixed `ignore_keys` issue in `detailed__dict__` thanks to @vitalis89
45
+
- Fixed logarithmic similarity type hint thanks to @ljames8
46
+
- Added `Fraction` numeric support thanks to @akshat62
69
47
70
48
## Installation
71
49
@@ -84,7 +62,7 @@ If you want to improve the performance of DeepDiff with certain functionalities
84
62
Install optional packages:
85
63
-[yaml](https://pypi.org/project/PyYAML/)
86
64
-[tomli](https://pypi.org/project/tomli/) (python 3.10 and older) and [tomli-w](https://pypi.org/project/tomli-w/) for writing
87
-
-[clevercsv](https://pypi.org/project/clevercsv/) for more rubust CSV parsing
65
+
-[clevercsv](https://pypi.org/project/clevercsv/) for more robust CSV parsing
88
66
-[orjson](https://pypi.org/project/orjson/) for speed and memory optimized parsing
89
67
-[pydantic](https://pypi.org/project/pydantic/)
90
68
@@ -93,17 +71,6 @@ Install optional packages:
93
71
94
72
<https://zepworks.com/deepdiff/current/>
95
73
96
-
### A message from Sep, the creator of DeepDiff
97
-
98
-
> 👋 Hi there,
99
-
>
100
-
> Thank you for using DeepDiff!
101
-
> As an engineer, I understand the frustration of wrestling with **unruly data** in pipelines.
102
-
> That's why I developed a new tool - [Qluster](https://qluster.ai/solution) to empower non-engineers to control and resolve data issues at scale autonomously and **stop bugging the engineers**! 🛠️
103
-
>
104
-
> If you are going through this pain now, I would love to give you [early access](https://www.qluster.ai/try-qluster) to Qluster and get your feedback.
105
-
106
-
107
74
# ChangeLog
108
75
109
76
Please take a look at the [CHANGELOG](CHANGELOG.md) file.
@@ -121,14 +88,14 @@ Please take a look at the [CHANGELOG](CHANGELOG.md) file.
121
88
122
89
- Method 1: Use [`uv`](https://github.com/astral-sh/uv) to install the dependencies: `uv sync --all-extras`.
123
90
- Method 2: Use pip: `pip install -e ".[cli,coverage,dev,docs,static,test]"`
124
-
5. Build `flit build`
91
+
5. Build `uv build`
125
92
126
93
# Contribute
127
94
128
95
1. Please make your PR against the dev branch
129
96
2. Please make sure that your PR has tests. Since DeepDiff is used in many sensitive data driven projects, we strive to maintain around 100% test coverage on the code.
130
97
131
-
Please run `pytest --cov=deepdiff --runslow` to see the coverage report. Note that the `--runslow` flag will run some slow tests too. In most cases you only want to run the fast tests which so you wont add the `--runslow` flag.
98
+
Please run `pytest --cov=deepdiff --runslow` to see the coverage report. Note that the `--runslow` flag will run some slow tests too. In most cases you only want to run the fast tests which so you won't add the `--runslow` flag.
132
99
133
100
Or to see a more user friendly version, please run: `pytest --cov=deepdiff --cov-report term-missing --runslow`.
0 commit comments