Fix @retry

This commit is contained in:
simon987 2021-01-10 22:46:20 -05:00
parent 58d150279f
commit f914759b71
3 changed files with 38 additions and 8 deletions

View File

@ -11,13 +11,16 @@ last_time_called = dict()
def retry(attempts, callback=None):
def decorate(func):
retries = attempts
while retries > 0:
try:
func()
except Exception as e:
if callback:
callback(e)
def wrapper(*args, **kwargs):
retries = attempts
while retries > 0:
try:
return func(*args, **kwargs)
except Exception as e:
if callback:
callback(e)
retries -= 1
return wrapper
return decorate

View File

@ -2,7 +2,7 @@ from setuptools import setup
setup(
name="hexlib",
version="1.22",
version="1.23",
description="Misc utility methods",
author="simon987",
author_email="me@simon987.net",

27
test/test_retry.py Normal file
View File

@ -0,0 +1,27 @@
from unittest import TestCase
from hexlib.db import VolatileState, VolatileBooleanState
from hexlib.misc import retry
class TestRetry(TestCase):
def test_simple(self):
@retry(attempts=3)
def a(i):
return i + 1
self.assertEqual(a(1), 2)
def test_error(self):
arr = []
def cb(e):
arr.append(e)
@retry(attempts=3, callback=cb)
def a(i):
raise Exception("err")
a(1)
self.assertEqual(3, len(arr))