From 8397cb59c8cab3a10213e232322f627c7a2dc924 Mon Sep 17 00:00:00 2001 From: Anastasia Karpinska Date: Mon, 17 Feb 2014 13:45:28 +0200 Subject: [PATCH] Check atom doesn't provide and return same values Change-Id: I8392899ea20bd12ec920bfe78928df865376911d --- taskflow/atom.py | 7 +++++ taskflow/tests/unit/test_flow_dependencies.py | 27 +++++-------------- 2 files changed, 13 insertions(+), 21 deletions(-) diff --git a/taskflow/atom.py b/taskflow/atom.py index 3e8c39ad..662af694 100644 --- a/taskflow/atom.py +++ b/taskflow/atom.py @@ -21,6 +21,7 @@ import logging import six +from taskflow import exceptions from taskflow.utils import misc from taskflow.utils import reflection @@ -131,6 +132,12 @@ class Atom(object): auto_extract=True): self.rebind = _build_arg_mapping(self.name, requires, rebind, executor, auto_extract) + out_of_order = self.provides.intersection(self.requires) + if out_of_order: + raise exceptions.InvariantViolation( + "Atom %(item)s provides %(oo)s that are required " + "by this atom" + % dict(item=self.name, oo=sorted(out_of_order))) @property def name(self): diff --git a/taskflow/tests/unit/test_flow_dependencies.py b/taskflow/tests/unit/test_flow_dependencies.py index 5d326307..d4739afd 100644 --- a/taskflow/tests/unit/test_flow_dependencies.py +++ b/taskflow/tests/unit/test_flow_dependencies.py @@ -109,13 +109,6 @@ class FlowDependenciesTest(test.TestCase): self.assertEqual(flow.requires, set(['a', 'b', 'c', 'z'])) self.assertEqual(flow.provides, set(['x', 'y', 'q', 'i', 'j', 'k'])) - def test_linear_flow_self_requires(self): - flow = lf.Flow('lf') - self.assertRaises(exceptions.InvariantViolation, - flow.add, - utils.TaskNoRequiresNoReturns(rebind=['x'], - provides='x')) - def test_linear_flow_provides_same_values(self): flow = lf.Flow('lf').add(utils.TaskOneReturn(provides='x')) self.assertRaises(exceptions.DependencyFailure, @@ -136,13 +129,6 @@ class FlowDependenciesTest(test.TestCase): self.assertEqual(flow.requires, set()) self.assertEqual(flow.provides, set()) - def test_unordered_flow_self_requires(self): - flow = uf.Flow('uf') - self.assertRaises(exceptions.InvariantViolation, - flow.add, - utils.TaskNoRequiresNoReturns(rebind=['x'], - provides='x')) - def test_unordered_flow_requires_values(self): flow = uf.Flow('uf').add( utils.TaskOneArg('task1'), @@ -236,13 +222,6 @@ class FlowDependenciesTest(test.TestCase): self.assertEqual(flow.requires, set()) self.assertEqual(flow.provides, set()) - def test_graph_flow_self_requires(self): - flow = gf.Flow('g-1-req-error') - self.assertRaisesRegexp(exceptions.DependencyFailure, '^No path', - flow.add, - utils.TaskOneArgOneReturn(requires=['a'], - provides='a')) - def test_graph_flow_requires_values(self): flow = gf.Flow('gf').add( utils.TaskOneArg('task1'), @@ -298,3 +277,9 @@ class FlowDependenciesTest(test.TestCase): requires=['c']), utils.TaskOneArgOneReturn(provides='c', requires=['a'])) + + def test_task_requires_and_provides_same_values(self): + self.assertRaises(exceptions.InvariantViolation, + utils.TaskOneArgOneReturn, + requires='a', + provides='a')