diff --git a/cylc/flow/xtriggers/echo.py b/cylc/flow/xtriggers/echo.py
index 1bc96db6955..686b4f59112 100644
--- a/cylc/flow/xtriggers/echo.py
+++ b/cylc/flow/xtriggers/echo.py
@@ -14,15 +14,17 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see .
-"""An xtrigger function that prints its arguments and never succeeds.
-This may be a useful aid to understanding how xtriggers work. Try returning
-True (success) and some results dict to pass on to dependent tasks.
+def echo(*args, **kwargs):
+ """An xtrigger function that prints its arguments and never succeeds.
-"""
+ This may be a useful aid to understanding how xtriggers work. Try returning
+ True (success) and some results dict to pass on to dependent tasks.
+ Returns
+ tuple: (False, {})
-def echo(*args, **kwargs):
+ """
print("echo: ARGS:", args)
print("echo: KWARGS:", kwargs)
- return (False, {})
+ return False, {}
diff --git a/cylc/flow/xtriggers/suite_state.py b/cylc/flow/xtriggers/suite_state.py
index 210e8a7976b..63682cd4c6f 100644
--- a/cylc/flow/xtriggers/suite_state.py
+++ b/cylc/flow/xtriggers/suite_state.py
@@ -14,24 +14,59 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see .
-"""xtrigger function to check a remote suite state.
-
-"""
-
import os
import sqlite3
-from cylc.flow.cycling.util import add_offset
+
from cylc.flow.cfgspec.glbl_cfg import glbl_cfg
+from cylc.flow.cycling.util import add_offset
from cylc.flow.dbstatecheck import CylcSuiteDBChecker
-from metomi.isodatetime.parsers import TimePointParser
+from isodatetime.parsers import TimePointParser
def suite_state(suite, task, point, offset=None, status='succeeded',
message=None, cylc_run_dir=None, debug=False):
"""Connect to a suite DB and query the requested task state.
- Reports satisfied only if the remote suite state has been achieved.
- Returns all suite state args to pass on to triggering tasks.
+ * Reports satisfied only if the remote suite state has been achieved.
+ * Returns all suite state args to pass on to triggering tasks.
+
+ Arguments:
+ suite (str):
+ The suite to interrogate.
+ task (str):
+ The name of the task to query.
+ offset (str):
+ The offset between the cycle this xtrigger is used in and the one
+ it is querying for as an ISO8601 time duration.
+ e.g. PT1H (one hour).
+ status (str):
+ The task status required for this xtrigger to be satisfied.
+ message (str):
+ The custom task output required for this xtrigger to be satisfied.
+ .. note::
+
+ This cannot be specified in conjunction with ``status``.
+
+ cylc_run_dir (str):
+ The directory in which the suite to interrogate.
+
+ .. note::
+
+ This only needs to be supplied if the suite is running in a
+ different location to what is specified in the global
+ configuration (usually ``~/cylc-run``).
+
+ debug (bool):
+ Flag to enable debug information.
+
+ Returns:
+ tuple: (satisfied, results)
+
+ satisfied (bool):
+ True if ``satisfied`` else ``False``.
+ results (dict):
+ Dictionary containing the args / kwargs which were provided
+ to this xtrigger (except ``debug``).
"""
cylc_run_dir = os.path.expandvars(
@@ -61,4 +96,4 @@ def suite_state(suite, task, point, offset=None, status='succeeded',
'message': message,
'cylc_run_dir': cylc_run_dir
}
- return (satisfied, results)
+ return satisfied, results
diff --git a/cylc/flow/xtriggers/xrandom.py b/cylc/flow/xtriggers/xrandom.py
index bcb46e56880..21187f1c432 100644
--- a/cylc/flow/xtriggers/xrandom.py
+++ b/cylc/flow/xtriggers/xrandom.py
@@ -14,12 +14,6 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see .
-"""xtrigger with a configurable random chance of success.
-
-Used for testing xtriggers.
-
-"""
-
from random import random, randint
from time import sleep
@@ -31,46 +25,61 @@
def xrandom(percent, secs=0, _=None, debug=False):
"""Random xtrigger, with configurable sleep and percent success.
- Sleep for seconds, and report satisfied with ~ likelihood.
- If satisfied, return a random color and size as the result.
- The '_' argument is not used in the function code, but can be used to
+ Sleep for ``sec`` seconds, and report satisfied with ~``percent``
+ likelihood.
+
+ The ``_`` argument is not used in the function code, but can be used to
specialize the function signature to cycle point or task.
- If the percent is zero, it returns that the trigger condition was
- not satisfied, and an empty dictionary.
- >>> xrandom(0, 0)
- (False, {})
+ Args:
+ percent (float):
+ Percent likelihood of passing.
+ secs (int):
+ Seconds to sleep before starting the trigger.
+ _ (object):
+ Used to allow users to specialize the trigger with extra parameters.
+ debug (bool):
+ Flag to enable debug information.
+
+ Examples:
+ If the percent is zero, it returns that the trigger condition was
+ not satisfied, and an empty dictionary.
+ >>> xrandom(0, 0)
+ (False, {})
- If the percent is not zero, but the random percent success is not met,
- then it also returns that the trigger condition was not satisfied,
- and an empty dictionary.
- >>> import sys
- >>> mocked_random = lambda: 0.3
- >>> sys.modules[__name__].random = mocked_random
- >>> xrandom(15.5, 0)
- (False, {})
+ If the percent is not zero, but the random percent success is not met,
+ then it also returns that the trigger condition was not satisfied,
+ and an empty dictionary.
+ >>> import sys
+ >>> mocked_random = lambda: 0.3
+ >>> sys.modules[__name__].random = mocked_random
+ >>> xrandom(15.5, 0)
+ (False, {})
- Finally, if the percent is not zero, and the random percent success is
- met, then it returns that the trigger condition was satisfied, and a
- dictionary containing random color and size as result.
- >>> import sys
- >>> mocked_random = lambda: 0.9
- >>> sys.modules[__name__].random = mocked_random
- >>> mocked_randint = lambda x, y: 1
- >>> sys.modules[__name__].randint = mocked_randint
- >>> xrandom(99.99, 0)
- (True, {'COLOR': 'orange', 'SIZE': 'small'})
+ Finally, if the percent is not zero, and the random percent success is
+ met, then it returns that the trigger condition was satisfied, and a
+ dictionary containing random color and size as result.
+ >>> import sys
+ >>> mocked_random = lambda: 0.9
+ >>> sys.modules[__name__].random = mocked_random
+ >>> mocked_randint = lambda x, y: 1
+ >>> sys.modules[__name__].randint = mocked_randint
+ >>> xrandom(99.99, 0)
+ (True, {'COLOR': 'orange', 'SIZE': 'small'})
- Args:
- percent (float): percent likelihood.
- secs (int): seconds to sleep before starting the trigger.
- _ (object): used to allow users to specialize the trigger
- with extra parameters.
- debug (bool): flag to enable debug information.
Returns:
- A tuple with the trigger flag (bool) which is set to True if the
- trigger was evaluated successful, False otherwise, and a random
- color and size (dict).
+ tuple: (satisfied, results)
+
+ satisfied (bool):
+ True if ``satisfied`` else ``False``.
+ results (dict):
+ A dictionary containing the following keys:
+
+ ``COLOR``
+ A random color (e.g. red, orange, ...)
+ ``SIZE``
+ A random size (e.g. small, medium, ...) as the result.
+
"""
sleep(float(secs))
results = {}
@@ -80,4 +89,4 @@ def xrandom(percent, secs=0, _=None, debug=False):
'COLOR': COLORS[randint(0, len(COLORS) - 1)], # nosec
'SIZE': SIZES[randint(0, len(SIZES) - 1)] # nosec
}
- return (satisfied, results)
+ return satisfied, results