[Python-Dev] PEP 3144 review. (original) (raw)

Steven D'Aprano steve at pearwood.info
Sun Sep 27 04:05:18 CEST 2009


On Sat, 26 Sep 2009 11:23:14 pm Barry Scott wrote:

I've seen user interfaces accept 192.168.1.1/24 as a short cut to set the ipaddr and netmask on an interface.

For that use being able to parse that string into an IP Address and a Net Mask is what they want.

I think you're at least the second person who has requested this functionality, or something similar.

If this is a common idiom having a utility function that returned an IPv4Address('192.168.1.1') and IPv4Network('192.168.0.0') would be useful.

If someone really thinks that '192.168.1.1/16' is a network any good UI should detect it is invalid report that to the user.

Currently the ipaddr module accepts that without complaint:

ipaddr.IPv4Network('192.168.1.1/16') IPv4Network('192.168.1.1/16')

The current behaviour is confusing to me. For example:

netw1 = ipaddr.IPv4Network('192.168.1.1/24') netw2 = ipaddr.IPv4Network('192.168.1.0/24') netw1 == netw2 False list(netw1) == list(netw2) True

Two networks, containing exactly the same range of addresses, but they don't compare equal. I'm not convinced that netw1 should even be allowed, but if it is, surely it should be turned into canonical form netw2? E.g. I would expect this:

ipaddr.IPv4Network('192.168.1.1/24') IPv4Network('192.168.1.0/24')

but that's not what it does.

-- Steven D'Aprano



More information about the Python-Dev mailing list