def sorted(self):
        dag = DAG()
        imap = dict()
        vmap = dict()

        for _ in self.interceptors:
            k = self.key(_.interceptor)
            imap[k] = _
            vmap[k] = dag.add(k)

        for k in imap:
            _ = imap[k]
            v = vmap[k]

            if _.before:
                for o in _.before:
                    o = vmap[self.key(o)]
                    dag.add_edge(v, o)

            if _.after:
                for o in _.after:
                    o = vmap[self.key(o)]
                    dag.add_edge(o, v)

        rs = dag.topologicaly()
        s = [imap[k].interceptor for k in rs]
        return s
Exemple #2
0
    def test_cicle_detect_tuples(self):
        '''
        Tests the verticles order in:

        a --> b --> c --> a

        '''

        dag = DAG()
        a = dag.add(1)
        b = dag.add((1, 'b', None))
        c = dag.add(frozenset((2, 'c')))

        dag.add_edge(a, b)
        dag.add_edge(b, c)

        try:
            # add cicle at a --> b --> c --> a
            dag.add_edge(c, a)
            dag.add_edge(a, c)
            raise Exception("Cycle not detected")
        except CycleDetectedException:
            pass
Exemple #3
0
    def test_cicle_detect(self):
        '''
        Tests the verticles order in:

        C --> A --> B --> D -> C
        '''

        dag = DAG()
        a = dag.add("A")
        b = dag.add("B")
        c = dag.add("C")
        d = dag.add("D")

        dag.add_edge(c, a)
        dag.add_edge(a, b)
        dag.add_edge(b, d)
        dag.add_edge(c, d)

        try:
            # add cicle at A --> C --> A
            dag.add_edge(a, c)
            raise Exception("Cycle not detected")
        except CycleDetectedException:
            pass
Exemple #4
0
    def test_simple(self):
        '''
        Tests the verticles order in:

        C --> A --> B --> D
        '''

        dag = DAG()
        a = dag.add("A")
        b = dag.add("B")
        c = dag.add("C")
        d = dag.add("D")

        dag.add_edge(c, a)
        dag.add_edge(a, b)
        dag.add_edge(b, d)
        dag.add_edge(c, d)

        rs = dag.topologicaly()

        self.assertTrue(rs.index("C") < rs.index("A"))
        self.assertTrue(rs.index("A") < rs.index("B"))
        self.assertTrue(rs.index("B") < rs.index("D"))
        self.assertTrue(rs.index("C") < rs.index("D"))
'''
Created on Oct 3, 2012

@author: Moises P. Sena
'''
from sdag2 import DAG

dag = DAG()
a = dag.add("A")
b = dag.add("B")
c = dag.add("C")
d = dag.add("D")

dag.add_edge(c, a)
dag.add_edge(a, b)
dag.add_edge(b, d)
dag.add_edge(c, d)

rs = dag.topologicaly()
# Order is: C --> A --> B --> D
print("Order is: %s" % (" --> ".join(rs)))

assert rs.index("C") < rs.index("A")
assert rs.index("A") < rs.index("B")
assert rs.index("B") < rs.index("D")
assert rs.index("C") < rs.index("D")