Skip to content

Commit 3faad9c

Browse files
authored
accept float "retry-after" (#34253)
* accept float "retry-after" * black * update * update tests * update
1 parent c6876ec commit 3faad9c

File tree

5 files changed

+21
-5
lines changed

5 files changed

+21
-5
lines changed

sdk/core/azure-core/CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010

1111
### Other Changes
1212

13+
- Accept float for `retry_after` header. #34203
14+
1315
## 1.30.0 (2024-02-01)
1416

1517
### Features Added

sdk/core/azure-core/azure/core/pipeline/policies/_utils.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ def parse_retry_after(retry_after: str) -> float:
6666
"""
6767
delay: float # Using the Mypy recommendation to use float for "int or float"
6868
try:
69-
delay = int(retry_after)
69+
delay = float(retry_after)
7070
except ValueError:
7171
# Not an integer? Try HTTP date
7272
retry_date = _parse_http_date(retry_after)

sdk/core/azure-core/tests/async_tests/test_retry_policy_async.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ def test_retry_types():
5959
assert backoff_time == 4
6060

6161

62-
@pytest.mark.parametrize("retry_after_input,http_request", product(["0", "800", "1000", "1200"], HTTP_REQUESTS))
62+
@pytest.mark.parametrize("retry_after_input,http_request", product(["0", "800", "1000", "1200", "0.9"], HTTP_REQUESTS))
6363
def test_retry_after(retry_after_input, http_request):
6464
retry_policy = AsyncRetryPolicy()
6565
request = http_request("GET", "http://localhost")
@@ -78,7 +78,7 @@ def test_retry_after(retry_after_input, http_request):
7878
assert retry_after == float(retry_after_input)
7979

8080

81-
@pytest.mark.parametrize("retry_after_input,http_request", product(["0", "800", "1000", "1200"], HTTP_REQUESTS))
81+
@pytest.mark.parametrize("retry_after_input,http_request", product(["0", "800", "1000", "1200", "0.9"], HTTP_REQUESTS))
8282
def test_x_ms_retry_after(retry_after_input, http_request):
8383
retry_policy = AsyncRetryPolicy()
8484
request = http_request("GET", "http://localhost")

sdk/core/azure-core/tests/test_retry_policy.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,8 @@ def test_retry_types():
6161

6262

6363
@pytest.mark.parametrize(
64-
"retry_after_input,http_request,http_response", product(["0", "800", "1000", "1200"], HTTP_REQUESTS, HTTP_RESPONSES)
64+
"retry_after_input,http_request,http_response",
65+
product(["0", "800", "1000", "1200", "0.9"], HTTP_REQUESTS, HTTP_RESPONSES),
6566
)
6667
def test_retry_after(retry_after_input, http_request, http_response):
6768
retry_policy = RetryPolicy()
@@ -82,7 +83,8 @@ def test_retry_after(retry_after_input, http_request, http_response):
8283

8384

8485
@pytest.mark.parametrize(
85-
"retry_after_input,http_request,http_response", product(["0", "800", "1000", "1200"], HTTP_REQUESTS, HTTP_RESPONSES)
86+
"retry_after_input,http_request,http_response",
87+
product(["0", "800", "1000", "1200", "0.9"], HTTP_REQUESTS, HTTP_RESPONSES),
8688
)
8789
def test_x_ms_retry_after(retry_after_input, http_request, http_response):
8890
retry_policy = RetryPolicy()

sdk/core/azure-core/tests/test_utils.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import pytest
99
from azure.core.utils import case_insensitive_dict
1010
from azure.core.utils._utils import get_running_async_lock
11+
from azure.core.pipeline.policies._utils import parse_retry_after
1112

1213

1314
@pytest.fixture()
@@ -134,3 +135,14 @@ def test_get_running_async_module_sync():
134135
sys.modules.pop("trio", None)
135136
with pytest.raises(RuntimeError):
136137
get_running_async_lock()
138+
139+
140+
def test_parse_retry_after():
141+
ret = parse_retry_after("100")
142+
assert ret == 100
143+
ret = parse_retry_after("Fri, 1 Oct 2100 00:00:00 GMT")
144+
assert ret > 0
145+
ret = parse_retry_after("0")
146+
assert ret == 0
147+
ret = parse_retry_after("0.9")
148+
assert ret == 0.9

0 commit comments

Comments
 (0)