cubicweb/misc/scripts/detect_cycle.py
changeset 11057 0b59724cb3f2
parent 10589 7c23b7de2b8d
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/cubicweb/misc/scripts/detect_cycle.py	Sat Jan 16 13:48:51 2016 +0100
@@ -0,0 +1,16 @@
+from __future__ import print_function
+
+try:
+    rtype, = __args__
+except ValueError:
+    print('USAGE: cubicweb-ctl shell <instance> detect_cycle.py -- <relation type>')
+    print()
+
+graph = {}
+for fromeid, toeid in rql('Any X,Y WHERE X %s Y' % rtype):
+    graph.setdefault(fromeid, []).append(toeid)
+
+from logilab.common.graph import get_cycles
+
+for cycle in get_cycles(graph):
+    print('cycle', '->'.join(str(n) for n in cycle))