示例#1
0
    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)
示例#2
0
    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)
示例#3
0
    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()
示例#4
0
    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)
示例#5
0
 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)
示例#6
0
 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)
示例#7
0
 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)
示例#8
0
    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)
示例#9
0
 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)
示例#10
0
    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)
示例#11
0
    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)
示例#12
0
    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)
示例#13
0
    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)
示例#14
0
    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)
示例#15
0
    def test_partial_failure(self):
        iterable = iter([1])
        on_return = 1

        with self.assertRaises(MaxRetryError):
            rerun(on_return=on_return)(partial_func_iter)(iterable)
示例#16
0
    def test_no_handlers_error(self):
        iterable = iter([ValueError])

        with self.assertRaises(ValueError):
            rerun()(func_iter)(iterable)
示例#17
0
 def test_no_handlers_success(self):
     iterable = iter([1])
     out = rerun()(func_iter)(iterable)
     self.assertEqual(1, out)
示例#18
0
    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)
示例#19
0
 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)
示例#20
0
    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)
示例#21
0
 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)
示例#22
0
 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)
示例#23
0
 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)
示例#24
0
    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)