MCPcopy Index your code
hub / github.com/python/cpython / _collapse_addresses_internal

Function _collapse_addresses_internal

Lib/ipaddress.py:252–298  ·  view source on GitHub ↗

Loops through the addresses, collapsing concurrent netblocks. Example: ip1 = IPv4Network('192.0.2.0/26') ip2 = IPv4Network('192.0.2.64/26') ip3 = IPv4Network('192.0.2.128/26') ip4 = IPv4Network('192.0.2.192/26') _collapse_addresses_internal([ip1, ip2, i

(addresses)

Source from the content-addressed store, hash-verified

250
251
252def _collapse_addresses_internal(addresses):
253 """Loops through the addresses, collapsing concurrent netblocks.
254
255 Example:
256
257 ip1 = IPv4Network('192.0.2.0/26')
258 ip2 = IPv4Network('192.0.2.64/26')
259 ip3 = IPv4Network('192.0.2.128/26')
260 ip4 = IPv4Network('192.0.2.192/26')
261
262 _collapse_addresses_internal([ip1, ip2, ip3, ip4]) ->
263 [IPv4Network('192.0.2.0/24')]
264
265 This shouldn't be called directly; it is called via
266 collapse_addresses([]).
267
268 Args:
269 addresses: A list of IPv4Network's or IPv6Network's
270
271 Returns:
272 A list of IPv4Network's or IPv6Network's depending on what we were
273 passed.
274
275 """
276 # First merge
277 to_merge = list(addresses)
278 subnets = {}
279 while to_merge:
280 net = to_merge.pop()
281 supernet = net.supernet()
282 existing = subnets.get(supernet)
283 if existing is None:
284 subnets[supernet] = net
285 elif existing != net:
286 # Merge consecutive subnets
287 del subnets[supernet]
288 to_merge.append(supernet)
289 # Then iterate over resulting networks, skipping subsumed subnets
290 last = None
291 for net in sorted(subnets.values()):
292 if last is not None:
293 # Since they are sorted, last.network_address <= net.network_address
294 # is a given.
295 if last.broadcast_address >= net.broadcast_address:
296 continue
297 yield net
298 last = net
299
300
301def collapse_addresses(addresses):

Callers 1

collapse_addressesFunction · 0.85

Calls 6

listClass · 0.85
supernetMethod · 0.80
popMethod · 0.45
getMethod · 0.45
appendMethod · 0.45
valuesMethod · 0.45

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…