# Triggers


Triggers are functions that determine if a task should run based on the state of upstream tasks.

For example, suppose we want to construct a flow with one root task; if this task succeeds, we want to run task B. If instead it fails, we want to run task C. We can accomplish this pattern through the use of triggers:

import random

from prefect.triggers import all_successful, all_failed
from prefect import task, Flow


@task(name="Task A")
def task_a():
    if random.random() > 0.5:
        raise ValueError("Non-deterministic error has occured.")

@task(name="Task B", trigger=all_successful)
def task_b():
    # do something interesting
    pass

@task(name="Task C", trigger=all_failed)
def task_c():
    # do something interesting
    pass


with Flow("Trigger example") as flow:
    success = task_b(upstream_tasks=[task_a])
    fail = task_c(upstream_tasks=[task_a])

## note that as written, this flow will fail regardless of the path taken
## because *at least one* terminal task will fail;
## to fix this, we want to set Task B as the "reference task" for the Flow
## so that its state uniquely determines the overall Flow state
flow.set_reference_tasks([success])

flow.run()

# Functions

top-level functions:                                                                                                                                                       

prefect.triggers.all_finished

(upstream_states)[source]

This task will run no matter what the upstream states are, as long as they are finished.

Args:

  • upstream_states (dict[Edge, State]): the set of all upstream states

prefect.triggers.manual_only

(upstream_states)[source]

This task will never run automatically, because this trigger will always place the task in a Paused state. The only exception is if the "resume" keyword is found in the Prefect context, which happens automatically when a task starts in a Resume state.

Args:

  • upstream_states (dict[Edge, State]): the set of all upstream states

prefect.triggers.all_successful

(upstream_states)[source]

Runs if all upstream tasks were successful. Note that SKIPPED tasks are considered successes and TRIGGER_FAILED tasks are considered failures.

Args:

  • upstream_states (dict[Edge, State]): the set of all upstream states

prefect.triggers.all_failed

(upstream_states)[source]

Runs if all upstream tasks failed. Note that SKIPPED tasks are considered successes and TRIGGER_FAILED tasks are considered failures.

Args:

  • upstream_states (dict[Edge, State]): the set of all upstream states

prefect.triggers.any_successful

(upstream_states)[source]

Runs if any tasks were successful. Note that SKIPPED tasks are considered successes and TRIGGER_FAILED tasks are considered failures.

Args:

  • upstream_states (dict[Edge, State]): the set of all upstream states

prefect.triggers.any_failed

(upstream_states)[source]

Runs if any tasks failed. Note that SKIPPED tasks are considered successes and TRIGGER_FAILED tasks are considered failures.

Args:

  • upstream_states (dict[Edge, State]): the set of all upstream states

prefect.triggers.not_all_skipped

(upstream_states)[source]

Runs if all upstream tasks were successful and were not all skipped.

Args:

  • upstream_states (dict[Edge, State]): the set of all upstream states

prefect.triggers.some_failed

(at_least=None, at_most=None)[source]

Runs if some amount of upstream tasks failed. This amount can be specified as an upper bound (at_most) or a lower bound (at_least), and can be provided as an absolute number or a percentage of upstream tasks.

Note that SKIPPED tasks are considered successes and TRIGGER_FAILED tasks are considered failures.

Args:

  • at_least (Union[int, float], optional): the minimum number of upstream failures that must occur for this task to run. If the provided number is less than 1, it will be interpreted as a percentage, otherwise as an absolute number.
  • at_most (Union[int, float], optional): the maximum number of upstream failures to allow for this task to run. If the provided number is less than 1, it will be interpreted as a percentage, otherwise as an absolute number.

prefect.triggers.some_successful

(at_least=None, at_most=None)[source]

Runs if some amount of upstream tasks succeed. This amount can be specified as an upper bound (at_most) or a lower bound (at_least), and can be provided as an absolute number or a percentage of upstream tasks.

Note that SKIPPED tasks are considered successes and TRIGGER_FAILED tasks are considered failures.

Args:

  • at_least (Union[int, float], optional): the minimum number of upstream successes that must occur for this task to run. If the provided number is less than 1, it will be interpreted as a percentage, otherwise as an absolute number.
  • at_most (Union[int, float], optional): the maximum number of upstream successes to allow for this task to run. If the provided number is less than 1, it will be interpreted as a percentage, otherwise as an absolute number.

This documentation was auto-generated from commit bd9182e
on July 31, 2024 at 18:02 UTC