39
39
# Module Constants
40
40
DEFAULT_SINGLE_REQUEST_TIMEOUT = 20.0
41
41
DEFAULT_RATE_LIMIT_TIMEOUT = 60.0
42
- RATE_LIMIT_EXCEEDED_RESPONSE_CODE = 429
42
+ RATE_LIMIT_RESPONSE_CODE = 429
43
+ RATE_LIMIT_LOG_MESSAGE = "Received a [%s] rate-limit response code."
43
44
44
45
45
46
# Helper Functions
@@ -251,7 +252,6 @@ def request(self, method, relative_url, erc, **kwargs):
251
252
kwargs .setdefault ('timeout' , self .single_request_timeout )
252
253
253
254
start_time = time .time ()
254
- finish_time = start_time + self .rate_limit_timeout
255
255
256
256
while True :
257
257
# Make the HTTP request to the API endpoint
@@ -264,23 +264,25 @@ def request(self, method, relative_url, erc, **kwargs):
264
264
except SparkApiError as e :
265
265
266
266
# Catch rate-limit errors
267
- if e .response_code == RATE_LIMIT_EXCEEDED_RESPONSE_CODE \
267
+ if e .response_code == RATE_LIMIT_RESPONSE_CODE \
268
268
and response .headers .get ('Retry-After' ):
269
269
270
- logger .debug ("Received a [%s] rate limit response. "
271
- "Attempting to retry." , e .response_code )
270
+ logger .debug (RATE_LIMIT_LOG_MESSAGE ,
271
+ e .response_code )
272
272
273
- rate_limit_wait = response .headers ['Retry-After' ]
273
+ rate_limit_wait = float ( response .headers ['Retry-After' ])
274
274
275
275
if self .rate_limit_timeout is None :
276
276
# Retry indefinitely
277
- logger .debug ("Waiting {:0.3f} seconds. "
278
- "rate_limit_timeout is None; "
277
+ logger .debug ("Rate-limiting; waiting {:0.3f} seconds. "
278
+ "rate_limit_timeout is None. "
279
279
"will retry indefinitely."
280
280
"" .format (rate_limit_wait ))
281
281
time .sleep (rate_limit_wait )
282
282
continue
283
- elif time .time () + rate_limit_wait < finish_time :
283
+
284
+ elif (time .time () + rate_limit_wait
285
+ < start_time + self .rate_limit_timeout ):
284
286
# Retry if doing so will not exceed the finish time
285
287
logger .debug ("Waiting {:0.3f} seconds. "
286
288
"rate_limit_timeout is {:0.3f} seconds, "
@@ -291,6 +293,7 @@ def request(self, method, relative_url, erc, **kwargs):
291
293
finish_time - time .time ()))
292
294
time .sleep (rate_limit_wait )
293
295
continue
296
+
294
297
else :
295
298
# Time exceeded re-raise the rate limit SparkApiError
296
299
raise
@@ -301,6 +304,8 @@ def request(self, method, relative_url, erc, **kwargs):
301
304
302
305
else :
303
306
# No errors - return the response object
307
+ logger .debug ("Response Code [%s]: %s" ,
308
+ response .status_code , response .url )
304
309
return response
305
310
306
311
def get (self , url , params = None , ** kwargs ):
0 commit comments