Skip to content

Commit 2155042

Browse files
authored
Merge pull request #579 from qlustered/dev
9.0.0
2 parents 0d07ec2 + dc70684 commit 2155042

99 files changed

Lines changed: 8404 additions & 6944 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.bumpversion.cfg

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
[bumpversion]
2-
current_version = 8.6.2
3-
commit = True
4-
tag = True
2+
current_version = 9.0.0
3+
commit = False
4+
tag = False
55
tag_name = {new_version}
66

77
[bumpversion:file:pyproject.toml]

.github/ISSUE_TEMPLATE/bug_report.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ A clear and concise description of what you expected to happen.
2121
**OS, DeepDiff version and Python version (please complete the following information):**
2222
- OS: [e.g. Ubuntu]
2323
- Version [e.g. 20LTS]
24-
- Python Version [e.g. 3.9.12]
24+
- Python Version [e.g. 3.10.12]
2525
- DeepDiff Version [e.g. 5.8.0]
2626

2727
**Additional context**

.github/workflows/main.yaml

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,10 @@ jobs:
88
build:
99
runs-on: ubuntu-latest
1010
env:
11-
DEFAULT_PYTHON: '3.12'
11+
DEFAULT_PYTHON: '3.14'
1212
strategy:
1313
matrix:
14-
python-version: ['3.9','3.10','3.11','3.12','3.13']
14+
python-version: ['3.10','3.11','3.12','3.13','3.14']
1515
architecture: ['x64']
1616

1717
steps:
@@ -29,18 +29,18 @@ jobs:
2929
run: pip install nox==2025.5.1
3030

3131
- name: Lint with flake8
32-
if: ${{ matrix.python-version == '3.12' }}
32+
if: ${{ matrix.python-version == '3.14' }}
3333
run: |
3434
nox -s flake8 -- deepdiff --count --select=E9,F63,F7,F82 --show-source --statistics
3535
nox -s flake8 -- deepdiff --count --exit-zero --max-complexity=26 --max-line-length=250 --statistics
3636
3737
- name: Test with pytest (no coverage)
38-
if: ${{ matrix.python-version != '3.12' }}
38+
if: ${{ matrix.python-version != '3.14' }}
3939
run: |
4040
nox -s pytest-${{ matrix.python-version }} -- --benchmark-disable tests/
4141
4242
- name: Test with pytest (+ coverage)
43-
if: ${{ matrix.python-version == '3.12' }}
43+
if: ${{ matrix.python-version == '3.14' }}
4444
run: |
4545
nox -s pytest-${{ matrix.python-version }} -- \
4646
--benchmark-disable \
@@ -49,7 +49,7 @@ jobs:
4949
tests/ --runslow
5050
5151
- name: Upload coverage
52-
if: ${{ matrix.python-version == '3.12' }}
52+
if: ${{ matrix.python-version == '3.14' }}
5353
uses: codecov/codecov-action@v4
5454
with:
5555
token: ${{ secrets.CODECOV_TOKEN }}

AGENTS.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
CLAUDE.md

AUTHORS.md

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ Authors in order of the timeline of their contributions:
3434
- Stian Jensen [stianjensen](https://github.com/stianjensen) for improving ignoring of NoneType in diff
3535
- Florian Klien [flowolf](https://github.com/flowolf) for adding math_epsilon
3636
- Tim Klein [timjklein36](https://github.com/timjklein36) for retaining the order of multiple dictionary items added via Delta.
37-
- Wilhelm Schürmann[wbsch](https://github.com/wbsch) for fixing the typo with yml files.
37+
- Wilhelm Schürmann [wbsch](https://github.com/wbsch) for fixing the typo with yml files.
3838
- [lyz-code](https://github.com/lyz-code) for adding support for regular expressions in DeepSearch and strict_checking feature in DeepSearch.
3939
- [dtorres-sf](https://github.com/dtorres-sf) for adding the option for custom compare function
4040
- Tony Wang [Tony-Wang](https://github.com/Tony-Wang) for bugfix: verbose_level==0 should disable values_changes.
@@ -77,3 +77,12 @@ Authors in order of the timeline of their contributions:
7777
- [Enji Cooper](https://github.com/ngie-eign) for converting legacy setuptools use to pyproject.toml
7878
- [Diogo Correia](https://github.com/diogotcorreia) for reporting security vulnerability in Delta and DeepDiff that could allow remote code execution.
7979
- [am-periphery](https://github.com/am-periphery) for reporting CVE-2026-33155: denial-of-service via crafted pickle payloads triggering massive memory allocation.
80+
- [echan5](https://github.com/echan5) for adding callable `group_by` support.
81+
- [yannrouillard](https://github.com/yannrouillard) for fixing colored view display when all list items are removed.
82+
- [tpvasconcelos](https://github.com/tpvasconcelos) for fixing `__slots__` handling for objects with `__getattr__`.
83+
- [devin13cox](https://github.com/devin13cox) for always using t1 path for reporting.
84+
- [vitalis89](https://github.com/vitalis89) for fixing `ignore_keys` issue in `detailed__dict__`.
85+
- [ljames8](https://github.com/ljames8) for fixing logarithmic similarity type hint.
86+
- [srini047](https://github.com/srini047) for fixing README typo.
87+
- [Nagato-Yuzuru](https://github.com/Nagato-Yuzuru) for colored view tests.
88+
- [akshat62](https://github.com/akshat62) for adding Fraction numeric support.

CHANGELOG.md

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,24 @@
11
# DeepDiff Change log
22

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)
320
- v8-6-2
421
- 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-
622
- v8-6-1
723
- 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).
824

@@ -21,7 +37,7 @@
2137
- Added support for memoryview serialization
2238
- Added support for bytes serialization (non-UTF8 compatible)
2339
- 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
2541
- Added support for python dict key serialization
2642
- Enhanced support for IP address serialization with safe module imports
2743
- Added development tooling improvements (pyright config, .envrc example)
@@ -30,7 +46,7 @@
3046
- v8-5-0
3147
- Updating deprecated pydantic calls
3248
- 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.
3450
- Fix recursion depth limit when hashing numpy.datetime64
3551
- Moving from legacy setuptools use to pyproject.toml
3652

@@ -216,7 +232,7 @@
216232
- v1-0-2: Checking for ImmutableMapping type instead of dict
217233
- v1-0-1: Better ignore order support
218234
- 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
220236
- v0-6-0: Adding unicode support
221237
- v0-5-9: Adding decimal support
222238
- v0-5-8: Adding ignore order of unhashables support

CITATION.cff

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,6 @@ authors:
55
given-names: "Sep"
66
orcid: "https://orcid.org/0009-0009-5828-4345"
77
title: "DeepDiff"
8-
version: 8.6.2
9-
date-released: 2024
8+
version: 9.0.0
9+
date-released: 2026
1010
url: "https://github.com/seperman/deepdiff"

CLAUDE.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ Examples:
6262
source ~/.venvs/deep/bin/activate && pytest
6363
```
6464
3. **Running module commands without venv**: Commands like `capi run`, `cettings shell`, etc. all require venv to be activated first
65+
4. **Using `pip` instead of `uv pip`**: This project uses `uv` for package management. Always use `uv pip` instead of `pip`.
6566

6667

6768
### Slow quality checks only to run before creating a build
@@ -101,7 +102,7 @@ nox
101102

102103
## Development Notes
103104

104-
- **Python Support**: 3.9+ and PyPy3
105+
- **Python Support**: 3.10+ and PyPy3
105106
- **Main Branch**: `master` (PRs typically go to `dev` branch)
106107
- **Build System**: Modern `pyproject.toml` with `flit_core`
107108
- **Dependencies**: Core dependency is `orderly-set>=5.4.1,<6`

LICENSE

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
The MIT License (MIT)
22

3-
Copyright (c) 2014 - 2021 Sep Dehpour (Seperman) and contributors
4-
www.zepworks.com
3+
Copyright (c) 2014 - 2026 Sep Dehpour (Seperman) and contributors
4+
getqluster.com
5+
zepworks.com
56

67
Permission is hereby granted, free of charge, to any person obtaining a copy
78
of this software and associated documentation files (the "Software"), to deal

README.md

Lines changed: 27 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,15 @@
1-
# DeepDiff v 8.6.2
1+
# DeepDiff v 9.0.0
22

33
![Downloads](https://img.shields.io/pypi/dm/deepdiff.svg?style=flat)
44
![Python Versions](https://img.shields.io/pypi/pyversions/deepdiff.svg?style=flat)
55
![License](https://img.shields.io/pypi/l/deepdiff.svg?version=latest)
66
[![Build Status](https://github.com/seperman/deepdiff/workflows/Unit%20Tests/badge.svg)](https://github.com/seperman/deepdiff/actions)
77
[![codecov](https://codecov.io/gh/seperman/deepdiff/branch/master/graph/badge.svg?token=KkHZ3siA3m)](https://codecov.io/gh/seperman/deepdiff)
88

9+
**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+
913
## Modules
1014

1115
- [DeepDiff](https://zepworks.com/deepdiff/current/diff.html): Deep Difference of dictionaries, iterables, strings, and ANY other object.
@@ -15,57 +19,31 @@
1519
- [Extract](https://zepworks.com/deepdiff/current/extract.html): Extract an item from a nested Python object using its path.
1620
- [commandline](https://zepworks.com/deepdiff/current/commandline.html): Use DeepDiff from commandline.
1721

18-
Tested on Python 3.9+ and PyPy3.
22+
Tested on Python 3.10+ and PyPy3.
1923

20-
- **[Documentation](https://zepworks.com/deepdiff/8.6.2/)**
24+
- **[Documentation](https://zepworks.com/deepdiff/9.0.0/)**
2125

2226
## What is new?
2327

2428
Please check the [ChangeLog](CHANGELOG.md) file for the detailed information.
2529

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
6947

7048
## Installation
7149

@@ -84,7 +62,7 @@ If you want to improve the performance of DeepDiff with certain functionalities
8462
Install optional packages:
8563
- [yaml](https://pypi.org/project/PyYAML/)
8664
- [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
8866
- [orjson](https://pypi.org/project/orjson/) for speed and memory optimized parsing
8967
- [pydantic](https://pypi.org/project/pydantic/)
9068

@@ -93,17 +71,6 @@ Install optional packages:
9371

9472
<https://zepworks.com/deepdiff/current/>
9573

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-
10774
# ChangeLog
10875

10976
Please take a look at the [CHANGELOG](CHANGELOG.md) file.
@@ -121,14 +88,14 @@ Please take a look at the [CHANGELOG](CHANGELOG.md) file.
12188

12289
- Method 1: Use [`uv`](https://github.com/astral-sh/uv) to install the dependencies: `uv sync --all-extras`.
12390
- Method 2: Use pip: `pip install -e ".[cli,coverage,dev,docs,static,test]"`
124-
5. Build `flit build`
91+
5. Build `uv build`
12592

12693
# Contribute
12794

12895
1. Please make your PR against the dev branch
12996
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.
13097

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.
13299

133100
Or to see a more user friendly version, please run: `pytest --cov=deepdiff --cov-report term-missing --runslow`.
134101

0 commit comments

Comments
 (0)