diff options
Diffstat (limited to '')
-rw-r--r-- | CHANGELOG | 1552 |
1 files changed, 1552 insertions, 0 deletions
diff --git a/CHANGELOG b/CHANGELOG new file mode 100644 index 0000000..b282357 --- /dev/null +++ b/CHANGELOG @@ -0,0 +1,1552 @@ +.. currentmodule:: netaddr + +-------------------- +NEXT_NETADDR_VERSION +-------------------- + +Date: not released yet + +--------------- +Release: 0.10.1 +--------------- + +Date: 2024-01-02 + +Fixed: + +* Get rid of some warnings + +Deprecated: + +* Deprecate the flag shorthands: ``N``, ``P`` and ``Z``. Use :data:`NOHOST`, :data:`INET_PTON` + and :data:`ZEROFILL` instead. +* Deprecate importing objects from ``netaddr`` subpackages. Only importing things from the + top-level ``netaddr`` namespace is supported, everything else is considered private. + + This has already been the case but we can use a reminder. +* Deprecate permissive-by-default IPv4 parsing in :func:`valid_ipv4`. The ``inet_pton()`` + semantics (with leading zeros always disallowed) will become the default. Use :data:`INET_ATON` + and/or :data:`ZEROFILL` flags if you need the legacy behavior. + +--------------- +Release: 0.10.0 +--------------- + +Date: 2023-12-31 + +Added: + +* Add an :data:`INET_ATON` flag to explicitly request ``inet_aton()`` IPv4 parsing semantics + from :class:`IPAddress`. +* Add an :meth:`IPAddress.is_ipv4_private_use` convenience method. +* Add an :meth:`IPAddress.is_global` convenience method to allow determining if an address is + considered globally reachable. +* Add an :meth:`IPAddress.is_ipv6_unique_local` convenience method. + +Fixed: + +* Improve Python 3.13 compatibility, thank you John Eckersberg. + +Deprecated: + +* Deprecate Python 3.7 support. +* Deprecate abbreviated CIDR format support in :class:`IPNetwork` + (``implicit_prefix=True``). +* Deprecate accepting leading zeros when parsing IPv4 addresses in :data:`INET_PTON` mode + (it's been allowed on some platforms). + + If you need to allow and discard leading zeros use the :data:`ZEROFILL` flag. + + This change will implicit conversions from ``str`` in all relevant contexts. If you need + to control the IPv4 parsing mode construct :class:`IPAddress` objects explicitly. +* Deprecate parsing IPv4 addresses permissively (``inet_aton()``-like) by default. + + :data:`INET_PTON` will become the default mode. + + If you need to be permissive and parse using ``inet_aton()`` semantics use the + :data:`INET_ATON` flag. + + This change will implicit conversions from ``str`` in all relevant contexts. If you need + to control the IPv4 parsing mode construct :class:`IPAddress` objects explicitly. +* Deprecate the :meth:`IPAddress.is_private` method. Migration instructions in the + documentation. + +Other: + +* Raise an exception if invalid flags are passed to ``IPAddress``, ``IPNetwork`` or ``IPRange``. +* Improve the documentation substantially. +* Update the DB files to the latest versions (2023-12-23). + +-------------- +Release: 0.9.0 +-------------- + +Date: 2023-09-18 + +Added: + +* Add hash capabilities to OUI (#225, amitmi704) + +Fixed: + +* **Backwards incompatible:** Handle RFC 6164 IPv6 addresses (don't reserve first IP + address in point-to-point subnets) ($267, Damien Claisse) +* **Technically backwards incompatible:** Fix for is_loopback behaviour – consider + ``IPNetwork('::1/128')`` to be loopback (#222, #223, niels) +* Include tutorials in source distributions (#215, Louis Sautier) +* Fix a documentation typo (#242, Wouter) +* Fix print syntax in the documentation to be Python 3 compatible (#221, François Magimel) +* Fix the Sphinx syntax in the documentation (#220, François Magimel) + +Other: + +* Update the databases (#266, Jakub Stasiak) +* Deprecate Python 3.6 (#263, Jakub Stasiak) +* Eliminate unnecessary evals (#228, KOLANICH) + +-------------- +Release: 0.8.0 +-------------- +Date: 3 Jul 2020 + +^^^^^^^^^^^^^^^^^^^^ +Changes since 0.7.20 +^^^^^^^^^^^^^^^^^^^^ + +* Fixed weak reference support in classes with ``__slots__`` +* Added ``__bytes__`` to ``IPAddress`` for intuitive usage, thanks to Michael Belousov. +* Added ``format()`` function to EUI, thanks to Omer Anson. +* Added ``IPNetwork.netmask`` property setter, thanks to Naveen Nathan. +* Added support for IABs in the ``40:D8:55`` OUI, thanks to Brian Maissy. +* Drastically optimized ``spanning_cidr()``, thanks to Brian Maissy. +* Fixed ``"x.x.x.x/x" in IPNetwork`` tests, thanks to xpac1985. +* Added support for passing iterables of ``IPRange`` to ``IPSet`` and ``cidr_merge()``, based + on a patch by Henry Stern. + +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Specific bug fixes addressed in this release +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +FIXED Issue 205: https://github.com/netaddr/netaddr/issues/205 + - N log N complexity instead of linear + +FIXED Issue 171: https://github.com/netaddr/netaddr/issues/171 + - Efficiently creating a large IPSet from a list of IPRanges? + +FIXED Issue 161: https://github.com/netaddr/netaddr/issues/161 + - Weak reference support + +^^^^^^^^^^^ +Miscellanea +^^^^^^^^^^^ + +- The next release (0.9.0) will contain a backwards incompatible change in IPNetwork's behaviour. + It's connected to handling of RFC 6164 IPv6 addresses (/127 and /128): IPNetwork.broadcast will + return None for those and first addresses in the networks will no longer be excluded when + iterating IPNetwork and IPNetwork.iter_hosts(). See https://github.com/netaddr/netaddr/pull/168 + (or temporarily reverted commit 2984c0a40a70 in this repository) to see the actual patch. + +--------------- +Release: 0.7.20 +--------------- +Date: 19 Jun 2020 + +^^^^^^^^^^^^^^^^^^^^ +Changes since 0.7.19 +^^^^^^^^^^^^^^^^^^^^ + +* Fixed returning from an iterator on Python 3.7+, by Sergey Kozlov. +* Fixed Python 3.8 SyntaxWarning on using `is not` with a string literal, by Stefan Nordhausen. +* Fixed DeprecationWarnings by using raw strings for escape characters used in regexes, by Sean McGinnis. +* Improved IPGlob documentation, by obkmeta. +* Fixed exception creation in corner cases by explicitly passing error message params as tuples, by + Matthias Urlichs. +* Stopped manually replacing shebang of an included script. +* Stopped using __file__ in all code that's expected to run in environments that don't support it + (like PyOxidizer-produced binaries). +* Updated all databases included in the package. + +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Specific bug fixes addressed in this release +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +FIXED Issue 182: https://github.com/netaddr/netaddr/issues/182 + - test_ip_splitter_remove_prefix_larger_than_input_range fails with python 3.7 + +FIXED Issue 206: https://github.com/netaddr/netaddr/issues/206 + - ""is not" with a literal." SyntaxWarning + +FIXED Issue 198: https://github.com/netaddr/netaddr/issues/198 + - oui databases are outdated + +FIXED Issue 188: https://github.com/netaddr/netaddr/issues/188 + - Avoid use of __file__ + +^^^^^^^^^^^ +Miscellanea +^^^^^^^^^^^ + +- Python 2 versions older than 2.7 and Python 3 versions older than 3.5 should be considered + unsupported. No incompatible code has been introduced to the best of our knowledge but + there's no CI infrastructure in place to verify this and if there are any issues with + those versions they won't be fixed. +- Consequently, Python 2.7 and 3.5 support should be considered deprecated as 2.7 has + reached its end-of-life already and 3.5 will hit it soon. +- A CI setup has been introduced which allows us to test on a variety of Python versions + on all Mac, Linux and Windows. + +--------------- +Release: 0.7.19 +--------------- +Date: 11 Jan 2017 + +^^^^^^^^^^^^^^^^^^^^ +Changes since 0.7.18 +^^^^^^^^^^^^^^^^^^^^ + +* added a new SubnetSplitter class for those looking to divide up subnets. + Thanks alanwill and RyPeck and those on (Stack Overflow discussion). + +* removed bundled pytest dependency code for "python setup.py test". + +* setup.py now uses setuptools only (no more distutils) and setup_egg.py removed. + +* cleaned up INSTALL docs so they accurately reflect current Python packaging. + +* fixed broken parsing, generating and reading of IEEE index files when switching + between Python 2.x and 3.x. + +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Specific bug fixes addressed in this release +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +FIXED Issue 133: https://github.com/drkjam/netaddr/issues/133 + - Splitting a single network into multiple prefixed networks + +FIXED Issue 129: https://github.com/drkjam/netaddr/issues/129 + - fix IPAddress().netmask_bits to return 0 for 0.0.0.0 and [::] addresses + +FIXED Issue 117: https://github.com/drkjam/netaddr/issues/117 + - (python setup.py test) failing with python3 >= 3.5 + +FIXED Issue 137: https://github.com/drkjam/netaddr/issues/137 + - API reference is broken on ReadTheDocs + +FIXED Issue 143: https://github.com/drkjam/netaddr/issues/143 + - Please refresh the bundled IANA and IEEE databases + +^^^^^^^^^^^ +Miscellanea +^^^^^^^^^^^ + +- Goodbye to NYSE Euronext (good times), hello Intercontinental Exchange ... + +--------------- +Release: 0.7.18 +--------------- +Date: 4 Sep 2015 + +^^^^^^^^^^^^^^^^^^^^ +Changes since 0.7.17 +^^^^^^^^^^^^^^^^^^^^ + +* cidr_merge() algorithm is now O(n) and much faster. + Thanks to Anand Buddhdev (aabdnn) and Stefan Nordhausen (snordhausen). + +* nmap target specification now fully supported including IPv4 CIDR + prefixes and IPv6 addresses. + +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Specific bug fixes addressed in this release +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +FIXED Issue 100: https://github.com/drkjam/netaddr/issues/100 + - nmap.py - CIDR targets + +FIXED Issue 112: https://github.com/drkjam/netaddr/issues/112 + - Observation: netaddr slower under pypy + +--------------- +Release: 0.7.17 +--------------- +Date: 31 Aug 2015 + +^^^^^^^^^^^^^^^^^^^^ +Changes since 0.7.16 +^^^^^^^^^^^^^^^^^^^^ + +* Fixed a regression with valid_mac due to shadow import in the + netaddr module. + +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Specific bug fixes addressed in this release +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +FIXED Issue 114: https://github.com/drkjam/netaddr/issues/114 + - netaddr.valid_mac('00-B0-D0-86-BB-F7')==False for 0.7.16 but True for 0.7.15 + +--------------- +Release: 0.7.16 +--------------- +Date: 30 Aug 2015 + +^^^^^^^^^^^^^^^^^^^^ +Changes since 0.7.15 +^^^^^^^^^^^^^^^^^^^^ + +* IPv4 networks with /31 and /32 netmasks are now treated according to + RFC 3021. Thanks to kalombos and braaen. + +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Specific bug fixes addressed in this release +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +FIXED Issue 109: https://github.com/drkjam/netaddr/issues/109 + - Identify registry of global IPv6 unicast allocations + +FIXED Issue 108: https://github.com/drkjam/netaddr/issues/108 + - One part of docs unclear? + +FIXED Issue 106: https://github.com/drkjam/netaddr/issues/106 + - Eui64 Updated (pull request for Issue 105) + +FIXED Issue 105: https://github.com/drkjam/netaddr/issues/105 + - Support dialects for EUI-64 addresses + +FIXED Issue 102: https://github.com/drkjam/netaddr/issues/102 + - 0.7.15 tarball is missing tests. + +FIXED Issue 96: https://github.com/drkjam/netaddr/issues/96 + - Wrong hosts and broadcasts for /31 and /32 networks. + +--------------- +Release: 0.7.15 +--------------- +Date: 29 Jun 2015 + +^^^^^^^^^^^^^^^^^^^^ +Changes since 0.7.14 +^^^^^^^^^^^^^^^^^^^^ + +* Fix slowness in IPSet.__contains__. Thanks to novas0x2a for noticing. + +* Normalize IPNetworks when they are added to an IPSet + +* Converted test suite to py.test + +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Specific bug fixes addressed in this release +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +FIXED Issue 98: https://github.com/drkjam/netaddr/issues/98 + - Convert test suite to py.test + +FIXED Issue 94: https://github.com/drkjam/netaddr/issues/94 + - IPSet.__contains__ is about 40 times slower than the equivalent IPRange + +FIXED Issue 95: https://github.com/drkjam/netaddr/issues/95 + - Inconsistent Address Handling in IPSet + +--------------- +Release: 0.7.14 +--------------- +Date: 31st Mar 2015 + +^^^^^^^^^^^^^^^^^^^^ +Changes since 0.7.13 +^^^^^^^^^^^^^^^^^^^^ + +* Fix weird build breakage in 0.7.13 (wrong Python path, incorrect OUI DB). + +* EUI, OUI, and IAB objects can now be compared with strings. You can do + my_mac = EUI("11:22:33:44:55:66") + my_mac == "11:22:33:44:55:66" + and Python will return True on the "==" operator. + +* Implement the "!=" operator for OUI and IAB under Python2. It was already + working under Python3. + +* 64 bit EUIs could only be created from strings with "-" as a separator. + Now, ":" and no separator are supported, which already worked for 48 bit EUIs. + +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Specific bug fixes addressed in this release +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +FIXED Issue 80: https://github.com/drkjam/netaddr/pull/80 + - Compare L2 addresses with their representations + +FIXED Issue 81: https://github.com/drkjam/netaddr/issues/81 + - OUI database tests fail in 0.7.13 + +FIXED Issue 84: https://github.com/drkjam/netaddr/issues/84 + - Incorrect python executable path in netaddr-0.7.13-py2.py3-none-any.whl + +FIXED Issue 87: https://github.com/drkjam/netaddr/pull/87 + - Handle eui64 addresses with colon as a delimiter and without delimiter. + +--------------- +Release: 0.7.13 +--------------- +Date: 31st Dec 2014 + +^^^^^^^^^^^^^^^^^^^^ +Changes since 0.7.12 +^^^^^^^^^^^^^^^^^^^^ + +* IPAddress objects can now be added to/subtracted from each other + +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Specific bug fixes addressed in this release +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +FIXED Issue 73: https://github.com/drkjam/netaddr/issues/73 + - Adding IP Addresses + +FIXED Issue 74: https://github.com/drkjam/netaddr/issues/74 + - compute static global ipv6 addr from the net prefix and mac address + +FIXED Issue 75: https://github.com/drkjam/netaddr/issues/75 + - add classifiers for python 3.3 and 3.4 support + +--------------- +Release: 0.7.12 +--------------- +Date: 6th Jul 2014 + +^^^^^^^^^^^^^^^^^^^^ +Changes since 0.7.11 +^^^^^^^^^^^^^^^^^^^^ + +* Added method IPSet.iter_ipranges(). + +* bool(IPSet()) works now for large IPSets, e.g. IPSet(['2405:8100::/32']). + +* IPNetwork.iter_hosts now skips the subnet-router anycast address for IPv6. + +* Removed function fbsocket.inet_aton because it is unused and unnecessary + +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Specific bug fixes addressed in this release +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +FIXED Issue 69: https://github.com/drkjam/netaddr/issues/69 + - Add __nonzero__ method to IPSet + +FIXED Pull Request 68: https://github.com/drkjam/netaddr/pull/68 + - Fixed a bug related to allowing ::0 during iter_hosts for v6 + +FIXED Issue 67: https://github.com/drkjam/netaddr/issues/67 + - Remove function fbsocket.inet_aton + +FIXED Pull Request 66: https://github.com/drkjam/netaddr/pull/66 + - Added Function to create list of IPRange for non-contiguous IPSet + +--------------- +Release: 0.7.11 +--------------- +Date: 19th Mar 2014 + +^^^^^^^^^^^^^^^^^^^^ +Changes since 0.7.10 +^^^^^^^^^^^^^^^^^^^^ + +* Performance of IPSet increased dramatically, implemented by + Stefan Nordhausen and Martijn van Oosterhout. As a side effect, + IPSet(IPNetwork("10.0.0.0/8")) is now as fast as you'd expect. + +* Various performance improvements all over the place. + +* netaddr is now hosted on PyPI and can be installed via pip. + +* Doing "10.0.0.42" in IPNetwork("10.0.0.0/24") works now. + +* IPSet has two new methods: iscontiguous() and iprange(), thanks to Louis des Landes. + +* Re-added the IPAddress.netmask_bits() method that was accidentally removed. + +* Networks 128.0.0.0/16, 191.255.0.0/16, and 223.255.255.0/24 are not marked as + reserved IPv4 addresses any more. Thanks to marnickv for pointing that out. + +* Various bug fixes contributed by Wilfred Hughes, 2*yo and Adam Goodman. + +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Specific bug fixes addressed in this release +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +FIXED Issue 58: https://github.com/drkjam/netaddr/issues/58 + + - foo.bar doesn't throw AddrFormatError + +FIXED Issue 57: https://github.com/drkjam/netaddr/issues/57 + + - netaddr packages not hosted on PyPI + +FIXED Issue 56: https://github.com/drkjam/netaddr/issues/56 + + - Fix comparison with large IPSet() + +FIXED Issue 55: https://github.com/drkjam/netaddr/pull/55 + + - Fix smallest_matching_cidr and all_matching_cidrs + +FIXED Issue 53: https://github.com/drkjam/netaddr/issues/53 + + - Exclude 128.0.0.0/16 and possibly others from reserved range set? + +FIXED Issue 51: https://github.com/drkjam/netaddr/issues/51 + + - Encoding errors in netaddr/eui/oui.txt + +FIXED Issue 46: https://github.com/drkjam/netaddr/issues/46 + + - len(IPSet()) fails on python3 + +FIXED Issue 43: https://github.com/drkjam/netaddr/issues/43 + + - Method to check if IPSet is contiguous + +FIXED Issue 38: https://github.com/drkjam/netaddr/issues/38 + + - netmask_bits is missing from the IPAddress + +FIXED Issue 37: https://github.com/drkjam/netaddr/issues/37 + + - Test failures with Python 3.3 + + +--------------- +Release: 0.7.10 +--------------- +Date: 6th Sep 2012 + +^^^^^^^^^^^^^^^^^^^ +Changes since 0.7.9 +^^^^^^^^^^^^^^^^^^^ + +* A bunch of Python 3.x bug fixes. Thanks Arfrever. + +* Extended nmap support to cover full target specification. + +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Specific bug fixes addressed in this release +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +FIXED Issue 36 - https://github.com/drkjam/netaddr/issues/36 + +- ResourceWarnings with Python >=3.2 + +FIXED Issue 35 - https://github.com/drkjam/netaddr/issues/35 + +- netaddr-0.7.9: Test failure with Python 3 + +FIXED Issue 34 - https://github.com/drkjam/netaddr/issues/34 + +- netaddr.ip.iana.SaxRecordParser.endElement() incompatible with Python 3.1 + +FIXED Issue 33 - https://github.com/drkjam/netaddr/issues/33 + +- netaddr script not installed with Python 3 + +FIXED Issue 23 - https://github.com/drkjam/netaddr/issues/23 + +- valid_nmap_range() does not validate nmap format case. + +FIXED Issue 22 - https://github.com/drkjam/netaddr/issues/22 + +- all_matching_cidrs: documentation incorrect + +-------------- +Release: 0.7.9 +-------------- +Date: 28th Aug 2012 + +^^^^^^^^^^^^^^^^^^^ +Changes since 0.7.8 +^^^^^^^^^^^^^^^^^^^ + +* Re-release to fix build removing Sphinx dependency. + +-------------- +Release: 0.7.8 +-------------- +Date: 28th Aug 2012 + +^^^^^^^^^^^^^^^^^^^ +Changes since 0.7.7 +^^^^^^^^^^^^^^^^^^^ + +* New SAX parser for IANA data source files (contributed by Andrew Stromnov) + +* Fixed pickling failures with EUI, OUI and IAB classes. + +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Specific bug fixes addressed in this release +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +FIXED Issue 31 - https://github.com/drkjam/netaddr/issues/31 + + - Exclude '39.0.0.0/8' network from reserved set. Thanks Andrew Stromnov + +FIXED Issue 28 - https://github.com/drkjam/netaddr/issues/28 + + - Fix algorithm in ipv6_link_local to fully conform to rfc4291. Thanks Philipp Wollermann + +FIXED Issue 25 - https://github.com/drkjam/netaddr/issues/25 + + - install_requires is too aggressive? Thanks Adam Lindsay and commenters. + +FIXED Issue 21 - https://github.com/drkjam/netaddr/issues/21 + + - deepcopy for EUI fails. Thanks Ryan Nowakowski. + +-------------- +Release: 0.7.7 +-------------- +Date: 30th May 2012 + +^^^^^^^^^^^^^^^^^^^ +Changes since 0.7.6 +^^^^^^^^^^^^^^^^^^^ + +* Comprehensive documentation update! It's only taken 4 years + to get around to using Sphinx and I can confirm it is + **TOTALLY AWESOME!** + +* Various bug fixes + +* Refreshed IEEE OUI and IAB data + +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Specific bug fixes addressed in this release +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +FIXED Issue 24 - https://github.com/drkjam/netaddr/issues/24 + + - Fixed TypeError when comparing BaseIP instance with non-BaseIP objects. Thanks pvaret + +FIXED Issue 17 - https://github.com/drkjam/netaddr/issues/17 + + - For large ipv6 networks the .subnet() method fails. Thanks daveyss + +FIXED Issue 20 - https://github.com/drkjam/netaddr/issues/20 + + - Test failure with Python 3. Thanks Arfrever + +-------------- +Release: 0.7.6 +-------------- +Date: 13th Sep 2011 + +^^^^^^^^^^^^^^^^^^^ +Changes since 0.7.5 +^^^^^^^^^^^^^^^^^^^ + +* A bug fix point release + +* Refreshed 3rd party data caches + +* Tested against Python 3.2.x and PyPy 1.6.x + +* Fixed unit tests under for Mac OSX + +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Specific bug fixes addressed in this release +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +FIXED Issue 15 - https://github.com/drkjam/netaddr/issues/15 + + - Incorrect and invalid glob produced when last octet is not * + +FIXED Issue 13 - https://github.com/drkjam/netaddr/issues/13 + + - Added support for IPython 0.11 API changes. Thanks juliantaylor + +FIXED Issue 11 - https://github.com/drkjam/netaddr/issues/11 + + - Calling valid_glob on cidr raises ValueError. Thanks radicand + +FIXED Issue 7 - https://github.com/drkjam/netaddr/issues/7 + + - Unpickling Bug in IPSet. Thanks LuizOz and labeneator + +FIXED Issue 2 - https://github.com/drkjam/netaddr/issues/2 + + - UnboundLocalError raised in IPNetwork constructor. Thanks keesbos + +^^^^^^^^^^^ +Miscellanea +^^^^^^^^^^^ + +- Has a famous soft drink company started making it own NICs? + +-------------- +Release: 0.7.5 +-------------- + +Date: 5th Oct 2010 + +^^^^^^^^^^^^^^^^^^^ +Changes since 0.7.4 +^^^^^^^^^^^^^^^^^^^ + +* Python 3.x is now fully supported. The paint is still drying on this so + please help with testing and raise bug tickets when you find any issues! + New Issue Tracker - https://github.com/drkjam/netaddr/issues + +* Moved code hosting to github. History ported thanks to svn2git. + - (https://github.com/nirvdrum/svn2git) + +* All netaddr objects now use approx. 65% less memory due to the use of + __slots__ in classes throughout the codebase. Thanks to Stefan Nordhausen + and his Python guru for this suggestion! + +* Applied many optimisations and speedups throughout the codebase. + +* Fixed the behaviour of the IPNetwork constructor so it now behaves in + a much more sensible and expected way (i.e. no longer uses inet_aton + semantics which is just plain odd for network addresses). + +* One minor change to behaviour in this version is that the .value property + on IPAddress and IPNetwork objects no longer support assignment using a + string IP address. Only integer value assignments are now valid. The impact + of this change should be minimal for the majority of users. + +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Specific bug fixes addressed in this release +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +FIXED Issue 49 - http://code.google.com/p/netaddr/issues/detail?id=49 + + - Incorrect IP range recognition on IPs with leading zeros + +FIXED Issue 50 - http://code.google.com/p/netaddr/issues/detail?id=50 + + - CIDR block parsing + +FIXED Issue 52 - http://code.google.com/p/netaddr/issues/detail?id=52 + + - ipv6 cidr matches incorrectly match ipv4 [sic] + +FIXED Issue 53 - http://code.google.com/p/netaddr/issues/detail?id=53 + + - Error in online documentation + +FIXED Issue 54 - http://code.google.com/p/netaddr/issues/detail?id=54 + + - IP recognition failure + +FIXED Issue 55 - http://code.google.com/p/netaddr/issues/detail?id=55 + + - Support for Python 3.x + +FIXED Issue 56 - http://code.google.com/p/netaddr/issues/detail?id=56 + + - checking IPAddress in IPNetwork + +FIXED Issue 57 - http://code.google.com/p/netaddr/issues/detail?id=57 + + - netaddr objects can't pickle + +FIXED Issue 58 - http://code.google.com/p/netaddr/issues/detail?id=58 + + - IPSet operations should accept the same arguments as IPAddress + +FIXED Issue 59 - http://code.google.com/p/netaddr/issues/detail?id=59 + + - netaddr fails to load when imported by a PowerDNS coprocess + +^^^^^^^^^^^ +Miscellanea +^^^^^^^^^^^ + +- Welcome back to standards.ieee.org which seems to have been down for weeks! + +- Goodbye Sun Microsystems + Merrill Lynch, hello Oracle + Bank of America ... + +-------------- +Release: 0.7.4 +-------------- +Date: 2nd Dec 2009 + +^^^^^^^^^^^^^^^^^^^ +Changes since 0.7.3 +^^^^^^^^^^^^^^^^^^^ + +* Applied speed patches by S. Nordhausen + +* Fixed an inconsistency between EUI and IPAddress interfaces. Made + EUI.packed and EUI.bin properties (previously methods) and added a + words() property. + +-------------- +Release: 0.7.3 +-------------- +Date: 14th Sep 2009 + +^^^^^^^^^^^^^^^^^^^ +Changes since 0.7.2 +^^^^^^^^^^^^^^^^^^^ + +* Added __add__, __radd__, __sub__, __rsub__ operators to the IPAddress class. + +* Added support for validation and iteration of simple nmap style IPv4 ranges + (raised in Issue 46). + +* Removed some unused constants from fallback socket module. + +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Specific bug fixes addressed in this release +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +FIXED Issue 44 - http://code.google.com/p/netaddr/issues/detail?id=44 + + - int/long type error + +FIXED Issue 46 - http://code.google.com/p/netaddr/issues/detail?id=46 + + - Question about IPv4 ranges + +FIXED Issue 47 - http://code.google.com/p/netaddr/issues/detail?id=47 + + - IPNetwork cannot be evaluated as a boolean when it has a large size + +-------------- +Release: 0.7.2 +-------------- +Date: 20th Aug 2009 + +^^^^^^^^^^^^^^^^^^^ +Changes since 0.7.1 +^^^^^^^^^^^^^^^^^^^ + +FIXED a boundary problem with the iter_iprange() generator function + and all associated calls to it throughout the codebase, including + unit test coverage and adjustments. + +* Replaced regular expressions in cidr_merge() with pre-compiled equivalents + for a small speed boost. + +* Adjustments to README raised by John Eckersberg. + +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Specific bug fixes addressed in this release +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +FIXED Issue 43 - http://code.google.com/p/netaddr/issues/detail?id=43 + + - IPNetwork('0.0.0.0/0') not usable in for loop + +-------------- +Release: 0.7.1 +-------------- +Date: 14th Aug 2009 + +^^^^^^^^^^^^^^^^^ +Changes since 0.7 +^^^^^^^^^^^^^^^^^ + +* Renamed the netaddr shell script from 'nash' to plain 'netaddr'. This + is to avoid a potentially nasty clash with an important Linux tool + with the same name. + + Thanks to John Eckersberg for spotting this one early! + +* Updated IANA and IEEE data files with latest versions. + +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Specific bug fixes addressed in this release +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +FIXED Issue 42 - http://code.google.com/p/netaddr/issues/detail?id=42 + + - Bug in cidr_merge() function when passed the CIDRs 0.0.0.0/0 and/or ::/0 + +------------ +Release: 0.7 +------------ +Date: 11th Aug 2009 + +^^^^^^^^^^^^^^^^^^^ +Changes since 0.6.x +^^^^^^^^^^^^^^^^^^^ + +Please Note - This release represents a major overhaul of netaddr. It breaks +backward compatibility with previous releases. See the API documentation for +full details of what is available. + +Some highlights of what has changed :- + +* Internal module hierarchy has been completely overhauled and redesigned. This + fixes up a lot of inconsistencies and problems with interdependent imports. + All public classes, objects, functions and constants are still published via + the main netaddr module namespace as in previous releases. + +* No more AT_* and ST_* 'constants'. + +* The Addr base class is gone. This removes the link between EUI and IP + functionality so the library is can now easily be split into distinct units + without many interdependencies between layer 2 and layer 3 functionality. + +* The use of custom descriptor classes has been completely discontinued. + +* Strategy classes and singleton objects have been replaced with a group of + strategy modules in their own netaddr.strategy namespace. Each IP or EUI + address object now holds a reference to a module rather than a singleton + object. + +* Many operations that were previously static class methods are now presented as + functions in the relevant modules. See the API documentation for details. + +* The IP and CIDR classes have been replaced with two new classes called + IPAddress and IPNetwork respectively. This name change is important as the IP + part of netaddr has been completed redesigned. The notion of an individual IP + address and an IP network or subnet has been made more obvious. IPAddress + objects are now true scalars and do not evaluate in a list or tuple context. + They also do not support any notion of a netmask or CIDR prefix; this is the + primary function of an IPNetwork object. + +* Arbitrary IP ranges and are still supported but a lot of their functionality + has also been exposed via handy functions. + +* IP globbing routines (previous known as Wildcards) have been moved into + their own submodule. + +* Added a new IPSet class which fully emulates mutable Python sets. This + replaces a lot of half-baked experimental classes found in 0.5.x and 0.6.x + such as IPRangeSet and CIDRGroup. See documentation for details. + +* All methods and properties that previously used or supported the 'fmt' + formatting property no longer do so. In all cases, objects are now returned to + correctly support pass through calls without side effects. It is up to the + user to extract data in the right format from the objects IPAddress objects + returned as required. + +* Unit tests have been completed re-written to support docstring style tests + bundled into test suites. These are handy as they double up as documentation + being combined with wiki syntax. Implemented code coverage checking using + coverage 3.x. + +* nash - a nascent shell like tool for the netaddr library (requires IPython). + +* Support for RFC 1924 added ;-) + +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Specific bug fixes addressed in this release +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +FIXED Issue 13 - http://code.google.com/p/netaddr/issues/detail?id=13 + + - Searching for a match in a list of CIDR objects + +FIXED Issue 26 - http://code.google.com/p/netaddr/issues/detail?id=26 + + - Refactor out use of isinstance() + +FIXED Issue 28 - http://code.google.com/p/netaddr/issues/detail?id=28 + + - Add support for network block operations + +FIXED Issue 34 - http://code.google.com/p/netaddr/issues/detail?id=34 + + - Addition issue? + +-------------- +Release: 0.6.4 +-------------- +Date: 11th Aug 2009 + +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Specific bug fixes addressed in this release +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +FIXED Issue 40 - http://code.google.com/p/netaddr/issues/detail?id=40 + + - Building RPM with "python setup.py bdist_rpm" fails, multiple errors + +-------------- +Release: 0.6.3 +-------------- +Date: 23rd Jun 2009 + +^^^^^^^^^^^^^^^^^^^ +Changes since 0.6.2 +^^^^^^^^^^^^^^^^^^^ + +* Fixed line endings in a number of new files created under Windows. + +* Tweaked the ordering of values in tuple passed into the hash() function in + the __hash__ method of the IP and IPRange classes to make it the same as + the values used for comparisons implemented in the __eq__ method (Python + best practice). + +* Added a number of unit tests to improve code coverage. + +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Specific bug fixes addressed in this release +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +FIXED Issue 33 - http://code.google.com/p/netaddr/issues/detail?id=33 + + - CIDR subtraction is broken for out-of-range CIDR objects + +FIXED Issue 35 - http://code.google.com/p/netaddr/issues/detail?id=35 + + - install error (on Python interpreters where socket.has_ipv6 is False) + +FIXED Issue 36 - http://code.google.com/p/netaddr/issues/detail?id=36 + + - netaddr.CIDR fails to parse default route CIDR + +FIXED Issue 37 - http://code.google.com/p/netaddr/issues/detail?id=37 + + - Bug in bitwise AND operator for IP addresses + +FIXED Issue 38 - http://code.google.com/p/netaddr/issues/detail?id=38 + + - Feature request: Addr.__nonzero__ + +FIXED Issue 39 - http://code.google.com/p/netaddr/issues/detail?id=39 + + - CIDR.abbrev_to_verbose() not applying implicit classful netmask + rules consistently + +-------------- +Release: 0.6.2 +-------------- +Date: 13th Apr 2009 + +^^^^^^^^^^^^^^^^^^^ +Changes since 0.6.1 +^^^^^^^^^^^^^^^^^^^ + +* Refreshed IEEE and IANA data files with latest revisions from their + respective URLs. + + - IANA IPv4 Address Space Registry (last updated 2009-03-11) + + - Internet Multicast Addresses (last updated 2009-03-17) + + - IEEE OUI and IAB files (last updated 2009-04-13) + +* Added get_latest_files() functions to both the netaddr.eui and + netaddr.ip modules to assist in automating release builds. + +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Specific bug fixes addressed in this release +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +FIXED Issue 32 - http://code.google.com/p/netaddr/issues/detail?id=32 + + - Addr.__ne__ returns wrong answer + +-------------- +Release: 0.6.1 +-------------- +Date: 6th Apr 2009 + +^^^^^^^^^^^^^^^^^ +Changes since 0.6 +^^^^^^^^^^^^^^^^^ + +* Added COPYRIGHT file with details and attribution for all 3rd party files + bundled with netaddr. + +* Minimum Python version required is now 2.4.x changed from 2.3.x. + + - Python 2.3 compatibility code in many sections of code have been removed. + + - the @property and @staticmethod decorators are now used throughout the + code along with the reversed() and sorted() builtin iterators. + + - A specific version check has also been added that will raise RuntimeError + exceptions if you run netaddr on a Python interpreter version < 2.4.x. + +* Integer addresses passed to the IP() and EUI() constructors no longer + require a mandatory second address type (AT_*) argument in most cases. This + is now only really required to disambiguate between IPv4/IPv6 addresses with + the same numerical value. The same behaviour applies to EUI-48/EUI-64 + identifiers. A small speed boost is achieved if the 2nd address type + argument is explicitly provided. + +* IPv6 addresses returned by EUI.ipv6_link_local() now always have a subnet + prefix of /64. + +* Default sort order of aggregate classes (IPRange, CIDR and Wildcard) has + been changed (again). They now sort initially by first address and then + by network block size from largest to smallest which feels more natural. + +* Fixed a bug in the CIDR.abbrev_to_verbose() static method where IPv4 + addresses with 4 octets (i.e. non-partial addresses) were being assigned + subnet prefixes using abbreviated rules. All complete IPv4 addresses should + always get a /32 prefix where it is not explicitly provided. + +* Abbreviated address expansion in the CIDR constructor is now optional and + can be controlled by a new 'expand_abbrev' boolean argument. + +* Added the new CIDR.summarize() static method which transforms lists of IP + addresses and CIDRs into their most compact forms. Great for trimming down + large ad hoc address lists! + +* Added the previous() and next() methods to the CIDR classes which return + the CIDR subnets either side of a given CIDR that are of the same size. + For the CIDR 192.0.2.0/24, previous will return 192.0.1.0/24 and next + will return 192.0.3.0/24. Also accepts and optional step size (default + is 1). + +* Added the supernet() method to the CIDR class which returns a generator of + all the subnets that contain the current CIDR found by decrementing the + prefixlen value for each step until it reaches zero. + +* Changed the way the fallback code works when the socket module is missing + important constants and functions. + +* Removed the uppercase options from the Strategy constructors and internals + as this behaviour can be easily replicated using the word_fmt option + instead and requires less code (word_fmt='%X'). + +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Specific bug fixes addressed in this release +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +FIXED Issue 23 - http://code.google.com/p/netaddr/issues/detail?id=23 + + - Improve IPv6 IPv4 mapped/compatible address formatting + +FIXED Issue 24 - http://code.google.com/p/netaddr/issues/detail?id=24 + + - bug in CIDR.subnet() when using the fmt argument + +FIXED Issue 29 - http://code.google.com/p/netaddr/issues/detail?id=29 + + - CIDR.subnet method's count argument isn't working as documented + +FIXED Issue 30 - http://code.google.com/p/netaddr/issues/detail?id=30 + + - not compatible with Python 2.3 + +FIXED Issue 31 - http://code.google.com/p/netaddr/issues/detail?id=31 + + - byte order in documentation confusing or wrong + +------------ +Release: 0.6 +------------ +Date: 20th Jan 2009 + +^^^^^^^^^^^^^^^^^^^ +Changes since 0.5.x +^^^^^^^^^^^^^^^^^^^ + +* Namespace changes + + 3 new sub namespaces have been added :- + + - netaddr.eui + + Currently contains IEEE OUI and IAB classes and lookup code. + + - netaddr.ip + + Currently contains IANA IPv4, IPv6 and IPv4 multicast lookup code. + + - netaddr.core + + Currently contains only a couple of classes that are shared between code in + netaddr.eui and netaddr.ip. + + Please Note: This change is part of a two stage internal restructuring of + netaddr. In future releases, layer-2 MAC/EUI functionality will be separated + from and layer-3 IP, CIDR and Wildcard functionality. All shared code will + be moved to netaddr.core. When the migration is complete (expected in 0.7) + the netaddr.address and netaddr.strategy namespaces will be removed. Please + endeavour to access everything you need via the top-level netaddr namespace + from this release onwards. See netaddr.__all__ for details of constants, + objects, classes and functions intended for the public interface. + +* Addition of IEEE and IANA informational lookups + + - the IP() and EUI() classes now have an additional info() method through + which contextual information about your addresses can be accessed. This + data is published by IANA and the IEEE respectively and sourced directly + from text files bundled with netaddr that are available for download + publicly online. Details are available in the docstring of the relevant + parsing classes. Subsequent netaddr releases will endeavour to keep + up-to-date with any updates to these files. + + - the EUI() class has been updated with the addition of the OUI() and IAB() + classes. They provide object based access to returned via the EUI.info() + method. Please see API docs included with netaddr for details. + + - added new NotRegisteredError exception that is raised when an EUI doesn't + match any currently registration entries in the IEEE registry files. + +* Addr() class removed from the public interface + + - This class is only ever meant to be used internally and its usage may soon + be deprecated in favour converting it into an abstract base class in + future releases. + +* Deletion of AddrRange() class + + - replaced with the more specific IPRange() class. AddrRange() wasn't + very useful in practice. Too much time has been spent explaining its + theoretical merits over its actual practicality for every day use. + +* Addition of new IPRange() class + + - the new base class for CIDR() and Wildcard(). + + - a 'killer feature' of this new class are the new methods iprange(), + cidrs() and wildcard() which allow you to use and switch between all + 3 formats easily. IPRange('x', 'y').cidrs() is particularly useful + returning all the intervening CIDRs between 2 arbitrary IP addresses. + + - IPRange() is a great place to expose several new methods available to + sub classes. They are issupernet(), issubnet(), adjacent() and overlaps(). + + - previous method called data_flavour() has been renamed (again) to a more + suitable format(). + +* IP() class updates + + - is_netmask() and is_hostmask() methods have been optimised and are now + both approximately 4 times faster than previously! + + - added wildcard() and iprange() methods that return pre-initialised + objects of those classes based on the current netmask / subnet prefix. + + - copy constructor methods ipv4() and ipv6() now preserve the value of the + prefixlen property now also support IPv6 options for returning IPv4-mapped + or IPv4-compatible IPv6 addresses. + + - added new methods is_loopback(), is_private(), is_link_local(), + is_ipv4_mapped() and is_ipv4_compat() which are all self explanatory. + + - added a bin() method which provides an IP address in the same format + as the standard Python bin() builtin type ('0bxxx') now available in + Python 2.6.x and higher. + + - added a packed() method which provides an IP address in packed binary + string format, suitable for passing directly to Python socket calls. + +* nrange() generator function updates + + - by default this now returns IP() objects instead of Addr() objects. + +* CIDR() class updates + + - the 'strict_bitmask' option in the CIDR class constructor has been had a + name change and is now just 'strict' (less typing). + + - support for Cisco ACL-style (hostmask) prefixes. Also available to the + IP() class. They are converted to their netmask equivalents before being + applied to the base address. + + - added a new subnet() generator method that returns iterators to subnet + CIDRs found within the current CIDR object's boundaries e.g. a /24 CIDR + can provide address with subnet prefixes between a /25 and /32. + + - added a new span() method which takes a list of IP, IPRange, CIDR and/or + Wildcards returning a single CIDR that 'spans' the lowest and highest + boundary addresses. An important property of this class is that only a + single CIDR is returned and that it (potentially) overlaps the start and + end addresses. The most important aspect of this method is that it + identifies the left-most set of bits that are common to all supplied + addresses. It is the plumbing that makes a lot of other features function + correctly. + + - although IPv6 doesn't support the concept of a broadcast address, after + some pondering I've decide to add network() and broadcast() methods to the + CIDR class. It is an interface quirk that users expect so it has been + added for ease of use. + + - the methods network(), broadcast(), hostmask() and netmask() have been + wrapped in property() builtin calls to make them appear as read-only + properties. + +* Many more MAC and IPv4 string address representation are now supported + + - Improvements to both EUI and IP classes. They now accept many more valid + address formats than previously. Thanks for all the bugs tickets raised. + +* ``__repr__()`` method behaviour change + + - Using ``repr()`` now assume that you have performed a ``from netaddr import *`` + before you execute them. They no longer specify the originating namespace + of objects which is a bit unnecessary and a lot to read on-screen.They + will also be moving around within the namespace shortly anyway so its + best not to think of them as being anywhere other than directly below + netaddr itself. + +* 'klass' property renamed to 'fmt' (format) + + - now referred to as the 'format callable' property. An unfortunately but + necessary change. 'klass' was a bad initial name choice as it most often + doesn't even reference a class object also supporting references to Python + types, builtin functions and user defined callables. + +* Complete re-work and consolidation of unit tests. + + - now over 100 tests covering all aspects of the API and library + functionality. + - Moved all tests into a single file. Lots of additional tests have been + added along with interface checks to ensure netaddr's always presents + a predictable set of properties and methods across releases. + +* Nascent support for Python eggs and setuptools. + + - Help is need to test this as it is not something I use personally. + +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Specific bug fixes addressed in this release +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +* Finally fixed the IPv6 string address compression algorithm so that it + is now compliant with the socket modules inet_ntop() and inet_pton() calls. + (not available on all platforms). + +^^^^^^^^^^^^^^^^^^^^^ +Experimental Features +^^^^^^^^^^^^^^^^^^^^^ + +* added bitwise operators to the IP class + + - does what it says on the tin. Does not effect that value of the IP object + itself but rather, returns a new IP after the operation has been applied. + +* IPRangeSet() class added (EXPERIMENTAL). + + - the intention with this class is to allows you to create collections of + unique IP(), IPRange(), CIDR() and Wildcard() objects. It provides + iteration over IPs in the collection as well as several membership based + operations such as any_match() all_matches(), min_match() and max_match(). + - lots more work to do here. Please raise bugs and feature requests against + this as you find them. Improvements to this are coming in 0.7. + +-------------- +Release: 0.5.2 +-------------- +Date: 29th Sep 2008 + +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Specific bug fixes addressed in this release +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +* Fixed Issue 15 in bug tracker. Bad validation and conversion of IPv4 + mapped IPv6 address values in IPv6Strategy class. Covered with unit + test cases. + +* Updated PrefixLenDescriptor() class so that modifications to the property + CIDR.prefixlen also update CIDR.first and CIDR.last keeping them in sync. + Covered by unit test cases. + +* IP.hostname() method returns None when DNS lookup fails. + +-------------- +Release: 0.5.1 +-------------- +Date: 23rd Sep 2008 + +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Specific bug fixes addressed in this release +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +* CIDR constructor was throwing a TypeError for valid unicode string addresses + which worked in previous releases. Fixed and covered with a unit test case. + +* The methods CIDR.netmask() and CIDR.hostmask() contained code errors that + were causing them to fail. Problem fixed and covered with unit test case. + +------------ +Release: 0.5 +------------ +Date: 19th Sep 2008 + +^^^^^^^^^^^^^^^^^^^ +Changes since 0.4.x +^^^^^^^^^^^^^^^^^^^ + +**General** + +* Access to all important object attributes in all netaddr classes now takes + place via custom Python descriptor protocol classes. This has greatly + simplified internal class logic and made external attributes changes much + safer and less error prone. It has also made aggregate classes such as CIDR + and Wildcard effectively read-write rather than read-only which they have + been up until this release. + +* Amended the way sort order is calculated for Addr and AddrRange (sub)class + instances so that the address type is taken into account as well as as the + numerical value of the address or address range. The ascending sort order + is IPv4, IPv6, EUI-48 and EUI-64. Sequences of AddrRange (sub)class + instances now sort correctly! + +* Comparisons between instances of Addr and AddrRange (sub)classes now return + False, rather than raising an AttributeError. + +* Added checks and workaround code for Python runtime environments that suffer + from the infamous socket module inet_aton('255.255.255.255') bug. This was + discovered recently in Python 2.4.x on PowerPC under MacOS X. The fix also + applies in cases where the socket module is not available (e.g. on Google + App Engine). + +* All general Exception raising in the strategy module has now been replaced + with more specific exceptions, mainly ValueError (these were unintentionally + missed out of the 0.4 release). + +* Implemented __hash__() operations for the Addr and AddrStrategy classes. This + allows you to use IP, CIDR and Wildcard objects as keys in dictionaries and + as elements in sets. Please note - this is currently an experimental feature + which may change in future releases. + +* Added __ne__() operation to Addr and AddrRange classes. + +* Obeying the 'Law of Demeter', the address type of Addr and AddrRange + (sub)class instances can be accessed using the property directly :- + + obj.addr_type # 0.5 onwards + + rather than having to go via the strategy object :- + + obj.strategy.addr_type # 0.4 and earlier + +* Renamed the AT_DESCR lookup dictionary to AT_NAMES. Removed invalid and + duplicated imports from all modules. + +**Addr class changes** + +* Removed the setvalue() method from the Addr class and replaced all uses of + __setattr__() replaced by custom descriptors throughout. + +**IP class changes** + +* Removed the ambiguity with masklen and prefixlen attributes in the IP class. + prefixlen now denotes the number of bits that define the netmask for an IP + address. The new method netmask_bits() returns the number of non-zero bits + in an IP object if the is_netmask() method returns True. A prefixlen value + other than /32 for an address where is_netmask() returns True is invalid + and will raise a ValueError exception. + +* Removed the family() method from the IP class. It duplicates information + now provided by the prefixlen property. + +* IP class has several new methods. is_multicast() and is_unicast() quickly + tell you what category of IP address you have and while ipv4() and ipv6() + act as IPv4 <-> IPv6 conversions or copy constructors depending on context. + +* Reverse DNS lookup entries now contain a trailing, top-level period (.) + character appended to them. + +* Added the hostname() method to IP instances which performs a reverse DNS + +* The IP class __str__() method now omits the subnet prefix is now implicit + for IPv4 addresses that are /32 and IPv6 addresses that are /128. Subnet + prefix is maintained in return value for all other values. + +**AddrRange class changes** + +* The AddrRange class no longer stores instances of Addr (sub)classes for the + first and last address in the range. The instance variables self.start_addr + and self.stop_addr have been renamed to self.first and self.last and the + methods obj.first() and obj.last() have been removed. + + Instead, self.first and self.last contain integer values and a reference + to a strategy object is stored. Doing this is a lot more useful and cleaner + for implementing internal logic. + + To get Addr (sub)class objects (or strings, hex etc when manipulating the + the klass property) use the index values obj[0] and obj[-1] as a substitute + for obj.first() and obj.last() respectively. + +* AddrRange (sub)class instances now define the increment, __iadd__(), and + decrement, __isub__(), operators. This allows you to 'slide' CIDRs and + Wildcards upwards and downwards based on their block sizes. + +* The _retval() method has now been renamed data_flavour() - yes, the UK + spelling ;-) You shouldn't really care much about this as it mostly for + internal use. I gave it a decent name as I didn't see any real need to hide + the functionality if users wanted it. + +**CIDR class changes** + +* The strictness of the CIDR class constructor in relation to non-zero bits + once the prefix bitmask has been applied can be disabled use the optional + argument strict_bitmask=False. It is True (strictness enabled) by default. + +* Fixed a bug in abbreviated CIDR conversion. Subnet prefix for multicast + address 224.0.0.0 is now /4 instead of /8. + +* The CIDR class now supports subtraction between two CIDR objects, returning + a list of the remainder. Please note that the bigger of the two CIDR objects + must be on the left hand side of the the expression, otherwise an empty list + is return. Sorry, you are not allowed to create negative CIDRs ;-) + +* The function abbrev_to_cidr() has been renamed to and turned into the static + method CIDR.abbrev_to_verbose(). No major changes to the logic have been + made. + +**Wildcard class changes** + +* The Wildcard class now defines a static method Wildcard.is_valid() that + allows you to perform validity tests on wildcard strings without fully + instantiation a Wildcard object. + +------------ +Release: 0.4 +------------ +Date: 7th Aug 2008 + +^^^^^^^^^^^^^^^^^^^ +Changes since 0.3.x +^^^^^^^^^^^^^^^^^^^ + +* All general Exception raising has been replaced with more specific + exceptions such as TypeError and ValueError and with the addition of two + custom exception classes, AddrFormatError and AddrConversionError. + +* The IP class now accepts a subnet prefix. It is *NOT* strict about non-zero + bits to the right of implied subnet mask, unlike the CIDR class (see below). + +* The CIDR class is now completely strict about non-zero bits to the right of + the implied subnet netmask and raises a ValueError if they exist, with a + handy hint as to the correct CIDR to be used based on the supplied subnet + prefix. + +* The CIDR class now also supports abbreviated CIDR ranges and uses older + classful network address rules to decided on a subnet prefix if one is not + explicitly provided. Supported forms now include 10, 10/8 and 192.168/16. + Currently only supports these options for IPv4 CIDR address ranges. + +* __repr__() methods have been defined for all classes in the netaddr module + producing executable Python statements that can be used to re-create the + state of any object. + +* CIDR and Wildcard classes now have methods that support conversions between + these two aggregate types :- + + * CIDR -> Wildcard + * Wildcard -> CIDR + +^^^^^^^^^^^^^^^^^^^^ +Housekeeping Changes +^^^^^^^^^^^^^^^^^^^^ + +* Massive docstring review and tidy up with the inclusino of epydoc specific + syntax to spruce up auto-generated API documentation. + +* Thorough review of code using pylint. + +* Netaddr module now has the special __version__ variable defined which is + also referenced by setup.py. + +* Some minor changes to setup.py and MANIFEST.in. + +* Constants and custom Exception classes have been moved to __init__.py from + strategy.py + +* An import * friendly __all__ has been defined for the netaddr namespace + which should remove the need to delve too much into the address and strategy + submodules. + +* Fixed a number of line-ending issues in several files. |