MCPcopy
hub / github.com/django/django / dependency_ordered

Function dependency_ordered

django/test/utils.py:285–324  ·  view source on GitHub ↗

Reorder test_databases into an order that honors the dependencies described in TEST[DEPENDENCIES].

(test_databases, dependencies)

Source from the content-addressed store, hash-verified

283
284
285def dependency_ordered(test_databases, dependencies):
286 """
287 Reorder test_databases into an order that honors the dependencies
288 described in TEST[DEPENDENCIES].
289 """
290 ordered_test_databases = []
291 resolved_databases = set()
292
293 # Maps db signature to dependencies of all its aliases
294 dependencies_map = {}
295
296 # Check that no database depends on its own alias
297 for sig, (_, aliases) in test_databases:
298 all_deps = set()
299 for alias in aliases:
300 all_deps.update(dependencies.get(alias, []))
301 if not all_deps.isdisjoint(aliases):
302 raise ImproperlyConfigured(
303 "Circular dependency: databases %r depend on each other, "
304 "but are aliases." % aliases
305 )
306 dependencies_map[sig] = all_deps
307
308 while test_databases:
309 changed = False
310 deferred = []
311
312 # Try to find a DB that has all its dependencies met
313 for signature, (db_name, aliases) in test_databases:
314 if dependencies_map[signature].issubset(resolved_databases):
315 resolved_databases.update(aliases)
316 ordered_test_databases.append((signature, (db_name, aliases)))
317 changed = True
318 else:
319 deferred.append((signature, (db_name, aliases)))
320
321 if not changed:
322 raise ImproperlyConfigured("Circular dependency in TEST[DEPENDENCIES]")
323 test_databases = deferred
324 return ordered_test_databases
325
326
327def get_unique_databases_and_mirrors(aliases=None):

Calls 4

updateMethod · 0.45
getMethod · 0.45
appendMethod · 0.45