Skip to main content

Yet another retry decorator for Python

Project description

Build and Publish PyPI Downloads

yet-another-retry

This package is inspired by other retry-packages.
It takes a slightly different approach to certain things however to allow the decorated function to know it is being retried and take action based on a retry_config.
The package uses only python standard library and has no external dependencies.

It allows for custom handlers to be created for retry and exception handling.
Handlers can log or do anything user wants them to do and will also recieve any input parameters to the retry decorator.

Install

python -m pip install yet-another-retry

then import with:

from yet-another-retry import retry

Usage

Basic usage

This is not much different from other retry packages.
Uses the decorator with all default values
tries = 3
retry_delay = 0

from yet_another_retry import retry

@retry()
def my_function():
  ...

Changing number of tries

Since we have to know in advance how many tries to do, this is a parameter directly to the decorator

from yet_another_retry import retry

@retry(tries=5)
def my_function():
  ...

Changing number of seconds to sleep in default retry handler

The default retry handler has a parameter "retry_delay_seconds" that can be modified as an extra_kwarg.

from yet_another_retry import retry

@retry(base_delay_seconds=10)
def my_function():
  ...

Handlers

The decorator uses a concept of handlers for retries and exceptions.
A handler is just a function with some requirements.
The handler will be called on retries and final exception.
Both types of handlers must have the following parameters:

  • e: Exception - must be first accepted parameter
  • **kwargs - must be last accepted parameter

Any kwargs added to the retry decorator will be passed on to both the retry and exception handlers.

Retry handlers

A retry handler is expected to return a float or integer that the retry function will sleep for before the next attempt.
The default retry_handler has a parameter base_delay_seconds that can be sent as a parameter to the decorator to modify the number of seconds it sleeps for.

See examples in the examples folder

To use a custom retry handler:

from yet_another_retry import retry

def custom_retry_handler(e: Exception, **kwargs):
    sleep_time = 1
    return sleeptime
    
    
@retry(retry_handler=custom_retry_handler)
def my_function():
  ...

Exception handlers

A exception handler triggers on raising exception on the last retry. Works the same way as retry_handler except it is not expected to return anything. The default raise_exception handler just raises the exception. By default if a custom decorator has not raised the exception the retry decorator will raise it after the exception_handler is done. To stop the decorator from raising the exception, if using a custom exception_handler, you can pass raise_final_exception=False to the decorator.

See examples in the examples folder

To use a custom exception handler:

from yet_another_retry import retry

def custom_exception_handler(e: Exception, **kwargs):
    ... do things 
    raise e
    
    
@retry(exception_handler=custom_exception_handler)
def my_function():
  ...

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

yet_another_retry-1.0.0.tar.gz (8.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

yet_another_retry-1.0.0-py3-none-any.whl (9.3 kB view details)

Uploaded Python 3

File details

Details for the file yet_another_retry-1.0.0.tar.gz.

File metadata

  • Download URL: yet_another_retry-1.0.0.tar.gz
  • Upload date:
  • Size: 8.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.8

File hashes

Hashes for yet_another_retry-1.0.0.tar.gz
Algorithm Hash digest
SHA256 a28c6e89affd328b54f577714c7e8681a8721bd3731521a09934952941f453f8
MD5 30501a91ff5db630224f63f1a1d5469a
BLAKE2b-256 c8cacd1681488f5588aa5f1f631d358b7f16cd6f64b573df227e9ccfded82786

See more details on using hashes here.

File details

Details for the file yet_another_retry-1.0.0-py3-none-any.whl.

File metadata

File hashes

Hashes for yet_another_retry-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 0e720231b6899a3e225e631401c3d83d0517dbd35ee4271861bc990f7e241317
MD5 ba33698c91e88c35dfdaa0eb8771451c
BLAKE2b-256 74f0b6cd233f48156e37aa8d39201c6434e7288e594486a83433e8e3f68ab953

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page