`  - ModuleNotFoundError: No module named
'airflow.operators.python_operator'`  <-- those paths are Airflow 1.x old

We had already stripped `_operator` from the module names in Airflow 2.0.0
-- so IMO there is no need to keep back-compatibility for something that
was working 2 major versions ago

On Tue, 1 Apr 2025 at 17:23, Jarek Potiuk <ja...@potiuk.com> wrote:

> An example where deprection_tools are still used
>
> https://github.com/apache/airflow/blob/main/airflow-core/src/airflow/utils/log/__init__.py
>
> It's rather straightforward = needs a package with __init__.py - only where
> you list all the classes and provide redirections. It will
> automatically raise deprecation warnings:
>
> from airflow.utils.deprecation_tools import add_deprecated_classes
>
> __deprecated_classes = {
>     "cloudwatch_task_handler": {
>         "CloudwatchTaskHandler": (
>
>
> "airflow.providers.amazon.aws.log.cloudwatch_task_handler.CloudwatchTaskHandler"
>         ),
>     },
>     "es_task_handler": {
>         "ElasticsearchTaskHandler": (
>
>
> "airflow.providers.elasticsearch.log.es_task_handler.ElasticsearchTaskHandler"
>         ),
>     },
>     "gcs_task_handler": {
>         "GCSTaskHandler":
> "airflow.providers.google.cloud.log.gcs_task_handler.GCSTaskHandler",
>     },
>     "s3_task_handler": {
>         "S3TaskHandler":
> "airflow.providers.amazon.aws.log.s3_task_handler.S3TaskHandler",
>     },
>     "stackdriver_task_handler": {
>         "StackdriverTaskHandler": (
>
> "airflow.providers.google
> .cloud.log.stackdriver_task_handler.StackdriverTaskHandler"
>         ),
>     },
>     "wasb_task_handler": {
>         "WasbTaskHandler":
> "airflow.providers.microsoft.azure.log.wasb_task_handler.WasbTaskHandler",
>     },
> }
>
> add_deprecated_classes(__deprecated_classes, __name__)
>
> On Tue, Apr 1, 2025 at 1:49 PM Jarek Potiuk <ja...@potiuk.com> wrote:
>
> > We were going to have compatibility shims to redirect the imports - with
> -
> > there are few ways to do it - Ash had a little POC with module loader,
> but
> > I think it has some potential side effect and I think Ash abandoned
> > the idea and I would personally prefer to use our old PEP-563 mechanism
> > using airflow-core/src/airflow/utils/deprecation_tools.py,
> >
> > Very nice and small PR to implement if you  want to contribute - and
> since
> > you are testing it now with some existing DAGS it might also be a good
> test
> > if no redirect has been forgotten
> >
> > J.
> >
> >
> > On Tue, Apr 1, 2025 at 1:32 PM Eugen Kosteev <eu...@kosteev.com> wrote:
> >
> >> Hi everyone.
> >>
> >> I am testing compatibility of Airflow 2 DAGs with Airflow 3, and would
> >> like
> >> to discuss this topic.
> >>
> >> I took bunch of DAGs from existing Airflow 2 instances and deployed them
> >> to
> >> instance with Airflow 3 (3.0.0b4) and have bunch of import errors:
> >>   - ModuleNotFoundError: No module named
> >> 'airflow.operators.python_operator'
> >>   - ModuleNotFoundError: No module named
> 'airflow.operators.bash_operator'
> >>   - ImportError: cannot import name 'email_operator' from
> >> 'airflow.operators'
> >>   - ModuleNotFoundError: No module named
> >> 'airflow.operators.dummy_operator'
> >>
> >> I know that users are supposed to migrate from using "airflow.operators"
> >> to
> >> standard/stmp/.. provider packages before upgrading to Airflow 3.
> >>
> >> But I also remember some discussions around keeping old imports work, by
> >> rerouting them to the correct module (similarly as we do in case of
> >> deprecated classes, etc.).
> >> So, it will be very smooth for users to migrate to Airflow 3.
> >>
> >> What is our stand on this? Do we abandon "airflow.operators" usage in
> DAGs
> >> in Airflow 3 completely?
> >> Or this is something that needs to be done in Airflow 3, but not yet.
> >>
> >> --
> >> Eugene
> >>
> >
>

Reply via email to