Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions deepdiff/search.py
Original file line number Diff line number Diff line change
Expand Up @@ -236,6 +236,8 @@ def __search_dict(self,
parents_ids_added = add_to_frozen_set(parents_ids, item_id)

new_parent = parent_text % (parent, item_key_str)
if self.__skip_this(obj_child, new_parent):
continue
new_parent_cased = new_parent if self.case_sensitive else new_parent.lower()

str_item = str(item)
Expand Down
31 changes: 31 additions & 0 deletions tests/test_search.py
Original file line number Diff line number Diff line change
Expand Up @@ -254,6 +254,37 @@ def test_skip_dictionary_path(self):
result = {}
assert ds == result

@pytest.mark.parametrize('verbose_level', [1, 2])
@pytest.mark.parametrize('exclude', [
{'exclude_paths': ["root['container']['needle']"]},
{'exclude_paths': ["root[*]['needle']"]},
{'exclude_regex_paths': [r"\['needle'\]$"]},
])
def test_excluded_dictionary_key_is_not_reported(self, verbose_level, exclude):
obj = {'container': {'needle': {'nested': 'needle'}}, 'keep': 'needle'}
expected = {'matched_values': (
{"root['keep']": 'needle'} if verbose_level == 2 else {"root['keep']"}
)}

assert DeepSearch(obj, 'needle', verbose_level=verbose_level, **exclude) == expected

@pytest.mark.parametrize('verbose_level', [1, 2])
def test_excluded_attribute_name_is_not_reported(self, verbose_level):
obj = CustomClass('a', 'a')
expected = {'matched_values': (
{'root.b': 'a'} if verbose_level == 2 else {'root.b'}
)}

assert DeepSearch(obj, 'a', exclude_paths=['root.a'], verbose_level=verbose_level) == expected

@pytest.mark.parametrize('verbose_level', [1, 2])
def test_excluded_dictionary_value_type_does_not_report_key(self, verbose_level):
obj = {'needle': 1, 'needle_keep': 'needle'}
matches = {"root['needle_keep']": 'needle'} if verbose_level == 2 else {"root['needle_keep']"}
expected = {'matched_paths': matches, 'matched_values': matches}

assert DeepSearch(obj, 'needle', exclude_types=[int], verbose_level=verbose_level) == expected

def test_skip_type_str(self):
obj = "long string somewhere"
result = {}
Expand Down