← All recipes
Moderne licensed

Replace backoff decorators with tenacity

Recipe IDorg.openrewrite.python.migrate.ReplaceBackoffDecoratorsWithTenacityArtifactopenrewrite-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 recipepythonbackofftenacitymigrationretryProprietary

Usage

This recipe has no required configuration options. You’ll need the Moderne CLI configured before running the command below.

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

If the recipe isn’t available locally, install it with:

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