Merged the compatibility fix - nice and straightforward :D

On Mon, Jun 30, 2025 at 12:05 PM Jarek Potiuk <ja...@potiuk.com> wrote:

> NICE!
>
> On Mon, Jun 30, 2025 at 11:50 AM Dev-iL <gid....@gmail.com> wrote:
>
>> Good news, Everyone!
>>
>> I addressed CI-reported issues related to 2.0. Originally all my work
>> was organized in a single PR (#52233), but after the CI became
>> green(er), I decided to split it into two for better organization/scope
>> and easier review. These are the PRs in question:
>>
>>  1. #52518: The cherry-picked compatibility fixes. This has no
>>     prerequisites, is green, and waiting for review/approval. I will say
>>     carefully that once this is merged we'll have "experimental" support
>>     of SQLA2.
>>  2. #52233: (The original PR with all the changes.) This adds the SQLA
>>     2.0 CI jobs (w/o forcing `SQLALCHEMY_WARN_20`). This requires FAB5
>>     PR by Jarek to be merged first.
>>
>> You might wonder what the plan is with regard to the deprecation fixes -
>> that's a separate effort to be coordinated later on.
>>
>> For now - your attention is needed in
>> https://github.com/apache/airflow/pull/52518.
>>
>> Thanks,
>> Dev-iL
>>
>>
>> On 2025/06/26 12:49:25 Dev iL wrote:
>>  > Hello everyone,
>>  >
>>  > With the release of Airflow 3 and the refactoring that moved
>>  > flask-appbuilder (FAB) into a separate provider, as well as recent
>> work by
>>  > the FAB developers to support SQLAlchemy v2.0 (SQLA2), it is finally
>>  > possible to work on supporting SQLA2 in Airflow as well.
>>  >
>>  > To get this process going, I added two CI tasks that install SQLA2 (PR
>>  > #52233) and am now slowly adding various workarounds to overcome
>> repeated
>>  > test failures. After doing this for a while, there's a couple of
>> discussion
>>  > points I want to raise:
>>  >
>>  > 1. What is the plan regarding dual support of 1.4 & 2.x? If we want to
>>  > have that, it might lead to pretty messy code (see details below).
>>  > 2. Should we work on supporting SQLA 2.0 or jump straight to 2.1 (which
>>  > is currently in beta)?
>>  >
>>  > I think we should decide on the refactoring principles and start
>> moving in
>>  > that direction. With some luck, it might be possible to get this done
>> in
>>  > time for 3.1.
>>  >
>>  > I'd love your inputs on how to best approach this task. More
>> importantly,
>>  > if anyone wants to participate - please leave your comment on my PR,
>> and
>>  > let's coordinate. I suggest you use my branch as a starting point,
>> since it
>>  > has the tests in place.
>>  >
>>  > Best,
>>  > Dev-iL
>>  >
>>  > P.S.
>>  > At the time of writing, the status of running the tests (via `breeze
>>  > testing core-tests --upgrade-sqlalchemy --maxfail=1000`) is: 134
>> failed,
>>  > 6469 passed, 47 skipped, 8 xfailed, 1 warning
>>  > -------------------
>>  >
>>  > SQLA2 introduced stricter type annotation requirements for ORM mapped
>>  > attributes. All mapped columns need to use the `Mapped[]` generic type
>>  > annotation:
>>  >
>>  > <pre>
>>  > class TaskInstance(Base):
>>  > __tablename__ = "task_instance"
>>  >
>>  > # Before (SQLA 1.4)
>>  > # id = Column(Integer, primary_key=True)
>>  > # dag_id = Column(String, ForeignKey("dag.id"))
>>  > # dag_model = relationship("DagModel")
>>  >
>>  > # After (SQLA 2.0)
>>  > id: Mapped[int] = mapped_column(Integer, primary_key=True)
>>  > dag_id: Mapped[str] = mapped_column(String, ForeignKey("dag.id"))
>>  > dag_model: Mapped["DagModel"] = relationship()
>>  > </pre>
>>  >
>>  > To address differences of similar nature, and assuming we're
>> interested in
>>  > dual SQLA version support, I can think of two extremes:
>>  >
>>  > 1. We implement two copies of each model, one for each version of SQLA,
>>  > and use the relevant one based on a runtime check.
>>  > 2. We use workarounds that disable the breaking features of SQLA2 (e.g.
>>  >
>>
>> https://github.com/apache/airflow/pull/52233/commits/90d738880553707fa01ee2a6b4acd40609e8cc2f
>> )
>>  > where possible, and resort to runtime branching where impossible, thus
>>  > postponing the rewrite to whenever SQLA1.4 support will be dropped.
>>  >
>>  > ----------------------
>>  >
>>  > References:
>>  >
>>  > 1. Main SQLA2 support issue:
>>  > https://github.com/apache/airflow/issues/28723
>>  > 2. My PR adding SQLA2 to the CI:
>>  > https://github.com/apache/airflow/pull/52233
>>  > 3. FAB's SQLA2 support PR:
>>  > https://github.com/dpgaspar/Flask-AppBuilder/pull/2241
>>  >
>
>

Reply via email to