Replace backoff decorators with tenacity
org.openrewrite.python.migrate.ReplaceBackoffDecoratorsWithTenacityArtifactopenrewrite-migrate-pythonRewrite @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.
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.ReplaceBackoffDecoratorsWithTenacityIf 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