diff options
| author | mike bayer <mike_mp@zzzcomputing.com> | 2020-12-12 02:53:44 +0000 |
|---|---|---|
| committer | Gerrit Code Review <gerrit@bbpush.zzzcomputing.com> | 2020-12-12 02:53:44 +0000 |
| commit | a66ef01e052d8f64b4b9bf90745a8ce84ff86109 (patch) | |
| tree | 44338d79e3ca307b177208b9fda0d1c9bf475c96 /lib/sqlalchemy/util | |
| parent | 8e9e473dcb76b57a7f0eaa476481cb66a258ea69 (diff) | |
| parent | af0b13b6d919c8c9ddf3a803eef21cd1a00a36ce (diff) | |
| download | sqlalchemy-a66ef01e052d8f64b4b9bf90745a8ce84ff86109.tar.gz | |
Merge "Send deterministic ordering into unit of work topological"
Diffstat (limited to 'lib/sqlalchemy/util')
| -rw-r--r-- | lib/sqlalchemy/util/topological.py | 29 |
1 files changed, 16 insertions, 13 deletions
diff --git a/lib/sqlalchemy/util/topological.py b/lib/sqlalchemy/util/topological.py index 4d6ef22ec..b009a8ce2 100644 --- a/lib/sqlalchemy/util/topological.py +++ b/lib/sqlalchemy/util/topological.py @@ -10,25 +10,23 @@ from .. import util from ..exc import CircularDependencyError - __all__ = ["sort", "sort_as_subsets", "find_cycles"] -def sort_as_subsets(tuples, allitems, deterministic_order=False): +def sort_as_subsets(tuples, allitems): edges = util.defaultdict(set) for parent, child in tuples: edges[child].add(parent) - Set = util.OrderedSet if deterministic_order else set - - todo = Set(allitems) + todo = list(allitems) + todo_set = set(allitems) - while todo: - output = Set() + while todo_set: + output = [] for node in todo: - if todo.isdisjoint(edges[node]): - output.add(node) + if todo_set.isdisjoint(edges[node]): + output.append(node) if not output: raise CircularDependencyError( @@ -37,18 +35,23 @@ def sort_as_subsets(tuples, allitems, deterministic_order=False): _gen_edges(edges), ) - todo.difference_update(output) + todo_set.difference_update(output) + todo = [t for t in todo if t in todo_set] yield output -def sort(tuples, allitems, deterministic_order=False): +def sort(tuples, allitems, deterministic_order=True): """sort the given list of items by dependency. 'tuples' is a list of tuples representing a partial ordering. - 'deterministic_order' keeps items within a dependency tier in list order. + + deterministic_order is no longer used, the order is now always + deterministic given the order of "allitems". the flag is there + for backwards compatibility with Alembic. + """ - for set_ in sort_as_subsets(tuples, allitems, deterministic_order): + for set_ in sort_as_subsets(tuples, allitems): for s in set_: yield s |
