From b7c463620fcc4a2cb62ae1444ffdb4849fa14efb Mon Sep 17 00:00:00 2001 From: mprahl Date: Dec 08 2020 19:45:23 +0000 Subject: Return a JSON error message when the Koji connection times out requests.ConnectionError was transformed to a JSON error but not the plain ConnectionError from the standard library. --- diff --git a/greenwave/app_factory.py b/greenwave/app_factory.py index 6ca4e75..ece6206 100644 --- a/greenwave/app_factory.py +++ b/greenwave/app_factory.py @@ -10,7 +10,7 @@ from greenwave.policies import load_policies from greenwave.subjects.subject_type import load_subject_types from dogpile.cache import make_region -from requests import ConnectionError, Timeout +import requests from werkzeug.exceptions import default_exceptions log = logging.getLogger(__name__) @@ -45,7 +45,8 @@ def create_app(config_obj=None): for code in default_exceptions.keys(): app.register_error_handler(code, json_error) app.register_error_handler(ConnectionError, json_error) - app.register_error_handler(Timeout, json_error) + app.register_error_handler(requests.ConnectionError, json_error) + app.register_error_handler(requests.Timeout, json_error) # register blueprints app.register_blueprint(api, url_prefix="/api/v1.0") diff --git a/greenwave/tests/test_utils.py b/greenwave/tests/test_utils.py index d8733b0..5491297 100644 --- a/greenwave/tests/test_utils.py +++ b/greenwave/tests/test_utils.py @@ -4,8 +4,7 @@ import json import os import pytest - -from requests import ConnectionError, ConnectTimeout, Timeout +import requests from werkzeug.exceptions import InternalServerError import greenwave.app_factory @@ -19,8 +18,9 @@ SETTINGS_BASE_NAME = os.path.join(SETTINGS_DIR, 'settings') @pytest.mark.parametrize(('error, expected_status_code,' 'expected_error_message_part'), [ (ConnectionError('ERROR'), 502, 'ERROR'), - (ConnectTimeout('TIMEOUT'), 502, 'TIMEOUT'), - (Timeout('TIMEOUT'), 504, 'TIMEOUT'), + (requests.ConnectionError('ERROR'), 502, 'ERROR'), + (requests.ConnectTimeout('TIMEOUT'), 502, 'TIMEOUT'), + (requests.Timeout('TIMEOUT'), 504, 'TIMEOUT'), (InternalServerError(), 500, 'The server encountered an internal error') ]) def test_json_connection_error(error, expected_status_code, diff --git a/greenwave/utils.py b/greenwave/utils.py index 240c7d7..ab48e6e 100644 --- a/greenwave/utils.py +++ b/greenwave/utils.py @@ -8,7 +8,7 @@ import datetime from flask import jsonify, current_app, request from flask.config import Config -from requests import ConnectionError, Timeout +import requests from werkzeug.exceptions import HTTPException log = logging.getLogger(__name__) @@ -26,11 +26,11 @@ def json_error(error): if isinstance(error, HTTPException): msg = error.description status_code = error.code - elif isinstance(error, ConnectionError): + elif isinstance(error, (ConnectionError, requests.ConnectionError)): current_app.logger.exception('Connection error: {}'.format(error)) msg = 'Error connecting to upstream server: {}'.format(error) status_code = 502 - elif isinstance(error, Timeout): + elif isinstance(error, requests.Timeout): current_app.logger.exception('Timeout error: {}'.format(error)) msg = 'Timeout connecting to upstream server: {}'.format(error) status_code = 504