@@ -783,6 +783,52 @@ def retry_handler(_request: httpx.Request) -> httpx.Response:
783783 assert response .retries_taken == failures_before_success
784784 assert int (response .http_request .headers .get ("x-stainless-retry-count" )) == failures_before_success
785785
786+ @pytest .mark .parametrize ("failures_before_success" , [0 , 2 , 4 ])
787+ @mock .patch ("runloop_api_client._base_client.BaseClient._calculate_retry_timeout" , _low_retry_timeout )
788+ @pytest .mark .respx (base_url = base_url )
789+ def test_omit_retry_count_header (
790+ self , client : Runloop , failures_before_success : int , respx_mock : MockRouter
791+ ) -> None :
792+ client = client .with_options (max_retries = 4 )
793+
794+ nb_retries = 0
795+
796+ def retry_handler (_request : httpx .Request ) -> httpx .Response :
797+ nonlocal nb_retries
798+ if nb_retries < failures_before_success :
799+ nb_retries += 1
800+ return httpx .Response (500 )
801+ return httpx .Response (200 )
802+
803+ respx_mock .post ("/v1/devboxes" ).mock (side_effect = retry_handler )
804+
805+ response = client .devboxes .with_raw_response .create (extra_headers = {"x-stainless-retry-count" : Omit ()})
806+
807+ assert len (response .http_request .headers .get_list ("x-stainless-retry-count" )) == 0
808+
809+ @pytest .mark .parametrize ("failures_before_success" , [0 , 2 , 4 ])
810+ @mock .patch ("runloop_api_client._base_client.BaseClient._calculate_retry_timeout" , _low_retry_timeout )
811+ @pytest .mark .respx (base_url = base_url )
812+ def test_overwrite_retry_count_header (
813+ self , client : Runloop , failures_before_success : int , respx_mock : MockRouter
814+ ) -> None :
815+ client = client .with_options (max_retries = 4 )
816+
817+ nb_retries = 0
818+
819+ def retry_handler (_request : httpx .Request ) -> httpx .Response :
820+ nonlocal nb_retries
821+ if nb_retries < failures_before_success :
822+ nb_retries += 1
823+ return httpx .Response (500 )
824+ return httpx .Response (200 )
825+
826+ respx_mock .post ("/v1/devboxes" ).mock (side_effect = retry_handler )
827+
828+ response = client .devboxes .with_raw_response .create (extra_headers = {"x-stainless-retry-count" : "42" })
829+
830+ assert response .http_request .headers .get ("x-stainless-retry-count" ) == "42"
831+
786832
787833class TestAsyncRunloop :
788834 client = AsyncRunloop (base_url = base_url , bearer_token = bearer_token , _strict_response_validation = True )
@@ -1523,3 +1569,51 @@ def retry_handler(_request: httpx.Request) -> httpx.Response:
15231569
15241570 assert response .retries_taken == failures_before_success
15251571 assert int (response .http_request .headers .get ("x-stainless-retry-count" )) == failures_before_success
1572+
1573+ @pytest .mark .parametrize ("failures_before_success" , [0 , 2 , 4 ])
1574+ @mock .patch ("runloop_api_client._base_client.BaseClient._calculate_retry_timeout" , _low_retry_timeout )
1575+ @pytest .mark .respx (base_url = base_url )
1576+ @pytest .mark .asyncio
1577+ async def test_omit_retry_count_header (
1578+ self , async_client : AsyncRunloop , failures_before_success : int , respx_mock : MockRouter
1579+ ) -> None :
1580+ client = async_client .with_options (max_retries = 4 )
1581+
1582+ nb_retries = 0
1583+
1584+ def retry_handler (_request : httpx .Request ) -> httpx .Response :
1585+ nonlocal nb_retries
1586+ if nb_retries < failures_before_success :
1587+ nb_retries += 1
1588+ return httpx .Response (500 )
1589+ return httpx .Response (200 )
1590+
1591+ respx_mock .post ("/v1/devboxes" ).mock (side_effect = retry_handler )
1592+
1593+ response = await client .devboxes .with_raw_response .create (extra_headers = {"x-stainless-retry-count" : Omit ()})
1594+
1595+ assert len (response .http_request .headers .get_list ("x-stainless-retry-count" )) == 0
1596+
1597+ @pytest .mark .parametrize ("failures_before_success" , [0 , 2 , 4 ])
1598+ @mock .patch ("runloop_api_client._base_client.BaseClient._calculate_retry_timeout" , _low_retry_timeout )
1599+ @pytest .mark .respx (base_url = base_url )
1600+ @pytest .mark .asyncio
1601+ async def test_overwrite_retry_count_header (
1602+ self , async_client : AsyncRunloop , failures_before_success : int , respx_mock : MockRouter
1603+ ) -> None :
1604+ client = async_client .with_options (max_retries = 4 )
1605+
1606+ nb_retries = 0
1607+
1608+ def retry_handler (_request : httpx .Request ) -> httpx .Response :
1609+ nonlocal nb_retries
1610+ if nb_retries < failures_before_success :
1611+ nb_retries += 1
1612+ return httpx .Response (500 )
1613+ return httpx .Response (200 )
1614+
1615+ respx_mock .post ("/v1/devboxes" ).mock (side_effect = retry_handler )
1616+
1617+ response = await client .devboxes .with_raw_response .create (extra_headers = {"x-stainless-retry-count" : "42" })
1618+
1619+ assert response .http_request .headers .get ("x-stainless-retry-count" ) == "42"
0 commit comments