Skip to content

Commit b2a421e

Browse files
authored
port retry-after fix into corehttp (#34536)
* port retry-after fix into corehttp * update
1 parent cf564cc commit b2a421e

File tree

6 files changed

+24
-4
lines changed

6 files changed

+24
-4
lines changed

sdk/core/corehttp/CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
# Release History
22

3+
## 1.0.0b5 (2024-02-29)
4+
5+
### Other Changes
6+
7+
- Accept float for `retry_after` header.
8+
39
## 1.0.0b4 (2024-02-23)
410

511
### Other Changes

sdk/core/corehttp/corehttp/_version.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,4 @@
99
# regenerated.
1010
# --------------------------------------------------------------------------
1111

12-
VERSION = "1.0.0b4"
12+
VERSION = "1.0.0b5"

sdk/core/corehttp/corehttp/runtime/policies/_utils.py

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

sdk/core/corehttp/tests/async_tests/test_retry_policy_async.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ def test_retry_types():
5757

5858
@pytest.mark.parametrize(
5959
"retry_after_input,http_response",
60-
product(["0", "800", "1000", "1200"], ASYNC_HTTP_RESPONSES),
60+
product(["0", "800", "1000", "1200", "0.9"], ASYNC_HTTP_RESPONSES),
6161
)
6262
def test_retry_after(retry_after_input, http_response):
6363
retry_policy = AsyncRetryPolicy()

sdk/core/corehttp/tests/test_retry_policy.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,9 @@ def test_retry_types():
5454
assert backoff_time == 4
5555

5656

57-
@pytest.mark.parametrize("retry_after_input,http_response", product(["0", "800", "1000", "1200"], HTTP_RESPONSES))
57+
@pytest.mark.parametrize(
58+
"retry_after_input,http_response", product(["0", "800", "1000", "1200", "0.9"], HTTP_RESPONSES)
59+
)
5860
def test_retry_after(retry_after_input, http_response):
5961
retry_policy = RetryPolicy()
6062
request = HttpRequest("GET", "http://localhost")

sdk/core/corehttp/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 corehttp.utils import case_insensitive_dict
1010
from corehttp.utils._utils import get_running_async_lock
11+
from corehttp.runtime.policies._utils import parse_retry_after
1112

1213

1314
@pytest.fixture()
@@ -124,3 +125,14 @@ async def test_get_running_async_module_asyncio():
124125
def test_get_running_async_module_sync():
125126
with pytest.raises(RuntimeError):
126127
get_running_async_lock()
128+
129+
130+
def test_parse_retry_after():
131+
ret = parse_retry_after("100")
132+
assert ret == 100
133+
ret = parse_retry_after("Fri, 1 Oct 2100 00:00:00 GMT")
134+
assert ret > 0
135+
ret = parse_retry_after("0")
136+
assert ret == 0
137+
ret = parse_retry_after("0.9")
138+
assert ret == 0.9

0 commit comments

Comments
 (0)