Advertisement
kopyl

Untitled

Mar 8th, 2021
196
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.19 KB | None | 0 0
  1. def retry_request_till_success(
  2.     request: requests.models.Request
  3. ) -> requests.models.Response:
  4.  
  5.     def wrapper(*args, **kwargs):
  6.         retry_time_count = 1
  7.         while True:
  8.             retry_in_seconds = define_retry_delay_seconds(retry_time_count)
  9.             try:
  10.                 if ( response := request(*args, **kwargs) ) == None:  # doc.id#13
  11.                     p("There is no request to retry")
  12.                     break
  13.                 while True:
  14.                     retry_in_seconds = define_retry_delay_seconds(
  15.                         retry_time_count
  16.                     )
  17.                     if response.status_code == 200:
  18.                         break
  19.                     else:
  20.                         if (
  21.                             response := request(*args, **kwargs)
  22.                         ).status_code != 200:
  23.                             log_and_send_message_to_telegram(
  24.                                 f"Request in {request.__name__} failed. "
  25.                                 f"Status_code – {response.status_code} "
  26.                                 f"Will retry again in {retry_in_seconds} seconds"
  27.                             )
  28.                             time.sleep(retry_in_seconds)
  29.                             retry_time_count += 1
  30.                         else:
  31.                             break
  32.                 return response
  33.             except (
  34.                 requests.ConnectTimeout,
  35.                 requests.exceptions.ReadTimeout
  36.             ) as e:
  37.                 error = get_caught_error()
  38.                 log_and_send_message_to_telegram(
  39.                     f"Request in {request.__name__} failed. "
  40.                     f"Timed out with error {error}"
  41.                     f"Will retry again in {retry_in_seconds} seconds"
  42.                 )
  43.                 time.sleep(retry_in_seconds)
  44.                 retry_time_count += 1
  45.             except requests.exceptions.ConnectionError as e:
  46.                 p(
  47.                     f"Request in {request.__name__} failed. "
  48.                     "No connection to internet... "
  49.                     "Will retry again in 1 second"
  50.                 )
  51.                 time.sleep(1)
  52.     return wrapper
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement