[Python-Dev] PEP 3144 review. (original) (raw)
Scott Dial scott+python-dev at scottdial.com
Tue Sep 15 21:13:27 CEST 2009
- Previous message: [Python-Dev] PEP 3144 review.
- Next message: [Python-Dev] PEP 3144 review.
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Peter Moody wrote:
but that's what's being suggested here for networks.
ipaddr.IPv4Network('1.1.1.1/24')[0][1][2][3]...
This example here solidifies my support of RDM's suggestion of there being 3 types:
IPv4Address
IPv4AddressWithNetwork (or as he called it: IPv4AddressWithMask)
IPv4Network
The primary difference between IPv4Network and IPv4AddressWithNetwork would be that IPv4AddressWithNetwork would not support iteration/indexing. The example above makes no sense logically and my original suggestion unknowingly opened that can of worms. If indexing a IPv4Network returned IPv4AddressWithNetwork, then that would remove that oddity.
This would also solve the weirdness that Stephen brought up in another branch of this discussion:
Stephen J. Turnbull wrote:
Scott Dial writes: > ipaddr.IPv4Network('1.1.1.0/24')[0] == > ipaddr.IPv4Network('1.1.1.0/24')
So foo returns True? def foo(): a = ipaddr.IPv4Network('1.1.1.0/24') return a[0] == a That seems ... weird. Maybe you committed a typo?
The root of the weirdness is that my proposition would appear to make IPv4Network play double-duty. However, it already does! That you can instantiate a IPv4Network object with a non-zero host is a clue, and that it is apparently the only way to input a host with a mask is the second clue.
If I have an IP (10.2.3.4) and I know the netmask (say, 255.255.0.0), then how do I get the network that it is on? As it stands, the only way I see to do this is to do:
net = ipaddr.IPv4Network("10.2.3.4/255.255.0.0")
Which is strange, because I didn't input a network, I inputted an address on a network. Moreover, it's strange because:
net[0] == net.ip False
If I needed that identity to hold true, then I have to do:
net = ipaddr.IPv4Network("%s/%s" % (net[0], net.netmask)
Although it is unclear why a "network" has an "ip" attribute. As far as I am concerned, IPv4Network objects should only have a net.network.
Hopefully at this point, I have made the case that IPv4Network already is playing double-duty as a IPv4Network and IPv4AddressWithNetwork. And that the API would be well-served by splitting that role and that it would be considerably less confusing.
-- Scott Dial scott at scottdial.com scodial at cs.indiana.edu
- Previous message: [Python-Dev] PEP 3144 review.
- Next message: [Python-Dev] PEP 3144 review.
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]