def test_raise_on_cycle_one(self):
        node1 = 'node1'
        node2 = 'node2'
        node3 = 'node3'
        node4 = 'node4'
        node5 = 'node5'
        tuples = [
            (node4, node5),
            (node5, node4),
            (node1, node2),
            (node2, node3),
            (node3, node1),
            (node4, node1),
            ]
        allitems = self._nodes_from_tuples(tuples)

        try:
            list(topological.sort(tuples, allitems))
            assert False
        except exc.CircularDependencyError, err:
            eq_(err.cycles, set(['node1', 'node3', 'node2', 'node5',
                'node4']))
            eq_(err.edges, set([('node3', 'node1'), ('node4', 'node1'),
                ('node2', 'node3'), ('node1', 'node2'), 
                ('node4','node5'), ('node5', 'node4')]))
    def test_raise_on_cycle_one(self):
        node1 = "node1"
        node2 = "node2"
        node3 = "node3"
        node4 = "node4"
        node5 = "node5"
        tuples = [(node4, node5), (node5, node4), (node1, node2), (node2, node3), (node3, node1), (node4, node1)]
        allitems = self._nodes_from_tuples(tuples)

        try:
            list(topological.sort(tuples, allitems))
            assert False
        except exc.CircularDependencyError, err:
            eq_(err.cycles, set(["node1", "node3", "node2", "node5", "node4"]))
            eq_(
                err.edges,
                set(
                    [
                        ("node3", "node1"),
                        ("node4", "node1"),
                        ("node2", "node3"),
                        ("node1", "node2"),
                        ("node4", "node5"),
                        ("node5", "node4"),
                    ]
                ),
            )
 def assert_sort(self, tuples, allitems=None):
     if allitems is None:
         allitems = self._nodes_from_tuples(tuples)
     else:
         allitems = self._nodes_from_tuples(tuples).union(allitems)
     result = list(topological.sort(tuples, allitems))
     deps = util.defaultdict(set)
     for parent, child in tuples:
         deps[parent].add(child)
     assert len(result)
     for i, node in enumerate(result):
         for n in result[i:]:
             assert node not in deps[n]
 def assert_sort(self, tuples, allitems=None):
     if allitems is None:
         allitems = self._nodes_from_tuples(tuples)
     else:
         allitems = self._nodes_from_tuples(tuples).union(allitems)
     result = list(topological.sort(tuples, allitems))
     deps = util.defaultdict(set)
     for parent, child in tuples:
         deps[parent].add(child)
     assert len(result)
     for i, node in enumerate(result):
         for n in result[i:]:
             assert node not in deps[n]
Beispiel #5
0
    def test_raise_on_cycle_two(self):

        # this condition was arising from ticket:362 and was not treated
        # properly by topological sort

        node1 = 'node1'
        node2 = 'node2'
        node3 = 'node3'
        node4 = 'node4'
        tuples = [(node1, node2), (node3, node1), (node2, node4),
                  (node3, node2), (node2, node3)]
        allitems = self._nodes_from_tuples(tuples)
        assert_raises(exc.CircularDependencyError, list,
                      topological.sort(tuples, allitems))
    def test_raise_on_cycle_two(self):

        # this condition was arising from ticket:362 and was not treated
        # properly by topological sort

        node1 = 'node1'
        node2 = 'node2'
        node3 = 'node3'
        node4 = 'node4'
        tuples = [(node1, node2), (node3, node1), (node2, node4),
                  (node3, node2), (node2, node3)]
        allitems = self._nodes_from_tuples(tuples)
        assert_raises(exc.CircularDependencyError, list,
                      topological.sort(tuples, allitems))
Beispiel #7
0
 def test_raise_on_cycle_three(self):
     question, issue, providerservice, answer, provider = \
         'Question', 'Issue', 'ProviderService', 'Answer', 'Provider'
     tuples = [
         (question, issue),
         (providerservice, issue),
         (provider, question),
         (question, provider),
         (providerservice, question),
         (provider, providerservice),
         (question, answer),
         (issue, question),
         ]
     allitems = self._nodes_from_tuples(tuples)
     assert_raises(exc.CircularDependencyError, list,
                   topological.sort(tuples, allitems))
Beispiel #8
0
def sort_tables(tables):
    """sort a collection of Table objects in order of their foreign-key dependency."""

    tables = list(tables)
    tuples = []
    def visit_foreign_key(fkey):
        if fkey.use_alter:
            return
        parent_table = fkey.column.table
        if parent_table in tables:
            child_table = fkey.parent.table
            tuples.append( ( parent_table, child_table ) )

    for table in tables:
        visitors.traverse(table, {'schema_visitor':True}, {'foreign_key':visit_foreign_key})
    return topological.sort(tuples, tables)
 def test_raise_on_cycle_three(self):
     question, issue, providerservice, answer, provider = \
         'Question', 'Issue', 'ProviderService', 'Answer', 'Provider'
     tuples = [
         (question, issue),
         (providerservice, issue),
         (provider, question),
         (question, provider),
         (providerservice, question),
         (provider, providerservice),
         (question, answer),
         (issue, question),
     ]
     allitems = self._nodes_from_tuples(tuples)
     assert_raises(exc.CircularDependencyError, list,
                   topological.sort(tuples, allitems))
 def test_raise_on_cycle_one(self):
     node1 = 'node1'
     node2 = 'node2'
     node3 = 'node3'
     node4 = 'node4'
     node5 = 'node5'
     tuples = [
         (node4, node5),
         (node5, node4),
         (node1, node2),
         (node2, node3),
         (node3, node1),
         (node4, node1),
     ]
     allitems = self._nodes_from_tuples(tuples)
     assert_raises(exc.CircularDependencyError, list,
                   topological.sort(tuples, allitems))
Beispiel #11
0
 def test_raise_on_cycle_one(self):
     node1 = 'node1'
     node2 = 'node2'
     node3 = 'node3'
     node4 = 'node4'
     node5 = 'node5'
     tuples = [
         (node4, node5),
         (node5, node4),
         (node1, node2),
         (node2, node3),
         (node3, node1),
         (node4, node1),
         ]
     allitems = self._nodes_from_tuples(tuples)
     assert_raises(exc.CircularDependencyError, list,
                   topological.sort(tuples, allitems))
Beispiel #12
0
    def execute(self):
        postsort_actions = self._generate_actions()

        #sort = topological.sort(self.dependencies, postsort_actions)
        #print "--------------"
        #print self.dependencies
        #print list(sort)
        #print "COUNT OF POSTSORT ACTIONS", len(postsort_actions)

        # execute
        if self.cycles:
            for set_ in topological.sort_as_subsets(self.dependencies,
                                                    postsort_actions):
                while set_:
                    n = set_.pop()
                    n.execute_aggregate(self, set_)
        else:
            for rec in topological.sort(self.dependencies, postsort_actions):
                rec.execute(self)
Beispiel #13
0
def sort_tables(tables, reverse=False):
    tuples = []

    class TVisitor(schema.SchemaVisitor):
        def visit_foreign_key(_self, fkey):
            if fkey.use_alter:
                return
            parent_table = fkey.column.table
            if parent_table in tables:
                child_table = fkey.parent.table
                tuples.append((parent_table, child_table))

    vis = TVisitor()
    for table in tables:
        vis.traverse(table)
    sequence = topological.sort(tuples, tables)
    if reverse:
        return util.reversed(sequence)
    else:
        return sequence
Beispiel #14
0
def sort_tables(tables, reverse=False):
    """sort a collection of Table objects in order of their foreign-key dependency."""
    
    tuples = []
    class TVisitor(schema.SchemaVisitor):
        def visit_foreign_key(_self, fkey):
            if fkey.use_alter:
                return
            parent_table = fkey.column.table
            if parent_table in tables:
                child_table = fkey.parent.table
                tuples.append( ( parent_table, child_table ) )
    vis = TVisitor()
    for table in tables:
        vis.traverse(table)
    sequence = topological.sort(tuples, tables)
    if reverse:
        return util.reversed(sequence)
    else:
        return sequence
Beispiel #15
0
def sort_tables(tables):
    """sort a collection of Table objects in order of their foreign-key dependency."""

    tables = list(tables)
    tuples = []

    def visit_foreign_key(fkey):
        if fkey.use_alter:
            return
        parent_table = fkey.column.table
        if parent_table in tables:
            child_table = fkey.parent.table
            if parent_table is not child_table:
                tuples.append((parent_table, child_table))

    for table in tables:
        visitors.traverse(table, {"schema_visitor": True}, {"foreign_key": visit_foreign_key})

        tuples.extend([parent, table] for parent in table._extra_dependencies)

    return list(topological.sort(tuples, tables))
    def test_raise_on_cycle_two(self):

        # this condition was arising from ticket:362 and was not treated
        # properly by topological sort

        node1 = 'node1'
        node2 = 'node2'
        node3 = 'node3'
        node4 = 'node4'
        tuples = [(node1, node2), (node3, node1), (node2, node4),
                  (node3, node2), (node2, node3)]
        allitems = self._nodes_from_tuples(tuples)

        try:
            list(topological.sort(tuples, allitems))
            assert False
        except exc.CircularDependencyError, err:
            eq_(err.cycles, set(['node1', 'node3', 'node2']))
            eq_(err.edges, set([('node3', 'node1'), ('node2', 'node3'),
                ('node3', 'node2'), ('node1', 'node2'), 
                ('node2','node4')]))
Beispiel #17
0
    def execute(self):
        postsort_actions = self._generate_actions()

        #sort = topological.sort(self.dependencies, postsort_actions)
        #print "--------------"
        #print self.dependencies
        #print list(sort)
        #print "COUNT OF POSTSORT ACTIONS", len(postsort_actions)

        # execute
        if self.cycles:
            for set_ in topological.sort_as_subsets(
                                            self.dependencies, 
                                            postsort_actions):
                while set_:
                    n = set_.pop()
                    n.execute_aggregate(self, set_)
        else:
            for rec in topological.sort(
                                    self.dependencies, 
                                    postsort_actions):
                rec.execute(self)
    def test_raise_on_cycle_two(self):

        # this condition was arising from ticket:362 and was not treated
        # properly by topological sort

        node1 = "node1"
        node2 = "node2"
        node3 = "node3"
        node4 = "node4"
        tuples = [(node1, node2), (node3, node1), (node2, node4), (node3, node2), (node2, node3)]
        allitems = self._nodes_from_tuples(tuples)

        try:
            list(topological.sort(tuples, allitems))
            assert False
        except exc.CircularDependencyError, err:
            eq_(err.cycles, set(["node1", "node3", "node2"]))
            eq_(
                err.edges,
                set(
                    [("node3", "node1"), ("node2", "node3"), ("node3", "node2"), ("node1", "node2"), ("node2", "node4")]
                ),
            )
Beispiel #19
0
 def testids(self):
     # ticket:1380 regression: would raise a KeyError
     topological.sort([(id(i), i) for i in range(3)], [])