The forward utility is used when your flow starts with a divergent connection. For example:

from gloe.utils import forward

send_emails = forward[list[User]]() >> (
    filter_basic_subscription >> send_basic_subscription_promotion_email,
    filter_premium_subscription >> send_premium_subscription_promotion_email,
    filter_unsubscribed >> send_unsubscribed_promotion_email

In this case, we have nothing to do before splitting the groups of users. So, when starting the pipeline with a forward transformer, we are able to forward the incoming data to the next transformer directly.


We have to explicitly define the incoming type of the forward transformer when it is used as the first step, because it is not known at the time of the definition.


Suppose you need to extract some statistics from a Pandas DataFrame. However, you still need the use the original data in the next transformers. In that case, you can use attach, which receives a transformer as an argument. The output of the attach is a tuple with the output of the encapsulated transformer and its input.

get_data: Transformer[str, pd.DataFrame]
extract_statistics: Transformer[pd.DataFrame, Statistics]
process_statistics: Transformer[tuple[pd.DataFrame, Statistics], Result]

process_data = get_data >> attach(extract_statistics) >> process_statistics 

In the example above, both get_data and extract_statistics outputs are passed on as the input to process_statistics.



Deprecated: use attach instead.


Converts any input data to None. Quite useful in addition with Conditional Flows.


It is quite useful when you want to see the flowing data at some points, for example:

from gloe.utils import debug

send_emails = get_users >> filter_subscribed_users >> debug() >> send_subscribed_email

In this case, when calling send_emails in debugger mode, the processing will pause into the debug transformer. Then, we are able to see the output of the previous transformer (filter_subscribed_users) in the debug console.


This transformer is just a helper, you can keep adding breakpoints to any part of the transformers code as you are already used to.


The execution will stop only if a debugger is active. In general, this verification is valid only under a debug mode in IDE.