diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 3882c1d6a5f7085b95224122a13c1f68cbf29cd1..538951f70f29414ca13f7b301b665a4ca86d2448 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,6 +1,6 @@ # Official language image. Look for the different tagged releases at: # https://hub.docker.com/r/library/python/tags/ -image: ${CI_DEPENDENCY_PROXY_DIRECT_GROUP_IMAGE_PREFIX}/python:latest +image: ${CI_DEPENDENCY_PROXY_DIRECT_GROUP_IMAGE_PREFIX}/python:3.11 # Change pip's cache directory to be inside the project directory since we can # only cache local items. diff --git a/ipranges.py b/ipranges.py index bcbef0a3b1c7172d393f0c57cd98567f8ec8b13d..3c8e61ed90de5b8b391d16f406d1858233009ee9 100644 --- a/ipranges.py +++ b/ipranges.py @@ -4,7 +4,7 @@ # Copyright (c) 2016, CESNET, z. s. p. o. # Use of this source is governed by an ISC license, see LICENSE file. -__version__ = '0.1.12' +__version__ = '0.1.13' __author__ = 'Pavel Kácha <pavel.kacha@cesnet.cz>' import socket @@ -26,7 +26,16 @@ class Range(object): return self.high() - self.low() + 1 def __eq__(self, other): - return (self.low() == other.low() and self.high() == other.high()) + if ( + hasattr(self, "single") + and hasattr(other, "single") + and ( + issubclass(self.single, other.single) + or issubclass(other.single, self.single) + ) + ): + return self.low() == other.low() and self.high() == other.high() + return False def __ne__(self, other): return not self.__eq__(other) diff --git a/test_ipranges.py b/test_ipranges.py index 8ad09556becd8b2a830ed9506c741a26300b0865..ef9b29eaf7c8658af59cf6c89c677f113573a55b 100755 --- a/test_ipranges.py +++ b/test_ipranges.py @@ -108,6 +108,14 @@ class TestIPRange(unittest.TestCase): self.assertFalse(ip2 != ip3) self.assertFalse(ip1 != ip3) + def test4OtherObject(self): + ip1 = IP4Net("192.0.2.65/32") + ip2 = IP4Range("192.0.2.65-192.0.2.65") + ip3 = IP4("192.0.2.65") + self.assertFalse(ip1 == [ip1]) + self.assertFalse(ip2 == 1) + self.assertFalse(ip3 == "192.0.2.65") + def test6SameNetRange(self): net1 = IP6Net("2001:db8:220:1::/64") net2 = IP6Range("2001:db8:220:1::-2001:db8:220:1:ffff:ffff:ffff:ffff") @@ -125,6 +133,14 @@ class TestIPRange(unittest.TestCase): self.assertFalse(ip2 != ip3) self.assertFalse(ip1 != ip3) + def test6OtherObject(self): + ip1 = IP6Net("2001:db8:220:1:248:1893:25c8:1946/128") + ip2 = IP6Range("2001:db8:220:1:248:1893:25c8:1946-2001:db8:220:1:248:1893:25c8:1946") + ip3 = IP6("2001:db8:220:1:248:1893:25c8:1946") + self.assertFalse(ip1 == [ip1]) + self.assertFalse(ip2 == 1) + self.assertFalse(ip3 == "2001:db8:220:1:248:1893:25c8:1946") + def test4Contains(self): self.assertTrue(IP4Net("192.0.2.64/28") in IP4Net("192.0.2.64/26")) self.assertTrue(IP4Net("192.0.2.64/28") in IP4Range("192.0.2.64-192.0.2.127"))