I would be in favor of removing the experimental feature of the constructor arguments, but I don't understand the reasoning for removing the override. It is a breaking change from something that was there since 1.X so not really experimental anymore. I think you might underestimate how much it is used. What would be the migration path? It does not execute the same as TearDown / Setup and Moving it to a constructor argument requires it to be a part of a DAG, limiting deployment options.
B. On Sat, 29 Mar 2025 at 13:56, Kaxil Naik <kaxiln...@gmail.com> wrote: > @tamara : Correct, we are now proposing to remove overriding the pre/post > execute > > >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) > > > On Sat, 29 Mar 2025 at 18:23, Kaxil Naik <kaxiln...@gmail.com> wrote: > > > 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 > >> > >> > -- -- Bolke de Bruin bdbr...@gmail.com