@@ -73,8 +73,9 @@ def retry(func):
7373
7474 """
7575 def retried_func (* args , ** kwargs ):
76- max_tries = 3
76+ max_tries = 10
7777 tries = 0
78+ total_sleep_seconds = 0
7879 while True :
7980 try :
8081 resp = func (* args , ** kwargs )
@@ -88,21 +89,34 @@ def retried_func(*args, **kwargs):
8889 raise exc
8990
9091 if resp .status_code != 200 and tries < max_tries :
91- logger .warning ("retrying request; current status code: {}"
92- .format (resp .status_code ))
92+
9393 tries += 1
94+
95+ logger .error (f"HTTP Error code: { resp .status_code } : { resp .text } " )
96+ logger .error (f"Request payload: { kwargs ['rule_payload' ]} " )
97+
98+ if resp .status_code == 429 :
99+ logger .warning ("Rate limit hit... Will retry..." )
100+ #print("Rate limit hit... Will retry...")
101+ sleep_seconds = min (((tries * 2 ) ** 2 ), 900 - total_sleep_seconds )
102+ total_sleep_seconds = total_sleep_seconds + sleep_seconds
103+
104+ elif resp .status_code >= 500 :
105+ logger .warning ("Server-side error... Will retry..." )
106+ #print("Server-side error... Will retry...")
107+ sleep_seconds = 30
108+ else :
109+ #Other errors are a "one and done", no use in retrying error...
110+ raise requests .exceptions .HTTPError
111+
94112 # mini exponential backoff here.
95- time .sleep (tries ** 2 )
113+ logger .warning (f"Will retry in { sleep_seconds } seconds..." )
114+ #print(f"Will retry in {sleep_seconds} seconds...")
115+ time .sleep (sleep_seconds )
96116 continue
97117
98118 break
99119
100- if resp .status_code != 200 :
101- error_message = resp .json ()["error" ]["message" ]
102- logger .error ("HTTP Error code: {}: {}" .format (resp .status_code , error_message ))
103- logger .error ("Rule payload: {}" .format (kwargs ["rule_payload" ]))
104- raise requests .exceptions .HTTPError
105-
106120 return resp
107121
108122 return retried_func
0 commit comments