Exceptions cleanup

Most TaskFlow exception don't have 'Exception' suffix in their names, so
we drop it from the few that have it, for sake of consistency and more
concise and expressive code.

MissingDependencies parent object is changed from InvalidState to
InvariantViolation, which is more appropriate.

Unused ClosedException is dropped.

Breaking change: any client code that used renamed exceptions,
ClosedException or relied on catching MissingDependencies as
InvariantViolationException is affected.

Change-Id: I649b7760d382ccb6df333bdffd667ba6b67a431e
This commit is contained in:
Ivan A. Melnikov
2014-01-14 13:49:20 +04:00
parent 135f562408
commit 9d0b16e7fb
8 changed files with 20 additions and 25 deletions

View File

@@ -45,24 +45,19 @@ class AlreadyExists(TaskFlowException):
pass
class ClosedException(TaskFlowException):
"""Raised when an access on a closed object occurs."""
pass
class InvalidStateException(TaskFlowException):
class InvalidState(TaskFlowException):
"""Raised when a task/job/workflow is in an invalid state when an
operation is attempting to apply to said task/job/workflow.
"""
pass
class InvariantViolationException(TaskFlowException):
class InvariantViolation(TaskFlowException):
"""Raised when flow invariant violation is attempted."""
pass
class UnclaimableJobException(TaskFlowException):
class UnclaimableJob(TaskFlowException):
"""Raised when a job can not be claimed."""
pass
@@ -72,7 +67,7 @@ class JobNotFound(TaskFlowException):
pass
class MissingDependencies(InvalidStateException):
class MissingDependencies(InvariantViolation):
"""Raised when a entity has dependencies that can not be satisfied."""
message = ("%(who)s requires %(requirements)s but no other entity produces"
" said requirements")

View File

@@ -45,7 +45,7 @@ class Flow(flow.Flow):
requires |= item.requires
out_of_order = requires & item.provides
if out_of_order:
raise exceptions.InvariantViolationException(
raise exceptions.InvariantViolation(
"%(item)s provides %(oo)s that are required "
"by previous item(s) of linear flow %(flow)s"
% dict(item=item.name, flow=self.name,

View File

@@ -47,7 +47,7 @@ class Flow(flow.Flow):
item_provides = item.provides
bad_provs = item_provides & old_requires
if bad_provs:
raise exceptions.InvariantViolationException(
raise exceptions.InvariantViolation(
"%(item)s provides %(oo)s that are required "
"by other item(s) of unordered flow %(flow)s"
% dict(item=item.name, flow=self.name,
@@ -65,7 +65,7 @@ class Flow(flow.Flow):
for item in items:
bad_reqs = provides & item.requires
if bad_reqs:
raise exceptions.InvariantViolationException(
raise exceptions.InvariantViolation(
"%(item)s requires %(oo)s that are provided "
"by other item(s) of unordered flow %(flow)s"
% dict(item=item.name, flow=self.name,

View File

@@ -112,7 +112,7 @@ def check_flow_transition(old_state, new_state):
If transition can be performed, it returns True. If transition
should be ignored, it returns False. If transition is not
valid, it raises InvalidStateException.
valid, it raises InvalidState exception.
"""
if old_state == new_state:
return False
@@ -121,8 +121,8 @@ def check_flow_transition(old_state, new_state):
return True
if pair in _IGNORED_FLOW_TRANSITIONS:
return False
raise exc.InvalidStateException(
"Flow transition from %s to %s is not allowed" % pair)
raise exc.InvalidState("Flow transition from %s to %s is not allowed"
% pair)
## Task state transitions

View File

@@ -40,7 +40,7 @@ class CheckFlowTransitionTest(test.TestCase):
states.check_flow_transition(states.RUNNING, states.RESUMING))
def test_bad_transition_raises(self):
self.assertRaisesRegexp(exc.InvalidStateException,
self.assertRaisesRegexp(exc.InvalidState,
'^Flow transition.*not allowed',
states.check_flow_transition,
states.FAILURE, states.SUCCESS)

View File

@@ -174,7 +174,7 @@ class FlattenTest(test.TestCase):
t_utils.DummyTask(name="a"),
t_utils.DummyTask(name="a")
)
self.assertRaisesRegexp(exc.InvariantViolationException,
self.assertRaisesRegexp(exc.InvariantViolation,
'^Tasks with duplicate names',
f_utils.flatten, flo)
@@ -182,6 +182,6 @@ class FlattenTest(test.TestCase):
flo = gf.Flow("test").add(
gf.Flow("int1").add(t_utils.DummyTask(name="a")),
gf.Flow("int2").add(t_utils.DummyTask(name="a")))
self.assertRaisesRegexp(exc.InvariantViolationException,
self.assertRaisesRegexp(exc.InvariantViolation,
'^Tasks with duplicate names',
f_utils.flatten, flo)

View File

@@ -87,7 +87,7 @@ class FlowDependenciesTest(test.TestCase):
def test_linear_flow_provides_out_of_order(self):
flow = lf.Flow('lf')
self.assertRaises(exceptions.InvariantViolationException,
self.assertRaises(exceptions.InvariantViolation,
flow.add,
utils.TaskOneArg('task2'),
utils.TaskOneReturn('task1', provides='x'))
@@ -111,7 +111,7 @@ class FlowDependenciesTest(test.TestCase):
def test_linear_flow_self_requires(self):
flow = lf.Flow('lf')
self.assertRaises(exceptions.InvariantViolationException,
self.assertRaises(exceptions.InvariantViolation,
flow.add,
utils.TaskNoRequiresNoReturns(rebind=['x'],
provides='x'))
@@ -138,7 +138,7 @@ class FlowDependenciesTest(test.TestCase):
def test_unordered_flow_self_requires(self):
flow = uf.Flow('uf')
self.assertRaises(exceptions.InvariantViolationException,
self.assertRaises(exceptions.InvariantViolation,
flow.add,
utils.TaskNoRequiresNoReturns(rebind=['x'],
provides='x'))
@@ -166,7 +166,7 @@ class FlowDependenciesTest(test.TestCase):
def test_unordered_flow_provides_required_values(self):
flow = uf.Flow('uf')
self.assertRaises(exceptions.InvariantViolationException,
self.assertRaises(exceptions.InvariantViolation,
flow.add,
utils.TaskOneReturn('task1', provides='x'),
utils.TaskOneArg('task2'))
@@ -174,14 +174,14 @@ class FlowDependenciesTest(test.TestCase):
def test_unordered_flow_requires_provided_value_other_call(self):
flow = uf.Flow('uf')
flow.add(utils.TaskOneReturn('task1', provides='x'))
self.assertRaises(exceptions.InvariantViolationException,
self.assertRaises(exceptions.InvariantViolation,
flow.add,
utils.TaskOneArg('task2'))
def test_unordered_flow_provides_required_value_other_call(self):
flow = uf.Flow('uf')
flow.add(utils.TaskOneArg('task2'))
self.assertRaises(exceptions.InvariantViolationException,
self.assertRaises(exceptions.InvariantViolation,
flow.add,
utils.TaskOneReturn('task1', provides='x'))

View File

@@ -147,7 +147,7 @@ def _post_flatten(graph):
dup_names = misc.get_duplicate_keys(graph.nodes_iter(),
key=lambda node: node.name)
if dup_names:
raise exceptions.InvariantViolationException(
raise exceptions.InvariantViolation(
"Tasks with duplicate names found: %s"
% ', '.join(sorted(dup_names)))
return graph