@@ -646,26 +646,33 @@ def _should_retry(self, response: httpx.Response) -> bool:
646
646
647
647
# If the server explicitly says whether or not to retry, obey.
648
648
if should_retry_header == "true" :
649
+ log .debug ("Retrying as header `x-should-retry` is set to `true`" )
649
650
return True
650
651
if should_retry_header == "false" :
652
+ log .debug ("Not retrying as header `x-should-retry` is set to `false`" )
651
653
return False
652
654
653
655
# Retry on request timeouts.
654
656
if response .status_code == 408 :
657
+ log .debug ("Retrying due to status code %i" , response .status_code )
655
658
return True
656
659
657
660
# Retry on lock timeouts.
658
661
if response .status_code == 409 :
662
+ log .debug ("Retrying due to status code %i" , response .status_code )
659
663
return True
660
664
661
665
# Retry on rate limits.
662
666
if response .status_code == 429 :
667
+ log .debug ("Retrying due to status code %i" , response .status_code )
663
668
return True
664
669
665
670
# Retry internal errors.
666
671
if response .status_code >= 500 :
672
+ log .debug ("Retrying due to status code %i" , response .status_code )
667
673
return True
668
674
675
+ log .debug ("Not retrying" )
669
676
return False
670
677
671
678
def _idempotency_key (self ) -> str :
@@ -883,6 +890,8 @@ def _request(
883
890
** kwargs ,
884
891
)
885
892
except httpx .TimeoutException as err :
893
+ log .debug ("Encountered httpx.TimeoutException" , exc_info = True )
894
+
886
895
if retries > 0 :
887
896
return self ._retry_request (
888
897
options ,
@@ -893,8 +902,11 @@ def _request(
893
902
response_headers = None ,
894
903
)
895
904
905
+ log .debug ("Raising timeout error" )
896
906
raise APITimeoutError (request = request ) from err
897
907
except Exception as err :
908
+ log .debug ("Encountered Exception" , exc_info = True )
909
+
898
910
if retries > 0 :
899
911
return self ._retry_request (
900
912
options ,
@@ -905,6 +917,7 @@ def _request(
905
917
response_headers = None ,
906
918
)
907
919
920
+ log .debug ("Raising connection error" )
908
921
raise APIConnectionError (request = request ) from err
909
922
910
923
log .debug (
@@ -914,6 +927,8 @@ def _request(
914
927
try :
915
928
response .raise_for_status ()
916
929
except httpx .HTTPStatusError as err : # thrown on 4xx and 5xx status code
930
+ log .debug ("Encountered httpx.HTTPStatusError" , exc_info = True )
931
+
917
932
if retries > 0 and self ._should_retry (err .response ):
918
933
err .response .close ()
919
934
return self ._retry_request (
@@ -930,6 +945,7 @@ def _request(
930
945
if not err .response .is_closed :
931
946
err .response .read ()
932
947
948
+ log .debug ("Re-raising status error" )
933
949
raise self ._make_status_error_from_response (err .response ) from None
934
950
935
951
return self ._process_response (
@@ -951,6 +967,11 @@ def _retry_request(
951
967
stream_cls : type [_StreamT ] | None ,
952
968
) -> ResponseT | _StreamT :
953
969
remaining = remaining_retries - 1
970
+ if remaining == 1 :
971
+ log .debug ("1 retry left" )
972
+ else :
973
+ log .debug ("%i retries left" , remaining )
974
+
954
975
timeout = self ._calculate_retry_timeout (remaining , options , response_headers )
955
976
log .info ("Retrying request to %s in %f seconds" , options .url , timeout )
956
977
@@ -1349,6 +1370,8 @@ async def _request(
1349
1370
** kwargs ,
1350
1371
)
1351
1372
except httpx .TimeoutException as err :
1373
+ log .debug ("Encountered httpx.TimeoutException" , exc_info = True )
1374
+
1352
1375
if retries > 0 :
1353
1376
return await self ._retry_request (
1354
1377
options ,
@@ -1359,8 +1382,11 @@ async def _request(
1359
1382
response_headers = None ,
1360
1383
)
1361
1384
1385
+ log .debug ("Raising timeout error" )
1362
1386
raise APITimeoutError (request = request ) from err
1363
1387
except Exception as err :
1388
+ log .debug ("Encountered Exception" , exc_info = True )
1389
+
1364
1390
if retries > 0 :
1365
1391
return await self ._retry_request (
1366
1392
options ,
@@ -1371,6 +1397,7 @@ async def _request(
1371
1397
response_headers = None ,
1372
1398
)
1373
1399
1400
+ log .debug ("Raising connection error" )
1374
1401
raise APIConnectionError (request = request ) from err
1375
1402
1376
1403
log .debug (
@@ -1380,6 +1407,8 @@ async def _request(
1380
1407
try :
1381
1408
response .raise_for_status ()
1382
1409
except httpx .HTTPStatusError as err : # thrown on 4xx and 5xx status code
1410
+ log .debug ("Encountered httpx.HTTPStatusError" , exc_info = True )
1411
+
1383
1412
if retries > 0 and self ._should_retry (err .response ):
1384
1413
await err .response .aclose ()
1385
1414
return await self ._retry_request (
@@ -1396,6 +1425,7 @@ async def _request(
1396
1425
if not err .response .is_closed :
1397
1426
await err .response .aread ()
1398
1427
1428
+ log .debug ("Re-raising status error" )
1399
1429
raise self ._make_status_error_from_response (err .response ) from None
1400
1430
1401
1431
return self ._process_response (
@@ -1417,6 +1447,11 @@ async def _retry_request(
1417
1447
stream_cls : type [_AsyncStreamT ] | None ,
1418
1448
) -> ResponseT | _AsyncStreamT :
1419
1449
remaining = remaining_retries - 1
1450
+ if remaining == 1 :
1451
+ log .debug ("1 retry left" )
1452
+ else :
1453
+ log .debug ("%i retries left" , remaining )
1454
+
1420
1455
timeout = self ._calculate_retry_timeout (remaining , options , response_headers )
1421
1456
log .info ("Retrying request to %s in %f seconds" , options .url , timeout )
1422
1457
0 commit comments