Replies: 2 comments 1 reply
|
Looks like it works with Python 3.11, which is our minimum. No objection from me if you want to open a PR. @hainenber may be interested in this too. |
1 reply
Done! The pull request is open at #42361 |
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Summary
backon is a modern evolution of the backoff library that Superset currently depends on (backoff>=1.8.0). It is a near-drop-in replacement with zero dependencies, active maintenance, and full Python 3.14+ compatibility.
Motivation
1. Upstream backoff is archived
The original litl/backoff library was archived in August 2025. It uses asyncio.iscoroutinefunction() which was deprecated in Python 3.14 and removed in Python 3.16. While the python-backoff fork exists, it adds an extra transitive dependency for Superset users.
2. Python 3.14+ compatibility
Python 3.14 is approaching and backoff will need patches to work with it. backon was designed from the ground up with modern Python in mind (requires 3.9+).
3. Zero dependencies
backon is pure Python with stdlib only, no runtime dependencies. This removes the backoff transitive dependency from Superset's dependency tree entirely.
4. Richer feature set (optional)
If desired in the future, backon offers circuit breaker, hedging, context manager API, global toggle for testing, custom sleep injection, Prometheus/OTel metrics, and more, all without adding any required dependencies.
Migration path
Migration is a straightforward import change, the public API is identical:
All backoff names (expo, fibo, constant, runtime, on_exception, on_predicate, full_jitter, random_jitter) exist in backon with the same signatures.
Comparison
Would the team be open to evaluating this migration?
I am happy to submit a PR if there is interest.
All reactions