No, @run_if / @skip_if uses pre_execute from task argument [1] not the the
method and is just a syntactic sugar. You can also do the following as an
example:

```
def skip_at_random(context):
    if randint(0, 1) == 0:
        raise AirflowSkipException()

t2 = BashOperator(task_id='conditional2', pre_execute=skip_at_random,
dag=dag, bash_command="airflow version")
```

[1]:
https://github.com/apache/airflow/blob/8c3a30e3ffc3f114c1d2cc3e6e109f4d9e29ca8b/airflow-core/src/airflow/decorators/condition.py#L57-L59

On Sat, 29 Mar 2025 at 05:09, Matthew Block <matthew.l.bl...@gmail.com>
wrote:

> Would this also break @run_if/@skip_if decorators?
>
> Best,
> Matt Block
>
> > On Mar 28, 2025, at 3:44 PM, Tamara Fingerlin
> <tamara.finger...@astronomer.io.invalid> wrote:
> >
> > Hey :)
> >
> > Quick question if I am understanding the proposed change correctly.
> >
> > What you want to remove is overriding the pre/post execute when creating
> > custom operators:
> >
> > class MyOperator(BaseOperator):
> >    ...
> >    def pre_execute(self, context):   # This would break?
> >        ....
> >
> >    def post_execute(self, context):   # And this as well?
> >
> >
> > But keep the (currently experimental) use of the pre_execute and
> > post_execute parameters (I've only used post_execute before for similar
> > reasons as TP posted, interacting with outlets assets)
> >
> >    BashOperator(
> >        task_id='hello_world',
> >        bash_command='sleep 5',
> >        pre_execute=lambda context: print("Pre-execute function called!"),
> > # this would still work?
> >        post_execute=lambda context: print("Post-execute function
> > called!"),   # this would be supposed to still work (it does not rn 😅)
> >    )
> >
> > The one situation I am worried about here is larger teams/orgs using pre
> > and post execute to standardize custom operators. For example team A
> writes
> > OurCompanyDatabaseBaseOperator that has a pre_execute and post_execute
> with
> > mandatory business logic and team B is allowed to write custom operators
> on
> > top of that but only override execute.
> > I assume this would break?
> >
> >
> >> On Fri, Mar 28, 2025 at 9:32 PM Jarek Potiuk <ja...@potiuk.com> wrote:
> >>
> >> I think the current proposal is to remove the pre/post in the Base
> Operator
> >> class (and overridability) and leave passing pre/post as constructor
> >> arguments..
> >>
> >>> On Fri, Mar 28, 2025 at 9:20 PM Bolke de Bruin <bdbr...@gmail.com>
> wrote:
> >>>
> >>> Just one thing - the pre / post mechanisms are executed in-process of
> the
> >>> task rather than the DAG. So they are not equal to setup/teardown. Are
> >> you
> >>> proposing to remove the argument or the whole thing?
> >>>
> >>> B.
> >>>
> >>>
> >>>
> >>>> On Fri, 28 Mar 2025 at 20:58, Jarek Potiuk <ja...@potiuk.com> wrote:
> >>>
> >>>> Indeed. Post/pre overriding in sub-classes should go away (and we
> could
> >>>> even likely implement a ruff rule to auto-fix those if someone has a
> >>> custom
> >>>> executor. Sounds like 100% doable
> >>>>
> >>>> But passing them as "cross-cutting concerns" via callable in a
> >>> constructor
> >>>> is pretty useful and not easily fixable for back-compatibilty
> >>>>
> >>>> J.
> >>>>
> >>>> On Fri, Mar 28, 2025 at 6:14 PM Kaxil Naik <kaxiln...@gmail.com>
> >> wrote:
> >>>>
> >>>>>> I think the ability of overriding pre_execute and post_execute in a
> >>>>> subclass can definitely go away. They are practically useles; you can
> >>>> just
> >>>>> put everything in execute, which always needs to exist in a
> >>> BaseOperator
> >>>>> subclass anyway.
> >>>>>
> >>>>> Yeah I am fine with removing that then. Anyone disagrees?
> >>>>>
> >>>>> On Fri, 28 Mar 2025 at 20:36, Michał Modras <michalmod...@google.com
> >>>>> .invalid>
> >>>>> wrote:
> >>>>>
> >>>>>> I'd prefer a world without separate pre_execute and post_execute
> >>>>> functions
> >>>>>> - as pointed out in the PR, they make reasoning about DAGs more
> >>>> complex,
> >>>>>> and can be error prone.
> >>>>>>
> >>>>>> Having said that, I know there are multiple users relying on these
> >>>>>> functionalities, so I'll bring up my usual - another breaking
> >> change
> >>> -
> >>>>>> another obstacle to the AF3 adoption argument.
> >>>>>>
> >>>>>> And as for relying on operators vs. PythonOperator + hooks - there
> >>> are
> >>>>> good
> >>>>>> arguments for continuing relying on operators, or even rely on them
> >>>> more,
> >>>>>> depending on customers' need and organizational setup.
> >>>>>>
> >>>>>> On Fri, Mar 28, 2025 at 3:42 PM Tzu-ping Chung
> >>>> <t...@astronomer.io.invalid
> >>>>>>
> >>>>>> wrote:
> >>>>>>
> >>>>>>> Passing post_execute as an argument is somewhat useful for
> >>> operators
> >>>>> that
> >>>>>>> don’t support assets natively (most of them) but when you want to
> >>>> emit
> >>>>> a
> >>>>>>> dynamic path. For example:
> >>>>>>>
> >>>>>>> def _send_asset_event(context, result):
> >>>>>>>    # Rendered value!
> >>>>>>>    name = context["task"].output
> >>>>>>>    # Trigger an event against the emitted path.
> >>>>>>>    context["outlet_events"][write_data_outlet].add(Asset(name))
> >>>>>>>
> >>>>>>> write_data_outlet = AssetAlias("data")
> >>>>>>>
> >>>>>>> WriteSomeDataOperator(
> >>>>>>>    task_id="write_data",
> >>>>>>>    output="write_data_{{ run_id }}.parquet",
> >>>>>>>    outlets=[write_data_outlet],
> >>>>>>>    post_execute=_send_asset_event,
> >>>>>>> )
> >>>>>>>
> >>>>>>> Without the functionality, you’ll have to write a subclass for
> >> each
> >>>>>>> operator you want to do this, which is quite a bit boilerplate.
> >>>>>>>
> >>>>>>> Arguably this is only needed since we use operators too much.
> >> This
> >>>>>>> wouldn’t be an issue if we rely more on the PythonOperator+hooks
> >>>>> approach
> >>>>>>> (like Bolke discussed at last year’s Airflow Summit), but alas,
> >>>> people
> >>>>>>> don’t like to change how they do things, and operators are still
> >>> very
> >>>>>>> popular.
> >>>>>>>
> >>>>>>> The pre_execute argument *might* also be useful if you want to
> >>>>>> pre-process
> >>>>>>> some values. That’s probably a lot less common, so I wouldn’t
> >> fret
> >>>> too
> >>>>>> much
> >>>>>>> if it goes away. However, since post_execute and pre_execute
> >>>> basically
> >>>>>> use
> >>>>>>> the same implementation, just one run right before and one right
> >>>> after
> >>>>>>> execute, they should probably stay or go together.
> >>>>>>>
> >>>>>>> I think the ability of overriding pre_execute and post_execute
> >> in a
> >>>>>>> subclass can definitely go away. They are practically useles; you
> >>> can
> >>>>>> just
> >>>>>>> put everything in execute, which always needs to exist in a
> >>>>> BaseOperator
> >>>>>>> subclass anyway.
> >>>>>>>
> >>>>>>> TP
> >>>>>>>
> >>>>>>>
> >>>>>>>> On 28 Mar 2025, at 22:12, Kaxil Naik <kaxiln...@gmail.com>
> >>> wrote:
> >>>>>>>>
> >>>>>>>> I am in favor of dropping support as they essentially do the
> >> same
> >>>> --
> >>>>>> and
> >>>>>>>> setup & teardown is more "native" (first-class UI support)
> >>>>>>>>
> >>>>>>>> On Fri, 28 Mar 2025 at 19:41, Kaxil Naik <kaxiln...@gmail.com>
> >>>>> wrote:
> >>>>>>>>
> >>>>>>>>> Hi team,
> >>>>>>>>>
> >>>>>>>>> Should we drop support for pre_execute and post_execute for AF
> >>>> 3.0?
> >>>>>> They
> >>>>>>>>> are still marked as experimental [1]. They were added [2] in a
> >>>> world
> >>>>>>>>> without Setup and Teardown tasks.
> >>>>>>>>>
> >>>>>>>>> Regards,
> >>>>>>>>>
> >>>>>>>>> Kaxil
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>>> [1]:
> >>>>>>>>>
> >>>>>>>
> >>>>>>
> >>>>>
> >>>>
> >>>
> >>
> https://github.com/apache/airflow/blob/7af0319ba16749f4aea78085dfe7823f321d262a/task-sdk/src/airflow/sdk/bases/baseoperator.py#L715-L724
> >>>>>>>>> [2]: https://github.com/apache/airflow/pull/17576
> >>>>>>>>>
> >>>>>>>
> >>>>>>>
> >>>>>>>
> >>> ---------------------------------------------------------------------
> >>>>>>> To unsubscribe, e-mail: dev-unsubscr...@airflow.apache.org
> >>>>>>> For additional commands, e-mail: dev-h...@airflow.apache.org
> >>>>>>>
> >>>>>>>
> >>>>>>
> >>>>>
> >>>>
> >>>
> >>>
> >>> --
> >>>
> >>> --
> >>> Bolke de Bruin
> >>> bdbr...@gmail.com
> >>>
> >>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscr...@airflow.apache.org
> For additional commands, e-mail: dev-h...@airflow.apache.org
>
>

Reply via email to