Base class for deciders
To align decider classes interface new base class introduced in this patch Change-Id: I42c69d3daa89153f1f3f9da32bccaf8d840ab1be
This commit is contained in:
@@ -14,6 +14,7 @@
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
import abc
|
||||
import functools
|
||||
import itertools
|
||||
|
||||
@@ -23,7 +24,33 @@ import six
|
||||
from taskflow import states as st
|
||||
|
||||
|
||||
class IgnoreDecider(object):
|
||||
@six.add_metaclass(abc.ABCMeta)
|
||||
class Decider(object):
|
||||
"""Base class for deciders.
|
||||
|
||||
Provides interface to be implemented by sub-classes
|
||||
Decider checks whether next atom in flow should be executed or not
|
||||
"""
|
||||
|
||||
@abc.abstractmethod
|
||||
def check(self, runtime):
|
||||
"""Returns bool of whether this decider should allow running."""
|
||||
|
||||
@abc.abstractmethod
|
||||
def affect(self, runtime):
|
||||
"""If the :py:func:`~.check` returns false, affects associated atoms.
|
||||
|
||||
"""
|
||||
|
||||
def check_and_affect(self, runtime):
|
||||
"""Handles :py:func:`~.check` + :py:func:`~.affect` in right order."""
|
||||
proceed = self.check(runtime)
|
||||
if not proceed:
|
||||
self.affect(runtime)
|
||||
return proceed
|
||||
|
||||
|
||||
class IgnoreDecider(Decider):
|
||||
"""Checks any provided edge-deciders and determines if ok to run."""
|
||||
|
||||
def __init__(self, atom, edge_deciders):
|
||||
@@ -51,15 +78,8 @@ class IgnoreDecider(object):
|
||||
runtime.reset_nodes(itertools.chain([self._atom], successors_iter),
|
||||
state=st.IGNORE, intention=st.IGNORE)
|
||||
|
||||
def check_and_affect(self, runtime):
|
||||
"""Handles :py:func:`~.check` + :py:func:`~.affect` in right order."""
|
||||
proceed = self.check(runtime)
|
||||
if not proceed:
|
||||
self.affect(runtime)
|
||||
return proceed
|
||||
|
||||
|
||||
class NoOpDecider(object):
|
||||
class NoOpDecider(Decider):
|
||||
"""No-op decider that says it is always ok to run & has no effect(s)."""
|
||||
|
||||
def check(self, runtime):
|
||||
@@ -69,13 +89,6 @@ class NoOpDecider(object):
|
||||
def affect(self, runtime):
|
||||
"""Does nothing."""
|
||||
|
||||
def check_and_affect(self, runtime):
|
||||
"""Handles :py:func:`~.check` + :py:func:`~.affect` in right order.
|
||||
|
||||
Does nothing.
|
||||
"""
|
||||
return self.check(runtime)
|
||||
|
||||
|
||||
class Analyzer(object):
|
||||
"""Analyzes a compilation and aids in execution processes.
|
||||
|
||||
Reference in New Issue
Block a user