Skip to main content
Moderne OnlyThis recipe is proprietary to Moderne and runs on the Moderne platform or CLI — it isn’t part of the open-source catalog. Available with a Moderne subscription.Contact Sales

Replace backoff decorators with tenacity

Recipe IDorg.openrewrite.python.migrate.ReplaceBackoffDecoratorsWithTenacity
Artifactopenrewrite-migrate-python

Rewrite @backoff.on_exception and @backoff.on_predicate as tenacity's @retry, mapping max_tries and max_time to stop strategies and backoff.expo/backoff.constant to the wait strategy matching backoff's jitter setting. reraise=True is added so an exhausted decorator keeps raising the original exception rather than tenacity's RetryError. Decorators whose behaviour tenacity cannot reproduce are left untouched: backoff.fibo and backoff.runtime, a */** argument, the on_backoff, on_giveup and on_success handlers, giveup, and a max_tries or interval written as a lambda, which backoff evaluates per retry. A callable passed by name in one of those cannot be told from a value, so check those by hand. Run org.openrewrite.python.migrate.FindBackoffDecoratorsNotMigrated to list those. Backoff's logging configuration is dropped, because tenacity logs nothing by default; the backoff import and dependency are kept when any usage remains.

Single recipePythonpythonbackofftenacitymigrationretryModerne Proprietary License
Try in PlatformTry this recipe in the Moderne platform. Not a user yet? You’ll get a no-setup demo environment, with nothing to install or configure.

Usage​

Run this recipe

In order to run Python recipes, you will need to use the Moderne CLI.

This recipe calls into other OpenRewrite packages as it runs, and the CLI needs every one of them in its marketplace. Once the CLI is installed, install all of the following:

RELEASE resolves to the newest release and LATEST to the newest build of any kind, including snapshots. Either one lets mod config recipes upgrade pull in later versions without editing this command; a pinned version stays where you put it.

Install the recipe packages
mod config recipes pip install openrewrite-migrate-python
mod config recipes jar install org.openrewrite.recipe:rewrite-migrate-python:RELEASE
mod config recipes jar install org.openrewrite:rewrite-python:RELEASE

Then, you can run the recipe via:

Run the recipe
mod run . --recipe org.openrewrite.python.migrate.ReplaceBackoffDecoratorsWithTenacity