Skip to content

Commit 10cb342

Browse files
committed
Handle one more case where NamedTuple has a frozenset.
1 parent d5f23df commit 10cb342

File tree

2 files changed

+15
-2
lines changed

2 files changed

+15
-2
lines changed

deepdiff/delta.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -719,7 +719,12 @@ def _do_set_or_frozenset_item(self, items, func):
719719
obj = self._get_elem_and_compare_to_old_value(
720720
parent, path_for_err_reporting=path, expected_old_value=None, elem=elem, action=action, forced_old_value=set())
721721
new_value = getattr(obj, func)(value)
722-
self._simple_set_elem_value(parent, path_for_err_reporting=path, elem=elem, value=new_value, action=action)
722+
if hasattr(parent, '_fields') and hasattr(parent, '_replace'):
723+
# Handle parent NamedTuple by creating a new instance with _replace(). Will not work with nested objects.
724+
new_parent = parent._replace(**{elem: new_value})
725+
self.root = new_parent
726+
else:
727+
self._simple_set_elem_value(parent, path_for_err_reporting=path, elem=elem, value=new_value, action=action)
723728

724729
def _do_ignore_order_get_old(self, obj, remove_indexes_per_path, fixed_indexes_values, path_for_err_reporting):
725730
"""

tests/test_delta.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -636,7 +636,15 @@ class Point(NamedTuple):
636636
delta = Delta(diff)
637637
assert p2 == p1 + delta
638638

639-
639+
def test_namedtuple_frozenset_add_delta(self):
640+
class Article(NamedTuple):
641+
tags: frozenset
642+
a1 = Article(frozenset(["a" ]))
643+
a2 = Article(frozenset(["a", "b"]))
644+
diff = DeepDiff(a1, a2)
645+
delta = Delta(diff)
646+
assert a2 == a1 + delta
647+
640648
picklalbe_obj_without_item = PicklableClass(11)
641649
del picklalbe_obj_without_item.item
642650

0 commit comments

Comments
 (0)