[Python-Dev] PEP 3144 ipaddr module (was Re: PEP 408 -- Standard library preview package) (original) (raw)

Nick Coghlan ncoghlan at gmail.com
Mon Jan 30 22:44:26 CET 2012


On Tue, Jan 31, 2012 at 4:19 AM, Scott Dial <scott+python-dev at scottdial.com> wrote:

PEP 3144 wasn't pronounced upon because there were significant disagreements about the design of the API proposed in the PEP. As it stands, I believe the authorship of ipaddr either decided that they were not going to compromise their module or lost interest.

See Nick Coghlan's summary: http://mail.python.org/pipermail//python-ideas/2011-August/011305.html

Peter Moody actually addressed all my comments from last year (alas, I forgot that python-ideas got dropped from the latter part of the email chain, so it became a private discussion between Peter, Guido and myself). I apparently got distracted by other issues and never followed up on Peter's final review request. The branch with the relevant changes is here (these weren't added back into ipaddr mainline since they aren't all backwards compatible with the existing ipaddr API): http://code.google.com/p/ipaddr-py/source/browse/#svn%2Fbranches%2F3144

Peter was very responsive and accommodating during that discussion :)

(The notes below are an edited version of Peter's off-list reply to me from last year, reflecting the final state of the ipaddr 3144 branch)

On Mon, Aug 29, 2011 at 7:09 PM, Nick Coghlan <ncoghlan at gmail.com> wrote:

I believe the PEP would be significantly more palatable with the
following changes/additions:
1. Draft ReStructuredText documentation for inclusion in the stdlib docs

(still needed)

2. Removal of the "ip" attribute of IP network objects (since it makes
the nominal "networks" behave like IP interface definitions)

the Class hierarchy now looks like:

_IPAddrBase(object) # mother of everything _BaseAddress(_IPAddrBase) # base for addresses _ BaseNetwork(_IPAddrBase) # base for networks and interfaces, could use be renamed. _BaseV4(object) # ipv4 base _BaseV6(object) # ipv6 base

IPv4Address(_BaseV4, _BaseAddress) IPv4Interface(_BaseV4, _BaseNetwork) IPv4Network(IPv4Interface)

IPv6Address(_BaseV6, _BaseAddress) IPv6Interface(_BaseV6, _BaseNetwork) IPv6Network(IPv6Interface)

(essentially, the current ipaddr "Network" objects become "Interface" objects in PEP 3144, with a new strict "Network" object that has no ip attribute)

3. "network" property renamed to "netaddr" (since it returns an
address object rather than a network object)

renamed to network_address. did the same for the broadcast_address.

4. "strict" parameter removed from class signatures, replaced with
class method for non-strict behaviour

'strict' is gone, just create IPv*Interface objects or use the ip_interface API instead. Network objects are always strict.

5. Factory functions renamed so they don't look like class names
(ip_network, ip_address, ip)

Now ip_address, ip_network, ip_interface

6. "strict" parameter on factory functions modified to default to True
rather than False

'strict' is gone. Interfaces allow a host IP, Networks don't.

7. Addition of an explicit "IPInterface" class to cover the
association of an address with a specific network that is currently
handled by storing arbitrary addresses on IP network objects

done.

So with a cleanup of the docstrings (and creation of some ReST docs based on them) a definite +1 from me for inclusion of ipaddr (based on the 3144 branch in SVN) in 3.3. (with the tweaks to the API, we may want to use a different name like "ipaddress" or "iptools", though - otherwise people could be legitimately confused by the differences relative to the PyPI "ipaddr" module)

Cheers, Nick.

-- Nick Coghlan   |   ncoghlan at gmail.com   |   Brisbane, Australia



More information about the Python-Dev mailing list