def test_on_error_is_error_unhandled(self): iterable = iter([TypeError, ValueError]) on_error = TypeError on_delay = [0] with self.assertRaises(ValueError): rerun(on_delay=on_delay, on_error=on_error)(func_iter)(iterable)
def test_max_retry_error_with_delay(self): iterable = iter([1, 0]) on_return = lambda x: x in (1, 0) on_delay = [0] with self.assertRaises(MaxRetryError): rerun(on_delay=on_delay, on_return=on_return)(func_iter)(iterable)
def test_on_retry_before_delay(self): iterable = iter([1, 2]) on_retry = Mock(side_effect=Exception) on_return = 1 on_delay = [0] with patch('rerunme.sleep') as sleep_mock: with self.assertRaises(Exception): rerun(on_delay=on_delay, on_return=on_return, on_retry=on_retry, retry_after_delay=False)(func_iter)(iterable) sleep_mock.assert_not_called()
def test_on_retry_after_delay(self): iterable = iter([1, 2]) on_retry = Mock() on_return = 1 on_delay = [0] with patch('rerunme.sleep') as sleep_mock: rerun(on_delay=on_delay, on_return=on_return, on_retry=on_retry, retry_after_delay=True)(func_iter)(iterable) sleep_mock.assert_called_once_with(0) on_retry.assert_called_once_with(0, 1, iterable)
def test_on_return_is_value_handled(self): iterable = iter([1, 1, 0]) on_return = 1 on_delay = [0, 0] out = rerun(on_delay=on_delay, on_return=on_return)(func_iter)(iterable) self.assertEqual(0, out)
def test_on_return_is_iterable_handled(self): iterable = iter([1, 2, 3, 4]) on_return = [1, 2, 3] on_delay = [0, 0, 0] out = rerun(on_delay=on_delay, on_return=on_return)(func_iter)(iterable) self.assertEqual(4, out)
def test_on_return_is_function_handled(self): iterable = iter([1, 2, 3, 4]) on_return = lambda x: x in (1, 2, 3) on_delay = [0, 0, 0] out = rerun(on_delay=on_delay, on_return=on_return)(func_iter)(iterable) self.assertEqual(4, out)
def test_on_delay_int(self): iterable = iter([0, 1]) on_delay = 0 on_return = 0 out = rerun(on_delay=on_delay, on_return=on_return)(func_iter)(iterable) self.assertEqual(1, out)
def test_partial_method(self): iterable = iter([1, 0]) on_return = 1 on_error = KeyError on_delay = [0] out = rerun(on_delay=on_delay, on_error=on_error, on_return=on_return)(Dummy().partial_func_iter)(iterable) self.assertEqual(0, out)
def test_function_kwarg_only_params(self): iterable = iter([1, 0]) def on_delay(*args, x=1, **kwargs): return x out = rerun(on_delay=on_delay)(func_iter)(iterable) self.assertEqual(1, out)
def test_on_delay_function(self): iterable = iter([0, 1]) on_delay = lambda: [0] on_return = 0 out = rerun(on_delay=on_delay, on_return=on_return)(func_iter)(iterable) self.assertEqual(1, out)
def test_handler_with_args(self): iterable = iter([ValueError, None]) on_delay = [0] def on_error(x, *args): self.assertEqual(len(args), 1) return isinstance(x, ValueError) out = rerun(on_delay=on_delay, on_error=on_error)(func_iter)(iterable) self.assertEqual(None, out)
def test_handler_with_args_and_kwargs(self): iterable = iter([1, 0]) on_delay = [0] def on_return(x, *args, **kwargs): self.assertEqual(len(args), 1) self.assertEqual(len(kwargs), 1) return x == 1 out = rerun(on_delay=on_delay, on_return=on_return)(func_iter)(iterable, nothing=True) self.assertEqual(0, out)
def test_run(self): on_return = [1, 2] on_error = KeyError on_delay = [0] decorator = rerun(on_delay=on_delay, on_error=on_error, on_return=on_return) out = decorator.run(func_iter, iter([1, 0])) self.assertEqual(0, out) out = decorator.run(func_iter, iter([2, 0])) self.assertEqual(0, out)
def test_partial_failure(self): iterable = iter([1]) on_return = 1 with self.assertRaises(MaxRetryError): rerun(on_return=on_return)(partial_func_iter)(iterable)
def test_no_handlers_error(self): iterable = iter([ValueError]) with self.assertRaises(ValueError): rerun()(func_iter)(iterable)
def test_no_handlers_success(self): iterable = iter([1]) out = rerun()(func_iter)(iterable) self.assertEqual(1, out)
def test_max_retry_error_without_delay(self): iterable = iter([0]) on_return = 0 with self.assertRaises(MaxRetryError): rerun(on_return=on_return)(func_iter)(iterable)
def test_on_error_is_error_handled(self): iterable = iter([ValueError, ValueError, 1]) on_error = ValueError on_delay = [0, 0] out = rerun(on_delay=on_delay, on_error=on_error)(func_iter)(iterable) self.assertEqual(1, out)
def test_on_error_is_iterable_unhandled(self): iterable = iter([ValueError]) on_error = [KeyError, TypeError] with self.assertRaises(ValueError): rerun(on_error=on_error)(func_iter)(iterable)
def test_on_return_is_function_unhandled(self): iterable = iter([1]) on_return = lambda x: x == 4 out = rerun(on_return=on_return)(func_iter)(iterable) self.assertEqual(out, 1)
def test_on_return_is_value_unhandled(self): iterable = iter([1]) on_return = 4 out = rerun(on_return=on_return)(func_iter)(iterable) self.assertEqual(out, 1)
def test_on_error_is_function_handled(self): iterable = iter([ValueError, 1]) on_error = lambda x: isinstance(x, ValueError) on_delay = [0] out = rerun(on_delay=on_delay, on_error=on_error)(func_iter)(iterable) self.assertEqual(1, out)
def test_on_error_is_function_unhandled(self): iterable = iter([ValueError]) on_error = lambda x: not isinstance(x, ValueError) with self.assertRaises(ValueError): rerun(on_error=on_error)(func_iter)(iterable)