update sqlalchemy

This commit is contained in:
Jan Gerber 2016-02-22 13:17:39 +01:00
commit a4267212e4
192 changed files with 17429 additions and 9601 deletions

View file

@ -1,5 +1,5 @@
# util/topological.py
# Copyright (C) 2005-2014 the SQLAlchemy authors and contributors
# Copyright (C) 2005-2016 the SQLAlchemy authors and contributors
# <see AUTHORS file>
#
# This module is part of SQLAlchemy and is released under
@ -13,18 +13,20 @@ from .. import util
__all__ = ['sort', 'sort_as_subsets', 'find_cycles']
def sort_as_subsets(tuples, allitems):
def sort_as_subsets(tuples, allitems, deterministic_order=False):
edges = util.defaultdict(set)
for parent, child in tuples:
edges[child].add(parent)
todo = set(allitems)
Set = util.OrderedSet if deterministic_order else set
todo = Set(allitems)
while todo:
output = set()
for node in list(todo):
if not todo.intersection(edges[node]):
output = Set()
for node in todo:
if todo.isdisjoint(edges[node]):
output.add(node)
if not output:
@ -38,13 +40,14 @@ def sort_as_subsets(tuples, allitems):
yield output
def sort(tuples, allitems):
def sort(tuples, allitems, deterministic_order=False):
"""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.
"""
for set_ in sort_as_subsets(tuples, allitems):
for set_ in sort_as_subsets(tuples, allitems, deterministic_order):
for s in set_:
yield s