def assertCircularDependency(self, trace, target, graph): "Custom assertion that checks a circular dependency is detected correctly." self.assertRaises(exceptions.CircularDependency, depends, target, lambda n: graph[n]) try: depends(target, lambda n: graph[n]) except exceptions.CircularDependency, e: self.assertEqual(trace, e.trace)
def assertCircularDependency(self, trace, target, graph): self.assertRaises(exceptions.CircularDependency, depends, target, lambda n: graph[n]) try: depends(target, lambda n: graph[n]) except exceptions.CircularDependency, e: self.assertEqual(trace, e.trace)
def test_depends(self): graph = {"A1": []} self.assertEqual(["A1"], depends("A1", lambda n: graph[n])) graph = {"A1": [], "A2": ["A1"], "A3": ["A2"]} self.assertEqual(["A1", "A2", "A3"], depends("A3", lambda n: graph[n])) graph = {"A1": [], "A2": ["A1"], "A3": ["A2", "A1"]} self.assertEqual(["A1", "A2", "A3"], depends("A3", lambda n: graph[n])) graph = {"A1": [], "A2": ["A1"], "A3": ["A2", "A1", "B1"], "B1": []} self.assertEqual(["A1", "A2", "B1", "A3"], depends("A3", lambda n: graph[n])) graph = {"A1": [], "A2": ["A1"], "A3": ["A2", "A1", "B2"], "B1": [], "B2": ["B1"]} self.assertEqual(["A1", "A2", "B1", "B2", "A3"], depends("A3", lambda n: graph[n])) graph = {"A1": [], "A2": ["A1", "B1"], "A3": ["A2"], "B1": ["A1"]} self.assertEqual(["A1", "B1", "A2", "A3"], depends("A3", lambda n: graph[n])) graph = {"A1": [], "A2": ["A1"], "A3": ["A2", "A1", "B2"], "B1": [], "B2": ["B1", "C1"], "C1": ["B1"]} self.assertEqual(["A1", "A2", "B1", "C1", "B2", "A3"], depends("A3", lambda n: graph[n])) graph = { "A1": [], "A2": ["A1"], "A3": ["A2", "B2", "A1", "C1"], "B1": ["A1"], "B2": ["B1", "C2", "A1"], "C1": ["B1"], "C2": ["C1", "A1"], "C3": ["C2"], } self.assertEqual(["A1", "A2", "B1", "C1", "C2", "B2", "A3"], depends("A3", lambda n: graph[n]))
def test_depends(self): graph = {'A1': []} self.assertEqual(['A1'], depends('A1', lambda n: graph[n])) graph = {'A1': [], 'A2': ['A1'], 'A3': ['A2']} self.assertEqual(['A1', 'A2', 'A3'], depends('A3', lambda n: graph[n])) graph = {'A1': [], 'A2': ['A1'], 'A3': ['A2', 'A1']} self.assertEqual(['A1', 'A2', 'A3'], depends('A3', lambda n: graph[n])) graph = {'A1': [], 'A2': ['A1'], 'A3': ['A2', 'A1', 'B1'], 'B1': []} self.assertEqual( ['B1', 'A1', 'A2', 'A3'], depends('A3', lambda n: graph[n]), ) graph = {'A1': [], 'A2': ['A1'], 'A3': ['A2', 'A1', 'B2'], 'B1': [], 'B2': ['B1']} self.assertEqual( ['B1', 'B2', 'A1', 'A2', 'A3'], depends('A3', lambda n: graph[n]), ) graph = {'A1': [], 'A2': ['A1', 'B1'], 'A3': ['A2'], 'B1': ['A1']} self.assertEqual(['A1', 'B1', 'A2', 'A3'], depends('A3', lambda n: graph[n])) graph = {'A1': [], 'A2': ['A1'], 'A3': ['A2', 'A1', 'B2'], 'B1': [], 'B2': ['B1', 'C1'], 'C1': ['B1']} self.assertEqual( ['B1', 'C1', 'B2', 'A1', 'A2', 'A3'], depends('A3', lambda n: graph[n]), ) graph = {'A1': [], 'A2': ['A1'], 'A3': ['A2', 'B2', 'A1', 'C1'], 'B1': ['A1'], 'B2': ['B1', 'C2', 'A1'], 'C1': ['B1'], 'C2': ['C1', 'A1'], 'C3': ['C2']} self.assertEqual( ['A1', 'B1', 'C1', 'C2', 'B2', 'A2', 'A3'], depends('A3', lambda n: graph[n]), )
def forwards_plan(self): """ Returns a list of Migration objects to be applied, in order. This list includes `self`, which will be applied last. """ return depends(self, lambda x: x.dependencies)
def _backwards_plan(self): return depends(self, lambda x: x.dependents)
def _backwards_plan(self): return depends(self, self.__class__.dependents)