@@ -1515,45 +1515,28 @@ def __init__(self, address, strict=True):
15151515
15161516 # Constructing from a packed address or integer
15171517 if isinstance (address , (int , bytes )):
1518- self .network_address = IPv4Address (address )
1519- self .netmask , self ._prefixlen = self ._make_netmask (self ._max_prefixlen )
1520- #fixme: address/network test here.
1521- return
1522-
1523- if isinstance (address , tuple ):
1524- if len (address ) > 1 :
1525- arg = address [1 ]
1526- else :
1527- # We weren't given an address[1]
1528- arg = self ._max_prefixlen
1529- self .network_address = IPv4Address (address [0 ])
1530- self .netmask , self ._prefixlen = self ._make_netmask (arg )
1531- packed = int (self .network_address )
1532- if packed & int (self .netmask ) != packed :
1533- if strict :
1534- raise ValueError ('%s has host bits set' % self )
1535- else :
1536- self .network_address = IPv4Address (packed &
1537- int (self .netmask ))
1538- return
1539-
1518+ addr = address
1519+ mask = self ._max_prefixlen
1520+ # Constructing from a tuple (addr, [mask])
1521+ elif isinstance (address , tuple ):
1522+ addr = address [0 ]
1523+ mask = address [1 ] if len (address ) > 1 else self ._max_prefixlen
15401524 # Assume input argument to be string or any object representation
15411525 # which converts into a formatted IP prefix string.
1542- addr = _split_optional_netmask (address )
1543- self .network_address = IPv4Address (self ._ip_int_from_string (addr [0 ]))
1544-
1545- if len (addr ) == 2 :
1546- arg = addr [1 ]
15471526 else :
1548- arg = self ._max_prefixlen
1549- self .netmask , self ._prefixlen = self ._make_netmask (arg )
1550-
1551- if strict :
1552- if (IPv4Address (int (self .network_address ) & int (self .netmask )) !=
1553- self .network_address ):
1527+ args = _split_optional_netmask (address )
1528+ addr = self ._ip_int_from_string (args [0 ])
1529+ mask = args [1 ] if len (args ) == 2 else self ._max_prefixlen
1530+
1531+ self .network_address = IPv4Address (addr )
1532+ self .netmask , self ._prefixlen = self ._make_netmask (mask )
1533+ packed = int (self .network_address )
1534+ if packed & int (self .netmask ) != packed :
1535+ if strict :
15541536 raise ValueError ('%s has host bits set' % self )
1555- self .network_address = IPv4Address (int (self .network_address ) &
1556- int (self .netmask ))
1537+ else :
1538+ self .network_address = IPv4Address (packed &
1539+ int (self .netmask ))
15571540
15581541 if self ._prefixlen == (self ._max_prefixlen - 1 ):
15591542 self .hosts = self .__iter__
@@ -2208,46 +2191,30 @@ def __init__(self, address, strict=True):
22082191 """
22092192 _BaseNetwork .__init__ (self , address )
22102193
2211- # Efficient constructor from integer or packed address
2212- if isinstance (address , (bytes , int )):
2213- self .network_address = IPv6Address (address )
2214- self .netmask , self ._prefixlen = self ._make_netmask (self ._max_prefixlen )
2215- return
2216-
2217- if isinstance (address , tuple ):
2218- if len (address ) > 1 :
2219- arg = address [1 ]
2220- else :
2221- arg = self ._max_prefixlen
2222- self .netmask , self ._prefixlen = self ._make_netmask (arg )
2223- self .network_address = IPv6Address (address [0 ])
2224- packed = int (self .network_address )
2225- if packed & int (self .netmask ) != packed :
2226- if strict :
2227- raise ValueError ('%s has host bits set' % self )
2228- else :
2229- self .network_address = IPv6Address (packed &
2230- int (self .netmask ))
2231- return
2232-
2194+ # Constructing from a packed address or integer
2195+ if isinstance (address , (int , bytes )):
2196+ addr = address
2197+ mask = self ._max_prefixlen
2198+ # Constructing from a tuple (addr, [mask])
2199+ elif isinstance (address , tuple ):
2200+ addr = address [0 ]
2201+ mask = address [1 ] if len (address ) > 1 else self ._max_prefixlen
22332202 # Assume input argument to be string or any object representation
22342203 # which converts into a formatted IP prefix string.
2235- addr = _split_optional_netmask (address )
2236-
2237- self .network_address = IPv6Address (self ._ip_int_from_string (addr [0 ]))
2238-
2239- if len (addr ) == 2 :
2240- arg = addr [1 ]
22412204 else :
2242- arg = self ._max_prefixlen
2243- self .netmask , self ._prefixlen = self ._make_netmask (arg )
2244-
2245- if strict :
2246- if (IPv6Address (int (self .network_address ) & int (self .netmask )) !=
2247- self .network_address ):
2205+ args = _split_optional_netmask (address )
2206+ addr = self ._ip_int_from_string (args [0 ])
2207+ mask = args [1 ] if len (args ) == 2 else self ._max_prefixlen
2208+
2209+ self .network_address = IPv6Address (addr )
2210+ self .netmask , self ._prefixlen = self ._make_netmask (mask )
2211+ packed = int (self .network_address )
2212+ if packed & int (self .netmask ) != packed :
2213+ if strict :
22482214 raise ValueError ('%s has host bits set' % self )
2249- self .network_address = IPv6Address (int (self .network_address ) &
2250- int (self .netmask ))
2215+ else :
2216+ self .network_address = IPv6Address (packed &
2217+ int (self .netmask ))
22512218
22522219 if self ._prefixlen == (self ._max_prefixlen - 1 ):
22532220 self .hosts = self .__iter__
0 commit comments