Merge "Improve docstrings in graph flow to denote exceptions raised"
This commit is contained in:
@@ -54,10 +54,15 @@ class Flow(flow.Flow):
|
||||
which will be resolved by using the *flows/tasks* provides and requires
|
||||
mappings or by following manually created dependency links.
|
||||
|
||||
From dependencies directed graph is build. If it has edge A -> B, this
|
||||
means B depends on A.
|
||||
From dependencies a `directed graph`_ is built. If it has edge ``A -> B``,
|
||||
this means ``B`` depends on ``A`` (and that the execution of ``B`` must
|
||||
wait until ``A`` has finished executing, on reverting this means that the
|
||||
reverting of ``A`` must wait until ``B`` has finished reverting).
|
||||
|
||||
Note: Cyclic dependencies are not allowed.
|
||||
Note: `cyclic`_ dependencies are not allowed.
|
||||
|
||||
.. _directed graph: https://en.wikipedia.org/wiki/Directed_graph
|
||||
.. _cyclic: https://en.wikipedia.org/wiki/Cycle_graph
|
||||
"""
|
||||
|
||||
def __init__(self, name, retry=None):
|
||||
@@ -71,6 +76,12 @@ class Flow(flow.Flow):
|
||||
def link(self, u, v, decider=None):
|
||||
"""Link existing node u as a runtime dependency of existing node v.
|
||||
|
||||
Note that if the addition of these edges creates a `cyclic`_ graph
|
||||
then a :class:`~taskflow.exceptions.DependencyFailure` will be
|
||||
raised and the provided changes will be discarded. If the nodes
|
||||
that are being requested to link do not exist in this graph than a
|
||||
:class:`ValueError` will be raised.
|
||||
|
||||
:param u: task or flow to create a link from (must exist already)
|
||||
:param v: task or flow to create a link to (must exist already)
|
||||
:param decider: A callback function that will be expected to decide
|
||||
@@ -82,6 +93,8 @@ class Flow(flow.Flow):
|
||||
links that have ``v`` as a target. It is expected to
|
||||
return a single boolean (``True`` to allow ``v``
|
||||
execution or ``False`` to not).
|
||||
|
||||
.. _cyclic: https://en.wikipedia.org/wiki/Cycle_graph
|
||||
"""
|
||||
if not self._graph.has_node(u):
|
||||
raise ValueError("Node '%s' not found to link from" % (u))
|
||||
@@ -135,6 +148,11 @@ class Flow(flow.Flow):
|
||||
def add(self, *nodes, **kwargs):
|
||||
"""Adds a given task/tasks/flow/flows to this flow.
|
||||
|
||||
Note that if the addition of these nodes (and any edges) creates
|
||||
a `cyclic`_ graph then
|
||||
a :class:`~taskflow.exceptions.DependencyFailure` will be
|
||||
raised and the applied changes will be discarded.
|
||||
|
||||
:param nodes: node(s) to add to the flow
|
||||
:param kwargs: keyword arguments, the two keyword arguments
|
||||
currently processed are:
|
||||
@@ -144,13 +162,18 @@ class Flow(flow.Flow):
|
||||
symbol requirements will be matched to existing
|
||||
node(s) and links will be automatically made to those
|
||||
providers. If multiple possible providers exist
|
||||
then a AmbiguousDependency exception will be raised.
|
||||
then a
|
||||
:class:`~taskflow.exceptions.AmbiguousDependency`
|
||||
exception will be raised and the provided additions
|
||||
will be discarded.
|
||||
* ``resolve_existing``, a boolean that when true (the
|
||||
default) implies that on addition of a new node that
|
||||
existing node(s) will have their requirements scanned
|
||||
for symbols that this newly added node can provide.
|
||||
If a match is found a link is automatically created
|
||||
from the newly added node to the requiree.
|
||||
|
||||
.. _cyclic: https://en.wikipedia.org/wiki/Cycle_graph
|
||||
"""
|
||||
|
||||
# Let's try to avoid doing any work if we can; since the below code
|
||||
|
||||
Reference in New Issue
Block a user