@@ -36,10 +36,10 @@ def __init__(
3636 self , config : RatelimitingTransportConfig , transport : httpx .AsyncBaseTransport
3737 ) -> None :
3838 self ._jitter = config .jitter
39- self ._num_requests = 0
40- self ._reset_after : int | None = config .reset_after
4139 self ._transport = transport
42- self ._last_call_time = datetime .now (timezone .utc )
40+ self ._num_requests = 0
41+ self ._reset_after : int = config .reset_after
42+ self ._last_request_time = datetime .now (timezone .utc )
4343 self ._wait_time : float = 0
4444
4545 async def handle_async_request (self , request : httpx .Request ) -> httpx .Response :
@@ -52,7 +52,7 @@ async def handle_async_request(self, request: httpx.Request) -> httpx.Response:
5252 :rtype: httpx.Response
5353 """
5454 # Caculate seconds since the last request has been fired and corresponding wait time
55- time_elapsed = (self ._last_call_time - datetime .now (timezone .utc )).seconds
55+ time_elapsed = (self ._last_request_time - datetime .now (timezone .utc )).seconds
5656 remaining_wait = max (0 , self ._wait_time - time_elapsed )
5757
5858 # Add jitter to both cases and sleep
@@ -63,16 +63,17 @@ async def handle_async_request(self, request: httpx.Request) -> httpx.Response:
6363 random .uniform (remaining_wait , remaining_wait + self ._jitter ) # noqa: S311
6464 )
6565
66- # Update timestamp and delegate call
67- self ._last_call_time = datetime .now (timezone .utc )
66+ # Delegate call and update timestamp
6867 response = await self ._transport .handle_async_request (request = request )
68+ self ._last_request_time = datetime .now (timezone .utc )
6969
7070 # Update state
7171 self ._num_requests += 1
7272 if response .status_code == 429 :
7373 retry_after = response .headers .get ("Retry-After" )
7474 if retry_after :
7575 self ._wait_time = float (retry_after )
76+ log .info ("Received retry after response: %.3f s" , self ._wait_time )
7677 else :
7778 log .warning (
7879 "Retry-After header not present in 429 response, using fallback instead."
0 commit comments