@@ -1498,45 +1498,28 @@ def __init__(self, address, strict=True):
14981498
14991499 # Constructing from a packed address or integer
15001500 if isinstance (address , (int , bytes )):
1501- self .network_address = IPv4Address (address )
1502- self .netmask , self ._prefixlen = self ._make_netmask (self ._max_prefixlen )
1503- #fixme: address/network test here.
1504- return
1505-
1506- if isinstance (address , tuple ):
1507- if len (address ) > 1 :
1508- arg = address [1 ]
1509- else :
1510- # We weren't given an address[1]
1511- arg = self ._max_prefixlen
1512- self .network_address = IPv4Address (address [0 ])
1513- self .netmask , self ._prefixlen = self ._make_netmask (arg )
1514- packed = int (self .network_address )
1515- if packed & int (self .netmask ) != packed :
1516- if strict :
1517- raise ValueError ('%s has host bits set' % self )
1518- else :
1519- self .network_address = IPv4Address (packed &
1520- int (self .netmask ))
1521- return
1522-
1501+ addr = address
1502+ mask = self ._max_prefixlen
1503+ # Constructing from a tuple (addr, [mask])
1504+ elif isinstance (address , tuple ):
1505+ addr = address [0 ]
1506+ mask = address [1 ] if len (address ) > 1 else self ._max_prefixlen
15231507 # Assume input argument to be string or any object representation
15241508 # which converts into a formatted IP prefix string.
1525- addr = _split_optional_netmask (address )
1526- self .network_address = IPv4Address (self ._ip_int_from_string (addr [0 ]))
1527-
1528- if len (addr ) == 2 :
1529- arg = addr [1 ]
15301509 else :
1531- arg = self ._max_prefixlen
1532- self .netmask , self ._prefixlen = self ._make_netmask (arg )
1533-
1534- if strict :
1535- if (IPv4Address (int (self .network_address ) & int (self .netmask )) !=
1536- self .network_address ):
1510+ args = _split_optional_netmask (address )
1511+ addr = self ._ip_int_from_string (args [0 ])
1512+ mask = args [1 ] if len (args ) == 2 else self ._max_prefixlen
1513+
1514+ self .network_address = IPv4Address (addr )
1515+ self .netmask , self ._prefixlen = self ._make_netmask (mask )
1516+ packed = int (self .network_address )
1517+ if packed & int (self .netmask ) != packed :
1518+ if strict :
15371519 raise ValueError ('%s has host bits set' % self )
1538- self .network_address = IPv4Address (int (self .network_address ) &
1539- int (self .netmask ))
1520+ else :
1521+ self .network_address = IPv4Address (packed &
1522+ int (self .netmask ))
15401523
15411524 if self ._prefixlen == (self ._max_prefixlen - 1 ):
15421525 self .hosts = self .__iter__
@@ -2191,46 +2174,30 @@ def __init__(self, address, strict=True):
21912174 """
21922175 _BaseNetwork .__init__ (self , address )
21932176
2194- # Efficient constructor from integer or packed address
2195- if isinstance (address , (bytes , int )):
2196- self .network_address = IPv6Address (address )
2197- self .netmask , self ._prefixlen = self ._make_netmask (self ._max_prefixlen )
2198- return
2199-
2200- if isinstance (address , tuple ):
2201- if len (address ) > 1 :
2202- arg = address [1 ]
2203- else :
2204- arg = self ._max_prefixlen
2205- self .netmask , self ._prefixlen = self ._make_netmask (arg )
2206- self .network_address = IPv6Address (address [0 ])
2207- packed = int (self .network_address )
2208- if packed & int (self .netmask ) != packed :
2209- if strict :
2210- raise ValueError ('%s has host bits set' % self )
2211- else :
2212- self .network_address = IPv6Address (packed &
2213- int (self .netmask ))
2214- return
2215-
2177+ # Constructing from a packed address or integer
2178+ if isinstance (address , (int , bytes )):
2179+ addr = address
2180+ mask = self ._max_prefixlen
2181+ # Constructing from a tuple (addr, [mask])
2182+ elif isinstance (address , tuple ):
2183+ addr = address [0 ]
2184+ mask = address [1 ] if len (address ) > 1 else self ._max_prefixlen
22162185 # Assume input argument to be string or any object representation
22172186 # which converts into a formatted IP prefix string.
2218- addr = _split_optional_netmask (address )
2219-
2220- self .network_address = IPv6Address (self ._ip_int_from_string (addr [0 ]))
2221-
2222- if len (addr ) == 2 :
2223- arg = addr [1 ]
22242187 else :
2225- arg = self ._max_prefixlen
2226- self .netmask , self ._prefixlen = self ._make_netmask (arg )
2227-
2228- if strict :
2229- if (IPv6Address (int (self .network_address ) & int (self .netmask )) !=
2230- self .network_address ):
2188+ args = _split_optional_netmask (address )
2189+ addr = self ._ip_int_from_string (args [0 ])
2190+ mask = args [1 ] if len (args ) == 2 else self ._max_prefixlen
2191+
2192+ self .network_address = IPv6Address (addr )
2193+ self .netmask , self ._prefixlen = self ._make_netmask (mask )
2194+ packed = int (self .network_address )
2195+ if packed & int (self .netmask ) != packed :
2196+ if strict :
22312197 raise ValueError ('%s has host bits set' % self )
2232- self .network_address = IPv6Address (int (self .network_address ) &
2233- int (self .netmask ))
2198+ else :
2199+ self .network_address = IPv6Address (packed &
2200+ int (self .netmask ))
22342201
22352202 if self ._prefixlen == (self ._max_prefixlen - 1 ):
22362203 self .hosts = self .__iter__
0 commit comments