retryz 0.1.9

Creator: railscoderz

Last updated:

Add to Cart

Description:

retryz 0.1.9

VERSION: 0.1.9

Introduction
Function decorator that helps to retry the function under certain criteria.
This package contains the retry decorator and a bunch of configuration
parameters for this decorator.
Tested on python 2.7 and python 3.4.
For quick start, check the tutorial section of this page.
Check [test_retryz.py](test/test_retryz.py) for detail examples.


Installation
pip install retryz


License
Apache License version 2


Tutorial

Retry if ValueError is caught.

@retry(on_error=ValueError)
def my_func():
...

Retry if ValueError or TypeError is caught.

@retry(on_error=lambda e: isinstance(e, (ValueError, TypeError)))
def my_func():
...

Retry until TypeError is caught.

@retry(on_error=lambda e: not isinstance(e, TypeError))
def my_func():
...

Retry until TypeError or AttributeError is caught.

@retry(on_error=lambda e: not isinstance(e, (TypeError, AttributeError)))
def my_func():
...

When on_error is a callback,
it will retry until on_error returns False. Note that callback
takes one parameter which is the error instance raised by the decorated
function.

def _error_callback(self, ex):
assert_that(ex, instance_of(TypeError))
return self.call_count != 4

@retry(on_error=_error_callback)
def error_call_back(self):
...

Retry if returns certain value.

@retry(on_return=True)
def my_func(self):
...

Retry if return value in the list.

@retry(on_return=lambda x: x in (1, 2, 3, 4, 5))
def my_func(self):
...

Retry until certain value is returned.

@retry(on_return=lambda x: x != 4)
def my_func(self):
...

Retry until any of the value is returned.

@retry(on_return=lambda x: x not in [3, 4])
def my_func(self):
...

When on_return is a callback,
it will retry until on_return returns False. Note that callback
takes one parameter which is the return value of the decorated function.

def _return_callback(ret):
return 4 + ret < 7

@retry(on_return=_return_callback)
def my_func(self):
...

Retry until timeout (in seconds)

@retry(timeout=0.1)
def my_func():
...

Retry maximum X times.

@retry(limit=3)
def my_func():
...

# or you could specify a callback
@retry(limit=lambda: 4)
def my_func_x():
...

Wait X seconds between each retry.

@retry(wait=0.1, timeout=0.3)
def my_func():
...

When wait is a callback, it will wait for the amount of
seconds returned by the callback.
The callback takes one parameter which is the current count of retry.

def _wait_callback(self, tried):
return 2 ** tried

@retry(wait=_wait_callback, timeout=0.1)
def my_func():
...

on_retry could be used to specify a callback. This callback
is a function with no parameter. It will be invoked before each
retry. Here is a typical usage.

def do_login():
# login if not
...

@retry(on_retry=do_login, limit=2)
def requests(resource_id):
...

retry could also be called in a functional style.
Note that the return value is a function. If you want to call
it, you need to add an extra ().

def foo():
...

retry(foo, limit=3, timeout=5)()
To file issue, please visit:
https://github.com/jealous/retryz
Contact author:

Cedric Zhuang <jealous@163.com>

License

For personal and professional use. You cannot resell or redistribute these repositories in their original state.

Customer Reviews

There are no reviews.