diff --git a/deepdiff/helper.py b/deepdiff/helper.py index a9b28b19..4c4b10e9 100644 --- a/deepdiff/helper.py +++ b/deepdiff/helper.py @@ -309,7 +309,9 @@ def type_in_type_group(item, type_group): def type_is_subclass_of_type_group(item, type_group): - return isinstance(item, type_group) or issubclass(item, type_group) or type_in_type_group(item, type_group) + return isinstance(item, type_group) \ + or (isinstance(item, type) and issubclass(item, type_group)) \ + or type_in_type_group(item, type_group) def get_doc(doc_filename): diff --git a/tests/test_diff_text.py b/tests/test_diff_text.py index 2585942b..856b6c1f 100755 --- a/tests/test_diff_text.py +++ b/tests/test_diff_text.py @@ -570,6 +570,33 @@ class ClassB: result = {'attribute_removed': ['root.y']} assert result == ddiff + def test_custom_class_changes_none_when_ignore_type(self): + ddiff = DeepDiff({'a': None}, {'a': 1}, ignore_type_subclasses=True, ignore_type_in_groups=[(int, float)]) + result = { + 'type_changes': { + "root['a']": { + 'old_type': type(None), + 'new_type': int, + 'old_value': None, + 'new_value': 1 + } + } + } + assert result == ddiff + + ddiff = DeepDiff({'a': 1}, {'a': None}, ignore_type_subclasses=True, ignore_type_in_groups=[(int, float)]) + result = { + 'type_changes': { + "root['a']": { + 'old_type': int, + 'new_type': type(None), + 'old_value': 1, + 'new_value': None + } + } + } + assert result == ddiff + def test_custom_object_changes_when_ignore_type_in_groups(self): class ClassA: def __init__(self, x, y):