Skip to content

Commit e846e94

Browse files
committed
Merge branch 'dev' of github.com:seperman/deepdiff into dev
2 parents 96ebb74 + 2ccf7db commit e846e94

File tree

5 files changed

+42
-2
lines changed

5 files changed

+42
-2
lines changed

AUTHORS.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,3 +47,4 @@ Authors in order of the timeline of their contributions:
4747
- Mikhail Khviyuzov [mskhviyu](https://github.com/mskhviyu) for Exclude obj callback strict.
4848
- [dtorres-sf](https://github.com/dtorres-sf) for the fix for diffing using iterable_compare_func with nested objects.
4949
- [Enric Pou](https://github.com/epou) for bug fix of ValueError when using Decimal 0.x
50+
- [Uwe Fladrich] (https://github.com/uwefladrich) for fixing bug when diff'ing non-sequence iterables

deepdiff/diff.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
from enum import Enum
1212
from copy import deepcopy
1313
from math import isclose as is_close
14-
from collections.abc import Mapping, Iterable
14+
from collections.abc import Mapping, Iterable, Sequence
1515
from collections import defaultdict
1616
from itertools import zip_longest
1717
from ordered_set import OrderedSet
@@ -727,7 +727,13 @@ def _diff_iterable_in_order(self, level, parents_ids=frozenset(), _original_type
727727
else:
728728
child_relationship_class = NonSubscriptableIterableRelationship
729729

730-
if self._all_values_basic_hashable(level.t1) and self._all_values_basic_hashable(level.t2) and self.iterable_compare_func is None:
730+
if (
731+
isinstance(level.t1, Sequence)
732+
and isinstance(level.t2, Sequence)
733+
and self._all_values_basic_hashable(level.t1)
734+
and self._all_values_basic_hashable(level.t2)
735+
and self.iterable_compare_func is None
736+
):
731737
local_tree_pass = TreeResult()
732738
self._diff_ordered_iterable_by_difflib(
733739
level,

requirements-dev-3.7.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,3 +7,4 @@ ipdb==0.13.9
77
numpy==1.21.6
88
pytest==7.1.2
99
python-dotenv==0.20.0
10+
python-dateutil==2.8.2

requirements-dev.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,3 +13,4 @@ watchdog==2.2.0
1313
Sphinx==5.3.0
1414
sphinx-sitemap==2.2.1
1515
flake8==6.0.0
16+
python-dateutil==2.8.2

tests/test_diff_text.py

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1713,3 +1713,34 @@ def __thing2(self):
17131713
}
17141714

17151715
assert expected2 == diff2
1716+
1717+
def test_diffs_rrules(self):
1718+
1719+
from dateutil.rrule import MONTHLY, rrule
1720+
1721+
d = DeepDiff(
1722+
rrule(freq=MONTHLY, count=5, dtstart=datetime.datetime(2014, 12, 31)),
1723+
rrule(freq=MONTHLY, count=4, dtstart=datetime.datetime(2011, 12, 31)),
1724+
)
1725+
1726+
assert d == {
1727+
"values_changed": {
1728+
"root[0]": {
1729+
"new_value": datetime.datetime(2011, 12, 31, 0, 0),
1730+
"old_value": datetime.datetime(2014, 12, 31, 0, 0),
1731+
},
1732+
"root[1]": {
1733+
"new_value": datetime.datetime(2012, 1, 31, 0, 0),
1734+
"old_value": datetime.datetime(2015, 1, 31, 0, 0),
1735+
},
1736+
"root[2]": {
1737+
"new_value": datetime.datetime(2012, 3, 31, 0, 0),
1738+
"old_value": datetime.datetime(2015, 3, 31, 0, 0),
1739+
},
1740+
"root[3]": {
1741+
"new_value": datetime.datetime(2012, 5, 31, 0, 0),
1742+
"old_value": datetime.datetime(2015, 5, 31, 0, 0),
1743+
},
1744+
},
1745+
"iterable_item_removed": {"root[4]": datetime.datetime(2015, 7, 31, 0, 0)},
1746+
}

0 commit comments

Comments
 (0)