summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRay Holder <ray.holder+github@gmail.com>2014-06-20 01:43:48 -0500
committerRay Holder <ray.holder+github@gmail.com>2014-06-20 01:43:48 -0500
commite5fc513f5d593c052a537cbb8483d560e0516bbf (patch)
treeafb9d6a699d28b1db17a53caa08a34ea80077c78
parentbac9ab8621d54428cdb5f9778acbb121f2e2fa11 (diff)
parent1ca4a7d31d90a17f0cbdd4666e8d9be00f60aa4d (diff)
downloadretrying-e5fc513f5d593c052a537cbb8483d560e0516bbf.tar.gz
Merge pull request #10 from simondolle/bugfix/#8_raise_retry_error_on_failure
Bugfix/#8 raise retry error on failure
-rw-r--r--AUTHORS.rst1
-rw-r--r--retrying.py5
-rw-r--r--test_retrying.py14
3 files changed, 16 insertions, 4 deletions
diff --git a/AUTHORS.rst b/AUTHORS.rst
index 8c1aa55..6f1494e 100644
--- a/AUTHORS.rst
+++ b/AUTHORS.rst
@@ -15,3 +15,4 @@ Patches and Suggestions
- Justin Turner Arthur
- J Derek Wilson
- Alex Kuang
+- Simon Dollé
diff --git a/retrying.py b/retrying.py
index b337744..0efd112 100644
--- a/retrying.py
+++ b/retrying.py
@@ -237,7 +237,10 @@ class Retrying(object):
delay_since_first_attempt_ms = int(round(time.time() * 1000)) - start_time
if self.stop(attempt_number, delay_since_first_attempt_ms):
- raise RetryError(attempt)
+ if not self._wrap_exception and attempt.has_exception:
+ raise attempt.get()
+ else:
+ raise RetryError(attempt)
else:
sleep = self.wait(attempt_number, delay_since_first_attempt_ms)
time.sleep(sleep / 1000.0)
diff --git a/test_retrying.py b/test_retrying.py
index 43c9000..c163c41 100644
--- a/test_retrying.py
+++ b/test_retrying.py
@@ -282,7 +282,7 @@ class TestDecoratorWrapper(unittest.TestCase):
self.assertTrue(t >= 250)
self.assertTrue(result)
- def test_with_stop(self):
+ def test_with_stop_on_return_value(self):
try:
_retryable_test_with_stop(NoneReturnUntilAfterCount(5))
self.fail("Expected RetryError after 3 attempts")
@@ -292,6 +292,14 @@ class TestDecoratorWrapper(unittest.TestCase):
self.assertTrue(re.last_attempt.value is None)
print(re)
+ def test_with_stop_on_exception(self):
+ try:
+ _retryable_test_with_stop(NoIOErrorAfterCount(5))
+ self.fail("Expected IOError")
+ except IOError as re:
+ self.assertTrue(isinstance(re, IOError))
+ print(re)
+
def test_retry_if_exception_of_type(self):
self.assertTrue(_retryable_test_with_exception_type_io(NoIOErrorAfterCount(5)))
@@ -303,7 +311,7 @@ class TestDecoratorWrapper(unittest.TestCase):
print(n)
try:
- _retryable_test_with_exception_type_io_attempt_limit(NoIOErrorAfterCount(5))
+ _retryable_test_with_exception_type_io_attempt_limit_wrap(NoIOErrorAfterCount(5))
self.fail("Expected RetryError")
except RetryError as re:
self.assertEqual(3, re.last_attempt.attempt_number)
@@ -323,7 +331,7 @@ class TestDecoratorWrapper(unittest.TestCase):
print(n)
try:
- _retryable_test_with_exception_type_custom_attempt_limit(NoCustomErrorAfterCount(5))
+ _retryable_test_with_exception_type_custom_attempt_limit_wrap(NoCustomErrorAfterCount(5))
self.fail("Expected RetryError")
except RetryError as re:
self.assertEqual(3, re.last_attempt.attempt_number)