April 12th, 2011· IP('::/0').netmask() gives IP('::') instead of IP('0.0.0.0')
February 16th, 2011· Fix tests for Python 3.1 and 3.2
· ip.__nonzero__() and (ipa in ipb) return a bool instead of 0 or 1
· IP('0.0.0.0/0') + IP('0.0.0.0/0') raises an error, fix written by Arfrever
February 15th, 2011· Support Python 3: setup.py runs 2to3
· Update the ranges for IPv6 IPs
· Fix reverseName() and reverseNames() for IPv4 in IPv6 addresses
· Drop support of Python < 2.5
October 1st, 2010· Use xrange() instead of range()
· Use isinstance(x, int) instead of type(x) == types.IntType
· Prepare support of Python3 (use integer division: x // y)
· Fix IP(long) constructor: ensure that the address is not too large
· Constructor raise a TypeError if the type is not int, long, str or unicode
· 223.0.0.0/8 is now public (belongs to APNIC)
October 29th, 2009· New "major" version because it may break compatibility
· Fix __cmp__(): IP('0.0.0.0/0') and IP('0.0.0.0') are not equal
· Fix IP.net() of the network "::/0": "::" instead of "0.0.0.0". IPy 0.63 should fix this bug, but it wasn't.
August 19th, 2009· Create MANIFEST.in to fix setup.py bdist_rpm, fix by Robert Nickel
June 23rd, 2009· Fix formatting of "IPv4 in IPv6" network, eg. IP('::ffff:192.168.10.0/120'), the netmask ("/120" in the example) was missing!
· Fix IP.net() of the network "::/0": "::" instead of "0.0.0.0"