Easy to use retry decorator.
Step side
It’s fork: https://github.com/invl/retry
My changes had started from version 0.9.3 (see ChangeLog)
Features
No external dependency (stdlib only).
(Optionally) Preserve function signatures (pip install decorator).
Original traceback, easy to debug.
Installation
$ pip install retry-sh
API
retry decorator
Various retrying logic can be achieved by combination of arguments.
Examples
from retry import retry
@retry()
def make_trouble():
'''Retry until succeed'''
@retry(ZeroDivisionError, tries=3, delay=2)
def make_trouble():
'''
Retry on ZeroDivisionError,
raise error after 3 attempts, sleep 2 seconds between attempts.
'''
@retry((ValueError, TypeError), delay=1, backoff=2)
def make_trouble():
'''
Retry on ValueError or TypeError,
sleep 1, 2, 4, 8, ... seconds between attempts.
'''
@retry((ValueError, TypeError), delay=1, backoff=2, max_delay=4)
def make_trouble():
'''
Retry on ValueError or TypeError,
sleep 1, 2, 4, 4, ... seconds between attempts.
'''
@retry(ValueError, delay=1, jitter=1)
def make_trouble():
'''
Retry on ValueError,
sleep 1, 2, 3, 4, ... seconds between attempts.
'''
# If you enable logging, you can get warnings like 'ValueError, retrying in
# 1 seconds'
if __name__ == '__main__':
import logging
logging.basicConfig()
make_trouble()
retry_call
This is very similar to the decorator, except that it takes a function and its arguments as parameters. The use case behind it is to be able to dynamically adjust the retry arguments.
import requests
from retry.api import retry_call
def make_trouble(service, info=None):
if not info:
info = ''
r = requests.get(service + info)
return r.text
def what_is_my_ip(approach=None):
if approach == "optimistic":
tries = 1
elif approach == "conservative":
tries = 3
else:
# skeptical
tries = -1
result = retry_call(
make_trouble,
fargs=["http://ipinfo.io/"],
fkwargs={"info": "ip"},
tries=tries
)
print(result)
what_is_my_ip("conservative")
Metadata
Release files for retry-sh 1.0.5
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| retry-sh-1.0.5.tar.gz | 4.1 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| retry_sh-1.0.5-py2.py3-none-any.whl | Python 2, Python 3 | none | any | Details |
Total release size: 8.8 kB
Release files / retry-sh-1.0.5.tar.gz
| Download URL | retry-sh-1.0.5.tar.gz |
|---|---|
| Size | 4.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
107cc934854f91d23708a695468a430fb02f89cd54429cefefd082729729ad31
|
|
BLAKE2b-256 checksum How to use checksums |
cab268b4e50faa987dccbd34dca776955d53f2f98aa493264f0dd083b301ae66
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/4.0.2 CPython/3.9.15
|
Release files / retry_sh-1.0.5-py2.py3-none-any.whl
| Download URL | retry_sh-1.0.5-py2.py3-none-any.whl |
|---|---|
| Size | 4.7 kB |
| Tags | Python 2 Python 3 |
|
SHA-256 checksum How to use checksums |
1c1a3f75f251903602abad91b0d88f614247c3b7af272224fa0ae4b8893459b3
|
|
BLAKE2b-256 checksum How to use checksums |
730e6f7bcfb113f0a92a8d4c313975cf192d207b2070aba86454ccf14a64f83b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/4.0.2 CPython/3.9.15
|