misc/scripts/detect_cycle.py
author Denis Laxalde <denis.laxalde@logilab.fr>
Thu, 20 Mar 2014 10:41:22 +0100
changeset 10075 136b5f995f8e
parent 6198 f8dea560703f
child 10589 7c23b7de2b8d
permissions -rw-r--r--
Provide sufficient context to check 'delete' permission in AjaxEditRelationCtxComponent Call rdef.check only when both fromeid and toeid are available. Though only call it once (for the first encountered related entity). Factorize a bit to keep handling of CSS/JS addition the same. Closes #3670209.


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)