@@ -37,7 +37,7 @@ class TestHttpxRetryTransport():
3737 @respx .mock
3838 async def test_no_retry_on_success (self , base_url : str , mocker : MockerFixture ):
3939 """Test that a successful response doesn't trigger retries."""
40- retry_config = HttpxRetry (status = 3 , status_forcelist = [500 ])
40+ retry_config = HttpxRetry (max_retries = 3 , status_forcelist = [500 ])
4141 transport = HttpxRetryTransport (retry = retry_config )
4242 client = httpx .AsyncClient (transport = transport )
4343
@@ -55,7 +55,7 @@ async def test_no_retry_on_success(self, base_url: str, mocker: MockerFixture):
5555 @respx .mock
5656 async def test_no_retry_on_non_retryable_status (self , base_url : str , mocker : MockerFixture ):
5757 """Test that a non-retryable error status doesn't trigger retries."""
58- retry_config = HttpxRetry (status = 3 , status_forcelist = [500 , 503 ])
58+ retry_config = HttpxRetry (max_retries = 3 , status_forcelist = [500 , 503 ])
5959 transport = HttpxRetryTransport (retry = retry_config )
6060 client = httpx .AsyncClient (transport = transport )
6161
@@ -75,7 +75,7 @@ async def test_retry_on_status_code_success_on_last_retry(
7575 self , base_url : str , mocker : MockerFixture
7676 ):
7777 """Test retry on status code from status_forcelist, succeeding on the last attempt."""
78- retry_config = HttpxRetry (status = 2 , status_forcelist = [503 , 500 ], backoff_factor = 0.5 )
78+ retry_config = HttpxRetry (max_retries = 2 , status_forcelist = [503 , 500 ], backoff_factor = 0.5 )
7979 transport = HttpxRetryTransport (retry = retry_config )
8080 client = httpx .AsyncClient (transport = transport )
8181
@@ -101,7 +101,7 @@ async def test_retry_exhausted_returns_last_response(
101101 self , base_url : str , mocker : MockerFixture
102102 ):
103103 """Test that the last response is returned when retries are exhausted."""
104- retry_config = HttpxRetry (status = 1 , status_forcelist = [500 ], backoff_factor = 0 )
104+ retry_config = HttpxRetry (max_retries = 1 , status_forcelist = [500 ], backoff_factor = 0 )
105105 transport = HttpxRetryTransport (retry = retry_config )
106106 client = httpx .AsyncClient (transport = transport )
107107
@@ -124,7 +124,8 @@ async def test_retry_exhausted_returns_last_response(
124124 @respx .mock
125125 async def test_retry_after_header_seconds (self , base_url : str , mocker : MockerFixture ):
126126 """Test respecting Retry-After header with seconds value."""
127- retry_config = HttpxRetry (status = 1 , respect_retry_after_header = True , backoff_factor = 100 )
127+ retry_config = HttpxRetry (
128+ max_retries = 1 , respect_retry_after_header = True , backoff_factor = 100 )
128129 transport = HttpxRetryTransport (retry = retry_config )
129130 client = httpx .AsyncClient (transport = transport )
130131
@@ -146,7 +147,8 @@ async def test_retry_after_header_seconds(self, base_url: str, mocker: MockerFix
146147 @respx .mock
147148 async def test_retry_after_header_http_date (self , base_url : str , mocker : MockerFixture ):
148149 """Test respecting Retry-After header with an HTTP-date value."""
149- retry_config = HttpxRetry (status = 1 , respect_retry_after_header = True , backoff_factor = 100 )
150+ retry_config = HttpxRetry (
151+ max_retries = 1 , respect_retry_after_header = True , backoff_factor = 100 )
150152 transport = HttpxRetryTransport (retry = retry_config )
151153 client = httpx .AsyncClient (transport = transport )
152154
@@ -181,7 +183,7 @@ async def test_retry_after_header_http_date(self, base_url: str, mocker: MockerF
181183 async def test_retry_after_ignored_when_disabled (self , base_url : str , mocker : MockerFixture ):
182184 """Test Retry-After header is ignored if `respect_retry_after_header` is `False`."""
183185 retry_config = HttpxRetry (
184- status = 3 , respect_retry_after_header = False , status_forcelist = [429 ],
186+ max_retries = 3 , respect_retry_after_header = False , status_forcelist = [429 ],
185187 backoff_factor = 0.5 , backoff_max = 10 )
186188 transport = HttpxRetryTransport (retry = retry_config )
187189 client = httpx .AsyncClient (transport = transport )
@@ -215,7 +217,7 @@ async def test_retry_after_header_missing_backoff_fallback(
215217 """Test Retry-After header is ignored if `respect_retry_after_header`is `True` but header is
216218 not set."""
217219 retry_config = HttpxRetry (
218- status = 3 , respect_retry_after_header = True , status_forcelist = [429 ],
220+ max_retries = 3 , respect_retry_after_header = True , status_forcelist = [429 ],
219221 backoff_factor = 0.5 , backoff_max = 10 )
220222 transport = HttpxRetryTransport (retry = retry_config )
221223 client = httpx .AsyncClient (transport = transport )
@@ -247,7 +249,7 @@ async def test_exponential_backoff(self, base_url: str, mocker: MockerFixture):
247249 """Test that sleep time increases exponentially with `backoff_factor`."""
248250 # status=3 allows 3 retries (attempts 2, 3, 4)
249251 retry_config = HttpxRetry (
250- status = 3 , status_forcelist = [500 ], backoff_factor = 0.1 , backoff_max = 10.0 )
252+ max_retries = 3 , status_forcelist = [500 ], backoff_factor = 0.1 , backoff_max = 10.0 )
251253 transport = HttpxRetryTransport (retry = retry_config )
252254 client = httpx .AsyncClient (transport = transport )
253255
@@ -278,7 +280,7 @@ async def test_backoff_max(self, base_url: str, mocker: MockerFixture):
278280 """Test that backoff time respects `backoff_max`."""
279281 # status=4 allows 4 retries. backoff_factor=1 causes rapid increase.
280282 retry_config = HttpxRetry (
281- status = 4 , status_forcelist = [500 ], backoff_factor = 1 , backoff_max = 3.0 )
283+ max_retries = 4 , status_forcelist = [500 ], backoff_factor = 1 , backoff_max = 3.0 )
282284 transport = HttpxRetryTransport (retry = retry_config )
283285 client = httpx .AsyncClient (transport = transport )
284286
@@ -310,7 +312,7 @@ async def test_backoff_max(self, base_url: str, mocker: MockerFixture):
310312 async def test_backoff_jitter (self , base_url : str , mocker : MockerFixture ):
311313 """Test that `backoff_jitter` adds randomness within bounds."""
312314 retry_config = HttpxRetry (
313- status = 3 , status_forcelist = [500 ], backoff_factor = 0.2 , backoff_jitter = 0.1 )
315+ max_retries = 3 , status_forcelist = [500 ], backoff_factor = 0.2 , backoff_jitter = 0.1 )
314316 transport = HttpxRetryTransport (retry = retry_config )
315317 client = httpx .AsyncClient (transport = transport )
316318
@@ -343,7 +345,7 @@ async def test_backoff_jitter(self, base_url: str, mocker: MockerFixture):
343345 @respx .mock
344346 async def test_error_not_retryable (self , base_url ):
345347 """Test that non-HTTP errors are raised immediately if not retryable."""
346- retry_config = HttpxRetry (status = 3 )
348+ retry_config = HttpxRetry (max_retries = 3 )
347349 transport = HttpxRetryTransport (retry = retry_config )
348350 client = httpx .AsyncClient (transport = transport )
349351
@@ -362,7 +364,7 @@ class TestHttpxRetry():
362364
363365 def test_httpx_retry_copy (self , base_url ):
364366 """Test that `HttpxRetry.copy()` creates a deep copy."""
365- original = HttpxRetry (status = 5 , status_forcelist = [500 , 503 ], backoff_factor = 0.5 )
367+ original = HttpxRetry (max_retries = 5 , status_forcelist = [500 , 503 ], backoff_factor = 0.5 )
366368 original .history .append ((base_url , None , None )) # Add something mutable
367369
368370 copied = original .copy ()
@@ -372,17 +374,17 @@ def test_httpx_retry_copy(self, base_url):
372374 assert original .history is not copied .history
373375
374376 # Assert values are the same initially
375- assert copied .status == original .status
377+ assert copied .retries_left == original .retries_left
376378 assert copied .status_forcelist == original .status_forcelist
377379 assert copied .backoff_factor == original .backoff_factor
378380 assert len (copied .history ) == 1
379381
380382 # Modify the copy and check original is unchanged
381- copied .status = 1
383+ copied .retries_left = 1
382384 copied .status_forcelist = [404 ]
383385 copied .history .append ((base_url , None , None ))
384386
385- assert original .status == 5
387+ assert original .retries_left == 5
386388 assert original .status_forcelist == [500 , 503 ]
387389 assert len (original .history ) == 1
388390
@@ -413,7 +415,8 @@ def test_parse_retry_after_invalid_date(self):
413415 retry ._parse_retry_after ('Invalid Date Format' )
414416
415417 def test_get_backoff_time_calculation (self ):
416- retry = HttpxRetry (status = 6 , status_forcelist = [503 ], backoff_factor = 0.5 , backoff_max = 10.0 )
418+ retry = HttpxRetry (
419+ max_retries = 6 , status_forcelist = [503 ], backoff_factor = 0.5 , backoff_max = 10.0 )
417420 response = httpx .Response (503 )
418421 # No history -> attempt 1 -> no backoff before first request
419422 # Note: get_backoff_time() is typically called *before* the *next* request,
@@ -447,5 +450,5 @@ def test_get_backoff_time_calculation(self):
447450
448451 # Simulate attempt 6 completed
449452 retry .increment (self ._TEST_REQUEST , response )
450- # History len 6, attempt 7 -> 0.5*(2^4 ) = 10.0
453+ # History len 6, attempt 7 -> 0.5*(2^5 ) = 16.0 Clamped to 10
451454 assert retry .get_backoff_time () == pytest .approx (10.0 )
0 commit comments