add a small c-c shell script to detect cycle for a given relation stable
authorSylvain Thénault <sylvain.thenault@logilab.fr>
Thu, 09 Sep 2010 10:08:08 +0200
branchstable
changeset 6198 f8dea560703f
parent 6197 d8f0dce0b86d
child 6199 a88902af3813
add a small c-c shell script to detect cycle for a given relation
misc/scripts/detect_cycle.py
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/misc/scripts/detect_cycle.py	Thu Sep 09 10:08:08 2010 +0200
@@ -0,0 +1,15 @@
+
+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)