Automatic Retries¶
It is possible to configure a retry in case of request failure.
The number of retries is set to 0 by default.
You can set the number of retries for all requests trough the object’s attribute
max_retries
or you can pass the number as an optional parameter
max_retries
. When calling an HTTP method.
The value passed trough method call has precedence.
The parameter is the number of retries on failure, not a maximum number of attempts.
E.g. if retry is set to 2 and there is no success on any attempt,
the total number of requests will be 3: nominal request and 2 retries on
failure.
Important note: by default, the request is not retried in case of client error,
that is if the server responded with HTTP 4xx, not including HTTP 408 Request Timeout.
This behavior is configurable using retriable_client_errors
constructor parameter,
where custom list of HTTP codes can be provided to enable automatic retry.
If sleep_before_repeat
parameter is passed,
the method waits for that amount of seconds before retrying.
Examples¶
from request_session import RequestSession
import structlog
logger = structlog.get_logger()
client = RequestSession(
host="http://httpbin.org/", # to showcase the usage, we're going to call httpbin
prefix="demo", # name of the app
logger=logger, # log information using structlog
)
client.get(
"/status/500", # all requests should fail with 500
sleep_before_repeat=1, # wait 1 second before retrying
max_retries=2, # if failed, retry twice
request_category="httpbin") # use "httpbin" when logging
This setup generates the following logs:
2019-11-15 08:52.25 demo.httpbin.failed attempt=1 description=500 Server Error: INTERNAL SERVER ERROR for url: http://httpbin.org/status/500 error_type=http_error response_text= status=error status_code=500
2019-11-15 08:52.26 demo.httpbin.failed attempt=2 description=500 Server Error: INTERNAL SERVER ERROR for url: http://httpbin.org/status/500 error_type=http_error response_text= status=error status_code=500
2019-11-15 08:52.27 demo.httpbin.failed attempt=3 description=500 Server Error: INTERNAL SERVER ERROR for url: http://httpbin.org/status/500 error_type=http_error response_text= status=error status_code=500
From the logs, we can see that 3 requests have been made in total (initial one and 2 retries), from which all of them have failed.