From 1fe2f3afd7bc68a2ea494bbe2173383c5143944a Mon Sep 17 00:00:00 2001 From: lsocha Date: Thu, 26 Jan 2023 12:09:22 +0100 Subject: [PATCH] fix: Retry `Connection broken` and `Connection reset` requests errors Closes: SDK-2904 --- boxsdk/session/session.py | 4 +++- test/unit/session/test_session.py | 10 ++++++++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/boxsdk/session/session.py b/boxsdk/session/session.py index 3d6e989d7..f9012aaab 100644 --- a/boxsdk/session/session.py +++ b/boxsdk/session/session.py @@ -337,7 +337,9 @@ def _prepare_and_send_request( network_response = None if 'EOF occurred in violation of protocol' in str(request_exc): reauthentication_needed = True - elif 'Connection aborted' in str(request_exc): + elif any(text in str(request_exc) for text in [ + 'Connection aborted', 'Connection broken', 'Connection reset' + ]): reauthentication_needed = False else: raise diff --git a/test/unit/session/test_session.py b/test/unit/session/test_session.py index f05eecf62..b6b24412f 100644 --- a/test/unit/session/test_session.py +++ b/test/unit/session/test_session.py @@ -222,8 +222,14 @@ def test_box_session_raises_for_failed_response(box_session, mock_network_layer, box_session.get(url=test_url) -def test_box_session_retries_connection_aborted_exception(box_session, mock_network_layer, generic_successful_request_response, test_url): - mock_network_layer.request.side_effect = [RequestsConnectionError('Connection aborted'), generic_successful_request_response] +@pytest.mark.parametrize('exc_message', [ + 'Connection aborted', + "Connection broken: ConnectionResetError(54, 'Connection reset by peer')" +]) +def test_box_session_retries_connection_aborted_exception( + box_session, mock_network_layer, generic_successful_request_response, test_url, exc_message +): + mock_network_layer.request.side_effect = [RequestsConnectionError(exc_message), generic_successful_request_response] mock_network_layer.retry_after.side_effect = lambda delay, request, *args, **kwargs: request(*args, **kwargs) box_response = box_session.get(url=test_url)