Not going into details - seems that Pendulum maintainers are much more
receptive than last time - (yay!). They already responded that they will
release the Python 3.13 version soon and I offered my help with testing it
with the Airflow CI test harness.
https://github.com/python-pendulum/pendulum/pull/871#issuecomment-2671761443

So at least in the case of Pendulum, I don't think we have time to change
anything for Airflow 3 - definitely the easiest way for us would be to
continue using Pendulum as we did.

On Thu, Feb 20, 2025 at 6:36 PM Damian Shaw <ds...@striketechnologies.com>
wrote:

> > The timezone conversion in stdlib is an intentional design choice. Not
> converting date times to matching timezones is a giant footgun that fires
> when you least expect it to. I did not like the design until I had the
> chance to listen to Paul Ganssle explain his decisions, and have to admit
> he made all the correct decisions.
>
> I appreciate it's an intentional choice, but this is a huge footgun:
> >>> datetime(2023, 3, 25, 22, tzinfo=ZoneInfo("Europe/Paris")) +
> timedelta(hours=8)
> datetime.datetime(2023, 3, 26, 6, 0,
> tzinfo=zoneinfo.ZoneInfo(key='Europe/Paris'))
>
> If one is not intermittently familiar with the stdlibs design choice then
> it's frankly near impossible to understand why it returns 6AM with Zoneinfo
> 'Europe/Paris', when it was in fact it was 7 AM on 2023-03-26 in Paris 8
> hours after 10 PM on 2023-03-25.
>
> Especially when current macros "just work":
> >>> pendulum.datetime(2023, 3, 25, 22, tz="Europe/Paris") +
> timedelta(hours=8)
> DateTime(2023, 3, 26, 7, 0, 0, tzinfo=Timezone('Europe/Paris'))
>
> I don't want to get in a discussion about design, I just want to point out
> from a user perspective of using Airflow this will be shocking, especially
> if macros might return a pendulum.datetime or a datetime.datetime under
> different contexts.
>
> -----Original Message-----
> From: Tzu-ping Chung <t...@astronomer.io.INVALID>
> Sent: Thursday, February 20, 2025 12:09 PM
> To: dev@airflow.apache.org
> Subject: Re: [DISCUSS] Python 3.13 support
>
> The timezone conversion in stdlib is an intentional design choice. Not
> converting date times to matching timezones is a giant footgun that fires
> when you least expect it to. I did not like the design until I had the
> chance to listen to Paul Ganssle explain his decisions, and have to admit
> he made all the correct decisions.
>
> With that said, I agree with you that Pendulum does provide a lot of
> convenient interfaces that the stdlib lacks. Everything has an equivalent,
> but stdlib is at times overly verbose. However, I don’t think that’s enough
> justification to depend on Pendulum. We can create our own datetime wrapper
> classes to do the same; it’s some maintenance overhead, but needing to
> chase an unstable target such as Pendulum is its own maintenance overhead.
> They cancel out.
>
> An alternative (to having our own wrapper class) is to make Pendulum an
> optional dependency. If you have it installed, we’ll wrap the datetime
> object in user-facing interfaces (e.g. template macros). That’s not too
> hard. We’ll simply not use it to implement Airflow itself.
>
> We’re probably too late to remove Pendulum usages in Airflow for 3.0, but
> I think 3.1 or 3.2 would be a reasonable target for either approach. If we
> do the wrapping part right, there should be no backward compatibility
> issues either.
>
> TP
>
>
> > On 21 Feb 2025, at 00:29, Damian Shaw <ds...@striketechnologies.com>
> wrote:
> >
> > From a user perspective my biggest concern is macros. There are many
> pendulum methods that can, and are, being relied on.
> >
> > And frankly time zone logic in the standard library is sub-optimal, any
> code which involves manipulation in a particular time zone must also
> involve converting to UTC and then back to that time zone again to avoid
> weird design features (footguns).
> >
> > Working in time zones with Airflow already requires very carefully date
> macro construction, I have a module with several dozen Airflow date macros
> that largely wrap around a base "today_macro":
> >> today_macro = "data_interval_end.in_tz(dag.timezone)"
> >> tomorrow_macro = f"macros.dates.next_day({today_macro})"
> >> ...
> >>
> >> today = f"{{{{{today_macro.format('YYYY-MM-DD')}}}}}"
> >> ...
> >
> > These are imported from a common location in all our DAGs because date
> macro writing had extremely high error rates. macros.dates points to very
> heavily unit tested functions that have a lot of features, including
> arbitrary calendars for business date calculations, and the logic relies on
> Pendulum objects to correctly stay in, or convert to, the appropriate time
> zone.
> >
> > That said, I agree the  maintenance situation with Pendulum is dire and
> untenable, but I just want to make it clear that for users which take
> advantage of Airflow's time zone support it may be a non-trivial and error
> prone process to convert to the standard library.
> >
> > -----Original Message-----
> > From: Jarek Potiuk <ja...@potiuk.com>
> > Sent: Thursday, February 20, 2025 8:17 AM
> > To: dev@airflow.apache.org
> > Subject: Re: [DISCUSS] Python 3.13 support
> >
> > One more finding which I miss..
> >
> > * Pendulum - the elephant in the room (I like that phrase, yes).
> >
> > I saw that Ash had already been involved in discussions about Python
> > 3.13 support for pendulum in the PR that my friend from DLTHub started
> > -
> > https://github.com/python-pendulum/pendulum/pull/871 - but regardless
> > from that we also need to have Python 3.13 wheels
> > https://github.com/python-pendulum/pendulum/issues/879#issuecomment-26
> > 71428096 . For now in my PR I had to install cargo (i.e. rust build
> > system) in order to compile it - and I had to install a very new one -
> because the one that comes by default in Debian Bookworm, is too old to
> compile Pendulum.
> >
> > And unfortunately - as we know from the past Pendulum is not really well
> "maintained" - it took a long time for them to support 3.12 - and there
> does not seem a lot of "responsibiity/responsiveness" of doing it from the
> maintainers. On my personal (for now) list of "Airflow Beach Cleaning"
> > projects, Pendulum is quite firmly between "yellow" and "red" ("watch"
> vs.
> > "forego").
> >
> > Being very blunt - should reconsider dropping Pendulum for Airflow 3 ?
> Or maybe just make it optional and only used in Python < 3.13 - and
> introduce potentially breaking changes by replacing Pendulum with non-naive
> datetime everywhere ?
> >
> > I think TP and Ash were the ones who knew most and discussed it before
> and there was even a proposal from TP to remove the pendulum (as far as I
> remember). Those changes would be potentially breaking, but because of
> Pendulum' drop-in replacement for datetime - very little breaking.
> >
> > WDYT? I will add it to the agenda of today's dev call -similarly as the
> other "cleaning" topics I started recently.
> >
> >
> > J.
> >
> >
> >
> >
> >
> > On Wed, Feb 19, 2025 at 7:26 PM Jarek Potiuk <ja...@potiuk.com> wrote:
> >
> >> This is the time of the year when we attempt to see how far we are
> >> from supporting minor python version released in October (i.e. Python
> 3.13 now).
> >> Usually it takes a couple of months before we can even try - because
> >> of the number of dependencies - and it was no different this time
> around.
> >>
> >> For now (it took me a better part of the day today) I managed to
> >> build the CI image with all dependencies and run `uv sync
> >> --all-extras --python 3.13 --reinstall` successfully (but with some
> >> cheating, so don't hold your breath yet). Also I bet there will be a
> >> number of test errors to fix, but for me the goal for now is to see how
> we stand with dependencies.
> >>
> >> For those who would like to see the changes - the PR is here
> >> https://github.com/apache/airflow/pull/46891
> >>
> >> And let me summarize the errors/issues/inconveniences I had to
> workaround:
> >>
> >> *The big one:*
> >>
> >> 1) Combination of Pandas, FAB and Sqlalchemy is such that we cannot
> >> have all of them installed in Python 3.12. We can have either Pandas
> >> + Sqlalchemy 2 (no Fab) or Fab and sqlalchemy 1 (no pandas).
> >>
> >> We know we need to upgrade to sqlalchemy 2  anyway - whatever the
> >> road we choose with Fab - either vendoring in and bumping Sqlalchemy
> >> 2 or hoping for Fab 5 release. For now - I simply removed Fab
> >> provider while the PR is in draft, to see if there are no more
> >> problems, and we will have to fix it before beta I am afraid anyway.
> >>
> >> 2) as explained in [1] I had to remove google-re and I used this
> >> opportunity to make an inventory of needed changes - I will summarize
> >> them in the google-re2 thread
> >>
> >> 3) Apache Beam is as usual a problem - this time there are two
> >> incompatibilities - pyarrow and pandas - but we can simply exclude
> >> beam from 3.13 (as usual) - usually they catch-up with the new
> >> version of python when the next is released (around october). They
> >> also have a lot of deps and more "holding" than ours.
> >>
> >> 4) databricks requires bumping of databricks-connector to 4.0.0 - we
> >> might need to hold on with that one depending on resulting of tests
> >> (this is also possible with bumping pandas + sqlalchemy and was not
> >> possible before, I do not expect major problems here)
> >>
> >> 5) Bumped grpcio-tools - they were held back previously - but removal
> >> of beam, upgrade of pandas allows it to be bumped to a newer version
> >> that supports 3.13 - that is helpful for a number of providers
> >> (waeviate,
> >> qdrant) to be 3.13 compatible..
> >>
> >> 6) Few small things removed: plyvel, ydb, possibly also yandex -
> >> depends on test results
> >>
> >> Currently there is a `uv` workspace bug that requires us to comment
> >> out rather than exclude python versions for dependencies, but I hope
> >> that - as usual - they will fix it in days rather than weeks. The
> >> issue in uv repo
> >> https://github.com/astral-sh/uv/issues/11629
> >>
> >> Those are all (non-trivial) issues so far, I think we are getting
> >> really, really close to having to decide on what to do with FAB and
> >> how to unleash sqlalchemy 2.
> >>
> >> I will talk to Daniel to get more informed about his 5.0.0 plans (he
> >> merged my security fix today in FAB and gearing for a new release
> >> apparently, but I bet it's going to be 4.5.4).
> >>
> >>
> >> Any comments?
> >>
> >> [1] https://lists.apache.org/thread/xtzdp4dx8s6dds4xdp9kdpohns9lvpst
> >>
> > ________________________________
> > Strike Technologies, LLC (“Strike”) is part of the GTS family of
> companies. Strike is a technology solutions provider, and is not a broker
> or dealer and does not transact any securities related business directly
> whatsoever. This communication is the property of Strike and its
> affiliates, and does not constitute an offer to sell or the solicitation of
> an offer to buy any security in any jurisdiction. It is intended only for
> the person to whom it is addressed and may contain information that is
> privileged, confidential, or otherwise protected from disclosure.
> Distribution or copying of this communication, or the information contained
> herein, by anyone other than the intended recipient is prohibited. If you
> have received this communication in error, please immediately notify Strike
> at i...@striketechnologies.com, and delete and destroy any copies hereof.
> > ________________________________
> >
> > CONFIDENTIALITY / PRIVILEGE NOTICE: This transmission and any
> attachments are intended solely for the addressee. This transmission is
> covered by the Electronic Communications Privacy Act, 18 U.S.C ''2510-2521.
> The information contained in this transmission is confidential in nature
> and protected from further use or disclosure under U.S. Pub. L. 106-102,
> 113 U.S. Stat. 1338 (1999), and may be subject to attorney-client or other
> legal privilege. Your use or disclosure of this information for any purpose
> other than that intended by its transmittal is strictly prohibited, and may
> subject you to fines and/or penalties under federal and state law. If you
> are not the intended recipient of this transmission, please DESTROY ALL
> COPIES RECEIVED and confirm destruction to the sender via return
> transmittal.
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: dev-unsubscr...@airflow.apache.org
> > For additional commands, e-mail: dev-h...@airflow.apache.org
>
> ________________________________
>  Strike Technologies, LLC (“Strike”) is part of the GTS family of
> companies. Strike is a technology solutions provider, and is not a broker
> or dealer and does not transact any securities related business directly
> whatsoever. This communication is the property of Strike and its
> affiliates, and does not constitute an offer to sell or the solicitation of
> an offer to buy any security in any jurisdiction. It is intended only for
> the person to whom it is addressed and may contain information that is
> privileged, confidential, or otherwise protected from disclosure.
> Distribution or copying of this communication, or the information contained
> herein, by anyone other than the intended recipient is prohibited. If you
> have received this communication in error, please immediately notify Strike
> at i...@striketechnologies.com, and delete and destroy any copies hereof.
> ________________________________
>
> CONFIDENTIALITY / PRIVILEGE NOTICE: This transmission and any attachments
> are intended solely for the addressee. This transmission is covered by the
> Electronic Communications Privacy Act, 18 U.S.C ''2510-2521. The
> information contained in this transmission is confidential in nature and
> protected from further use or disclosure under U.S. Pub. L. 106-102, 113
> U.S. Stat. 1338 (1999), and may be subject to attorney-client or other
> legal privilege. Your use or disclosure of this information for any purpose
> other than that intended by its transmittal is strictly prohibited, and may
> subject you to fines and/or penalties under federal and state law. If you
> are not the intended recipient of this transmission, please DESTROY ALL
> COPIES RECEIVED and confirm destruction to the sender via return
> transmittal.
>

Reply via email to