diff options
author | Ray Holder <ray.holder+github@gmail.com> | 2014-06-20 01:43:48 -0500 |
---|---|---|
committer | Ray Holder <ray.holder+github@gmail.com> | 2014-06-20 01:43:48 -0500 |
commit | e5fc513f5d593c052a537cbb8483d560e0516bbf (patch) | |
tree | afb9d6a699d28b1db17a53caa08a34ea80077c78 | |
parent | bac9ab8621d54428cdb5f9778acbb121f2e2fa11 (diff) | |
parent | 1ca4a7d31d90a17f0cbdd4666e8d9be00f60aa4d (diff) | |
download | retrying-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.rst | 1 | ||||
-rw-r--r-- | retrying.py | 5 | ||||
-rw-r--r-- | test_retrying.py | 14 |
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) |