Merged revisions 73135 via svnmerge from

svn+ssh://pythondev@svn.python.org/python/trunk

........
  r73135 | gregory.p.smith | 2009-06-01 22:25:34 -0700 (Mon, 01 Jun 2009) | 3 lines

  Fixes issue6169: it was possible for two ipaddr network addresses to compare
  as both < and > than eachother.
........
This commit is contained in:
Gregory P. Smith 2009-06-02 05:29:37 +00:00
parent b7ffad5b28
commit 181bdc6374
2 changed files with 30 additions and 19 deletions

View File

@ -10,7 +10,7 @@ and prefixes.
""" """
__version__ = '1.1.0' __version__ = '1.1.1'
import struct import struct
@ -206,17 +206,25 @@ class BaseIP(object):
def __lt__(self, other): def __lt__(self, other):
try: try:
return (self.version < other.version if self.version != other.version:
or self.ip < other.ip return self.version < other.version
or self.netmask < other.netmask) if self.ip != other.ip:
return self.ip < other.ip
if self.netmask != other.netmask:
return self.netmask < other.netmask
return False
except AttributeError: except AttributeError:
return NotImplemented return NotImplemented
def __gt__(self, other): def __gt__(self, other):
try: try:
return (self.version > other.version if self.version != other.version:
or self.ip > other.ip return self.version > other.version
or self.netmask > other.netmask) if self.ip != other.ip:
return self.ip > other.ip
if self.netmask != other.netmask:
return self.netmask > other.netmask
return False
except AttributeError: except AttributeError:
return NotImplemented return NotImplemented

View File

@ -1,18 +1,6 @@
# Copyright 2007 Google Inc. # Copyright 2007 Google Inc.
# Licensed to PSF under a Contributor Agreement. # Licensed to PSF under a Contributor Agreement.
# #
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# See also: http://code.google.com/p/ipaddr-py/ # See also: http://code.google.com/p/ipaddr-py/
"""Unittest for ipaddr module.""" """Unittest for ipaddr module."""
@ -393,6 +381,21 @@ class IpaddrUnitTest(unittest.TestCase):
self.assertTrue(ipv6 > ipv4) self.assertTrue(ipv6 > ipv4)
self.assertTrue(ipv4 < ipv6) self.assertTrue(ipv4 < ipv6)
# Regression test for issue6169 (ipaddr-py issue 19)
ip1 = ipaddr.IP('10.1.2.128/25')
self.assertFalse(ip1 < ip1)
self.assertFalse(ip1 > ip1)
ip2 = ipaddr.IP('10.1.3.0/24')
self.assertTrue(ip1 < ip2)
self.assertFalse(ip2 < ip1)
self.assertFalse(ip1 > ip2)
self.assertTrue(ip2 > ip1)
ip3 = ipaddr.IP('10.1.3.0/25')
self.assertTrue(ip2 < ip3)
self.assertFalse(ip3 < ip2)
self.assertFalse(ip2 > ip3)
self.assertTrue(ip3 > ip2)
def test_embedded_ipv4(self): def test_embedded_ipv4(self):
ipv4_string = '192.168.0.1' ipv4_string = '192.168.0.1'
ipv4 = ipaddr.IPv4(ipv4_string) ipv4 = ipaddr.IPv4(ipv4_string)