Skip to content

Commit ec0b68c

Browse files
committed
Refactor
* Remove doubles dependency * Move delays to own file
1 parent 049fb8b commit ec0b68c

File tree

5 files changed

+56
-54
lines changed

5 files changed

+56
-54
lines changed

requirements-dev.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
flake8==2.1.0
22
pytest==2.5.2
3-
doubles==0.0.1.beta3
3+
mock==1.0.1

retry/delay.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
from random import random as _random
2+
3+
4+
def random(min_seconds=0, max_seconds=5):
5+
def func(count):
6+
return _random(min_seconds, max_seconds)
7+
8+
return func
9+
10+
11+
def exponential(start_at):
12+
def func(count):
13+
return start_at * (2**count)
14+
15+
return func
16+
17+
18+
def incremental(start_at, step=1):
19+
def func(count):
20+
return start_at + count*step
21+
22+
return func

retry/retry.py

Lines changed: 0 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,6 @@
11
import time
22
from functools import partial, wraps
33
from numbers import Number
4-
from random import random
5-
6-
7-
def random_delay(min_seconds=0, max_seconds=5):
8-
def func(count):
9-
return random(min_seconds, max_seconds)
10-
11-
return func
12-
13-
14-
def doubling_delay(start_at):
15-
def func(count):
16-
return start_at * (2**count)
17-
18-
return func
19-
20-
21-
def linear_delay(start_at, step=1):
22-
def func(count):
23-
return start_at + count*step
24-
25-
return func
264

275

286
def _sleep(n):

test/test_delay.py

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
import mock
2+
3+
import retry.delay
4+
5+
6+
@mock.patch('retry.delay._random')
7+
def test_random_calls_stdlib_random(mock_random):
8+
mock_random.return_value = 'bob'
9+
func = retry.delay.random(0, 1)
10+
11+
assert func(1) == 'bob'
12+
mock_random.assert_called_with(0, 1)
13+
14+
15+
def test_exponential_grows_exponentialy():
16+
func = retry.delay.exponential(2)
17+
18+
assert func(0) == 2
19+
assert func(1) == 4
20+
assert func(2) == 8
21+
assert func(3) == 16
22+
23+
24+
def test_incremental_grows_by_step():
25+
func = retry.delay.incremental(2, 3)
26+
27+
assert func(0) == 2
28+
assert func(1) == 5
29+
assert func(2) == 8
Lines changed: 4 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
from pytest import raises
2-
from doubles import expect
2+
import mock
33

44
from retry import retry
55

@@ -159,34 +159,7 @@ def foo():
159159
assert e.value.message == 'Test Error 1'
160160

161161

162-
def test_retry_with_custom_wait_function():
163-
expect(retry)._sleep.with_args(0)
164-
expect(retry)._sleep.with_args(1)
165-
expect(retry)._sleep.with_args(2)
166-
expect(retry)._sleep.with_args(3)
167-
162+
@mock.patch('retry.retry._sleep')
163+
def test_retry_with_wait_function(mock_sleep):
168164
retry.call(get_dummy_func(), wait=lambda n: n)
169-
170-
171-
def test_retry_with_fixed_wait():
172-
expect(retry)._sleep.with_args(1).exactly(4).times
173-
174-
retry.call(get_dummy_func(), wait=1)
175-
176-
177-
def test_retry_with_doubling_delay():
178-
expect(retry)._sleep.with_args(1)
179-
expect(retry)._sleep.with_args(2)
180-
expect(retry)._sleep.with_args(4)
181-
expect(retry)._sleep.with_args(8)
182-
183-
retry.call(get_dummy_func(), wait=retry.doubling_delay(1))
184-
185-
186-
def test_retry_with_linear_delay():
187-
expect(retry)._sleep.with_args(2)
188-
expect(retry)._sleep.with_args(3)
189-
expect(retry)._sleep.with_args(4)
190-
expect(retry)._sleep.with_args(5)
191-
192-
retry.call(get_dummy_func(), wait=retry.linear_delay(2, 1))
165+
mock_sleep.assert_called_with(3)

0 commit comments

Comments
 (0)