diff options
author | Mike Bayer <mike_mp@zzzcomputing.com> | 2010-09-29 02:11:38 -0400 |
---|---|---|
committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2010-09-29 02:11:38 -0400 |
commit | e9e221977bde7724d4ef3b553de4f982028eead8 (patch) | |
tree | 9da735bed0b6e84d8b17435d6e35ff5cc1548f25 /lib/sqlalchemy/topological.py | |
parent | 2811ca21069f63a1b86428a28416c609dc532bbb (diff) | |
download | sqlalchemy-e9e221977bde7724d4ef3b553de4f982028eead8.tar.gz |
- CircularDependencyError now has .cycles and .edges
members, which are the set of elements involved in
one or more cycles, and the set of edges as 2-tuples.
[ticket:1890]
Diffstat (limited to 'lib/sqlalchemy/topological.py')
-rw-r--r-- | lib/sqlalchemy/topological.py | 26 |
1 files changed, 13 insertions, 13 deletions
diff --git a/lib/sqlalchemy/topological.py b/lib/sqlalchemy/topological.py index 6c3e90d98..9386f7335 100644 --- a/lib/sqlalchemy/topological.py +++ b/lib/sqlalchemy/topological.py @@ -8,6 +8,7 @@ from sqlalchemy.exc import CircularDependencyError from sqlalchemy import util +import itertools __all__ = ['sort', 'sort_as_subsets', 'find_cycles'] @@ -27,8 +28,10 @@ def sort_as_subsets(tuples, allitems): if not output: raise CircularDependencyError( - "Circular dependency detected: cycles: %r all edges: %s" % - (find_cycles(tuples, allitems), _dump_edges(edges, True))) + "Circular dependency detected", + find_cycles(tuples, allitems), + _gen_edges(edges) + ) todo.difference_update(output) yield output @@ -72,14 +75,11 @@ def find_cycles(tuples, allitems): node = stack.pop() return output -def _dump_edges(edges, reverse): - l = [] - for left in edges: - for right in edges[left]: - if reverse: - l.append((right, left)) - else: - l.append((left, right)) - return repr(l) - - +def _gen_edges(edges): + return set(itertools.chain( + *[ + [ + (right, left) for right in edges[left] + ] for left in edges + ] + )) |