Skip to content

Commit 2464f1a

Browse files
committed
fix issue where multiple calls to same func fail
1 parent a246137 commit 2464f1a

3 files changed

Lines changed: 30 additions & 9 deletions

File tree

tests/test_retry.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,20 @@ def func():
159159
assert mock.call_count is 3
160160

161161

162+
def test_multiple_calls():
163+
local = {'runs': 0}
164+
165+
@retry
166+
def foo():
167+
local['runs'] += 1
168+
if local['runs'] % 2 == 0:
169+
return True
170+
raise ValueError('test')
171+
172+
assert foo()
173+
assert foo()
174+
175+
162176
def test_retry_exp_backoff(mocker):
163177
mocker.patch('trythatagain.waiters.time')
164178

trythatagain/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,4 @@
33
MILLISECONDS, SECONDS, retry, retry_exp_backoff, retry_linear_backoff
44
)
55

6-
__version__ = '0.1.2'
6+
__version__ = '0.1.3'

trythatagain/decorators.py

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -29,11 +29,6 @@ def retry(func=None, self=None, retries=3, raise_for=None, reraise=True,
2929
retries; requires `wait_func`
3030
3131
"""
32-
local = {
33-
"tries": 0,
34-
"exc": None
35-
}
36-
3732
if raise_for is None:
3833
raise_for = NoneType
3934

@@ -43,15 +38,27 @@ def retry(func=None, self=None, retries=3, raise_for=None, reraise=True,
4338

4439
@wraps(func)
4540
def wrapped(*args, **kwargs):
41+
local = {
42+
"tries": 0,
43+
"exc": None
44+
}
45+
46+
def reset():
47+
local['tries'] = 0
48+
local['exc'] = None
49+
4650
while local['tries'] < retries or retries == 0:
4751
local['tries'] += 1
4852
try:
4953
if self is not None:
50-
return func(self, *args, **kwargs)
54+
retval = func(self, *args, **kwargs)
5155
else:
52-
return func(*args, **kwargs)
56+
retval = func(*args, **kwargs)
57+
reset()
58+
return retval
5359
except Exception as e:
54-
local['exc'] = e
60+
if local['exc'] is None:
61+
local['exc'] = e
5562

5663
try:
5764
if isinstance(e, raise_for):

0 commit comments

Comments
 (0)