Skip to content

Commit 127a39e

Browse files
committed
fixing search for ipaddress
1 parent 4f4c07d commit 127a39e

File tree

2 files changed

+24
-2
lines changed

2 files changed

+24
-2
lines changed

deepdiff/search.py

+4-1
Original file line numberDiff line numberDiff line change
@@ -306,12 +306,15 @@ def __search(self, obj, item, parent="root", parents_ids=frozenset()):
306306
if self.__skip_this(item, parent):
307307
return
308308

309-
elif isinstance(obj, strings) and isinstance(item, (strings, RE_COMPILED_TYPE, ipranges)):
309+
elif isinstance(obj, strings) and isinstance(item, (strings, RE_COMPILED_TYPE)):
310310
self.__search_str(obj, item, parent)
311311

312312
elif isinstance(obj, strings) and isinstance(item, numbers):
313313
return
314314

315+
elif isinstance(obj, ipranges):
316+
self.__search_str(str(obj), item, parent)
317+
315318
elif isinstance(obj, numbers):
316319
self.__search_numbers(obj, item, parent)
317320

tests/test_search.py

+20-1
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
#!/usr/bin/env python
22
import pytest
3+
import ipaddress
4+
import logging
5+
from typing import Union
36
from deepdiff import DeepSearch, grep
47
from datetime import datetime
5-
import logging
68
logging.disable(logging.CRITICAL)
79

810
item = "somewhere"
@@ -20,6 +22,19 @@ def __repr__(self):
2022
return self.__str__()
2123

2224

25+
class ClassWithIp:
26+
"""Class containing single data member to demonstrate deepdiff infinite iterate over IPv6Interface"""
27+
28+
def __init__(self, addr: str):
29+
self.field: Union[
30+
ipaddress.IPv4Network,
31+
ipaddress.IPv6Network,
32+
ipaddress.IPv4Interface,
33+
ipaddress.IPv6Interface,
34+
] = ipaddress.IPv6Network(addr)
35+
36+
37+
2338
class TestDeepSearch:
2439
"""DeepSearch Tests."""
2540

@@ -501,3 +516,7 @@ def test_grep_regex_in_string_in_tuple(self):
501516
item = "some.*"
502517
result = {"matched_values": {"root[3]"}}
503518
assert obj | grep(item, verbose_level=1, use_regexp=True) == result
519+
520+
def test_search_ip_addresses(self):
521+
obj1 = [ClassWithIp("2002:db8::/30"), ClassWithIp("2002:db8::/32")]
522+
assert obj1 | grep("2002:db8::/32") == {'matched_values': ['root[1].field']}

0 commit comments

Comments
 (0)