From bc8a8e75c1e96366440427f7810fcc43d76cf455 Mon Sep 17 00:00:00 2001 From: "pmoody@google.com" Date: Tue, 8 Feb 2011 01:56:52 +0000 Subject: + fix broken network/address comparisons. git-svn-id: https://ipaddr-py.googlecode.com/svn@206 09200d28-7f98-11dd-ad27-0f66e57d2035 --- trunk/ipaddr.py | 9 ++++++--- trunk/ipaddr_test.py | 13 ++++++++++--- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/trunk/ipaddr.py b/trunk/ipaddr.py index 84db9c1..a0091f1 100644 --- a/trunk/ipaddr.py +++ b/trunk/ipaddr.py @@ -442,8 +442,7 @@ class _BaseIP(_IPAddrBase): def __eq__(self, other): try: return (self._ip == other._ip - and self._version == other._version - and isinstance(other, _BaseIP)) + and self._version == other._version) except AttributeError: return NotImplemented @@ -608,7 +607,11 @@ class _BaseNet(_IPAddrBase): and self.network == other.network and int(self.netmask) == int(other.netmask)) except AttributeError: - return NotImplemented + if isinstance(other, _BaseIP): + # If other is a _BaseIP, we pretend it's a network for + # this equality test. It's a slight hack, but it's a + # convenient one. + return self == IPNetwork(other._ip, version=other._version) def __ne__(self, other): eq = self.__eq__(other) diff --git a/trunk/ipaddr_test.py b/trunk/ipaddr_test.py index b7be753..0fefb09 100755 --- a/trunk/ipaddr_test.py +++ b/trunk/ipaddr_test.py @@ -423,9 +423,17 @@ class IpaddrUnitTest(unittest.TestCase): self.assertFalse(self.ipv4 == '') self.assertFalse(self.ipv4 == []) self.assertFalse(self.ipv4 == 2) + self.assertTrue(ipaddr.IPNetwork('1.1.1.1/32') == + ipaddr.IPAddress('1.1.1.1')) + self.assertFalse(ipaddr.IPNetwork('1.1.1.1/24') == + ipaddr.IPAddress('1.1.1.1')) self.assertTrue(self.ipv6 == ipaddr.IPv6Network('2001:658:22a:cafe:200::1/64')) + self.assertTrue(ipaddr.IPNetwork('::1/128') == + ipaddr.IPAddress('::1')) + self.assertFalse(ipaddr.IPNetwork('::1/127') == + ipaddr.IPAddress('::1')) self.assertFalse(self.ipv6 == ipaddr.IPv6Network('2001:658:22a:cafe:200::1/63')) self.assertFalse(self.ipv6 == ipaddr.IPv4Network('1.2.3.4/23')) @@ -433,10 +441,10 @@ class IpaddrUnitTest(unittest.TestCase): self.assertFalse(self.ipv6 == []) self.assertFalse(self.ipv6 == 2) + + def testNotEquals(self): - addr1 = ipaddr.IPAddress('1.2.3.4') self.assertFalse(self.ipv4 != ipaddr.IPv4Network('1.2.3.4/24')) - self.assertFalse(self.ipv4 == addr1) self.assertTrue(self.ipv4 != ipaddr.IPv4Network('1.2.3.4/23')) self.assertTrue(self.ipv4 != ipaddr.IPv6Network('::1.2.3.4/24')) self.assertTrue(self.ipv4 != '') @@ -446,7 +454,6 @@ class IpaddrUnitTest(unittest.TestCase): addr2 = ipaddr.IPAddress('2001:658:22a:cafe:200::1') self.assertFalse(self.ipv6 != ipaddr.IPv6Network('2001:658:22a:cafe:200::1/64')) - self.assertFalse(self.ipv6 == addr2) self.assertTrue(self.ipv6 != ipaddr.IPv6Network('2001:658:22a:cafe:200::1/63')) self.assertTrue(self.ipv6 != ipaddr.IPv4Network('1.2.3.4/23')) -- cgit v1.2.1