Skip to content

Commit 6f78b5b

Browse files
committed
test: fix compatibility of test cases on python 2.7
1 parent cbb55b3 commit 6f78b5b

File tree

5 files changed

+48
-37
lines changed

5 files changed

+48
-37
lines changed

qiniu/region.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ def wrapper(self, *args, **kwargs):
2727
return decorator
2828

2929

30-
class LegacyRegion(_HTTPRegion):
30+
class LegacyRegion(_HTTPRegion, object):
3131
"""七牛上传区域类
3232
该类主要内容上传区域地址。
3333
"""

qiniu/retry/retrier.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,8 @@ def __init__(self, policies=None, before_retry=None):
2121

2222
def __iter__(self):
2323
retrying = Retrying(
24-
policies=self.policies.copy(),
24+
# change to `list.copy` for more readable when min version of python update to >= 3
25+
policies=self.policies[:],
2526
before_retry=self.before_retry
2627
)
2728
retrying.init_context()

tests/cases/conftest.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,3 +101,19 @@ def _rand_string(length):
101101
for _ in range(length)
102102
)
103103
yield _rand_string
104+
105+
106+
class Ref:
107+
"""
108+
python2 not support nonlocal keyword
109+
"""
110+
def __init__(self, value=None):
111+
self.value = value
112+
113+
114+
@pytest.fixture(scope='session')
115+
def use_ref():
116+
def _use_ref(value):
117+
return Ref(value)
118+
119+
yield _use_ref

tests/cases/test_http/test_regions_retry_policy.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -204,13 +204,13 @@ def test_on_change_region_option(
204204
self,
205205
regions,
206206
service_names,
207-
expect_change_region_times
207+
expect_change_region_times,
208+
use_ref
208209
):
209-
actual_change_region_times = 0
210+
actual_change_region_times_ref = use_ref(0)
210211

211212
def handle_change_region(_context):
212-
nonlocal actual_change_region_times
213-
actual_change_region_times += 1
213+
actual_change_region_times_ref.value += 1
214214

215215
regions_retry_policy = RegionsRetryPolicy(
216216
regions_provider=regions,
@@ -224,7 +224,7 @@ def handle_change_region(_context):
224224
while regions_retry_policy.should_retry(mocked_attempt):
225225
regions_retry_policy.prepare_retry(mocked_attempt)
226226

227-
assert actual_change_region_times == expect_change_region_times
227+
assert actual_change_region_times_ref.value == expect_change_region_times
228228

229229
def test_init_with_preferred_endpoints_option_new_temp_region(self, mocked_regions_provider):
230230
preferred_endpoints = [

tests/cases/test_retry/test_retrier.py

Lines changed: 24 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -28,12 +28,11 @@ def after_retry(self, attempt, policy):
2828

2929

3030
class TestRetry:
31-
def test_retrier_with_code_block(self):
32-
retried_times = 0
31+
def test_retrier_with_code_block(self, use_ref):
32+
retried_times_ref = use_ref(0)
3333

3434
def handle_before_retry(_attempt, _policy):
35-
nonlocal retried_times
36-
retried_times += 1
35+
retried_times_ref.value += 1
3736
return True
3837

3938
max_retry_times = 3
@@ -54,14 +53,13 @@ def handle_before_retry(_attempt, _policy):
5453
assert str(err) == 'mocked error'
5554

5655
assert tried_times == max_retry_times + 1
57-
assert retried_times == max_retry_times
56+
assert retried_times_ref.value == max_retry_times
5857

59-
def test_retrier_with_try_do(self):
60-
retried_times = 0
58+
def test_retrier_with_try_do(self, use_ref):
59+
retried_times_ref = use_ref(0)
6160

6261
def handle_before_retry(_attempt, _policy):
63-
nonlocal retried_times
64-
retried_times += 1
62+
retried_times_ref.value += 1
6563
return True
6664

6765
max_retry_times = 3
@@ -72,26 +70,24 @@ def handle_before_retry(_attempt, _policy):
7270
before_retry=handle_before_retry
7371
)
7472

75-
tried_times = 0
73+
tried_times_ref = use_ref(0)
7674

7775
def add_one(n):
78-
nonlocal tried_times
79-
tried_times += 1
80-
if tried_times <= 3:
76+
tried_times_ref.value += 1
77+
if tried_times_ref.value <= 3:
8178
raise Exception('mock error')
8279
return n + 1
8380

8481
result = retrier.try_do(add_one, 1)
8582
assert result == 2
86-
assert tried_times == max_retry_times + 1
87-
assert retried_times == max_retry_times
83+
assert tried_times_ref.value == max_retry_times + 1
84+
assert retried_times_ref.value == max_retry_times
8885

89-
def test_retrier_with_decorator(self):
90-
retried_times = 0
86+
def test_retrier_with_decorator(self, use_ref):
87+
retried_times_ref = use_ref(0)
9188

9289
def handle_before_retry(_attempt, _policy):
93-
nonlocal retried_times
94-
retried_times += 1
90+
retried_times_ref.value += 1
9591
return True
9692

9793
max_retry_times = 3
@@ -102,27 +98,25 @@ def handle_before_retry(_attempt, _policy):
10298
before_retry=handle_before_retry
10399
)
104100

105-
tried_times = 0
101+
tried_times_ref = use_ref(0)
106102

107103
@retrier.retry
108104
def add_one(n):
109-
nonlocal tried_times
110-
tried_times += 1
111-
if tried_times <= 3:
105+
tried_times_ref.value += 1
106+
if tried_times_ref.value <= 3:
112107
raise Exception('mock error')
113108
return n + 1
114109

115110
result = add_one(1)
116111
assert result == 2
117-
assert tried_times == max_retry_times + 1
118-
assert retried_times == max_retry_times
112+
assert tried_times_ref.value == max_retry_times + 1
113+
assert retried_times_ref.value == max_retry_times
119114

120-
def test_retrier_with_no_need_retry_err(self):
121-
retried_times = 0
115+
def test_retrier_with_no_need_retry_err(self, use_ref):
116+
retried_times_ref = use_ref(0)
122117

123118
def handle_before_retry(_attempt, _policy):
124-
nonlocal retried_times
125-
retried_times += 1
119+
retried_times_ref.value += 1
126120
return True
127121

128122
max_retry_times = 3
@@ -145,4 +139,4 @@ def handle_before_retry(_attempt, _policy):
145139
assert str(err) == 'mocked error'
146140

147141
assert tried_times == 1
148-
assert retried_times == 0
142+
assert retried_times_ref.value == 0

0 commit comments

Comments
 (0)