Handle HTTPError from API and routing errors from flask.

Removed catching the HTTPError where applicable.
This commit is contained in:
Rebecca Law
2016-03-10 14:56:47 +00:00
parent f6d98b63ea
commit 735ca07dee
5 changed files with 28 additions and 14 deletions

View File

@@ -7,10 +7,11 @@ from flask._compat import string_types
from flask_login import LoginManager from flask_login import LoginManager
from flask_wtf import CsrfProtect from flask_wtf import CsrfProtect
from notifications_python_client import HTTPError from notifications_python_client import HTTPError
from werkzeug.exceptions import abort
from pygments import highlight from pygments import highlight
from pygments.lexers import JavascriptLexer from pygments.lexers import JavascriptLexer
from pygments.formatters import HtmlFormatter from pygments.formatters import HtmlFormatter
from werkzeug.exceptions import abort
from app.notify_client.api_client import NotificationsAdminAPIClient from app.notify_client.api_client import NotificationsAdminAPIClient
from app.notify_client.api_key_api_client import ApiKeyApiClient from app.notify_client.api_key_api_client import ApiKeyApiClient
from app.notify_client.user_api_client import UserApiClient from app.notify_client.user_api_client import UserApiClient
@@ -177,10 +178,33 @@ def useful_headers_after_request(response):
def register_errorhandlers(application): def register_errorhandlers(application):
def _error_response(error_code):
resp = make_response(render_template("error/{0}.html".format(error_code)), error_code)
return useful_headers_after_request(resp)
@application.errorhandler(HTTPError) @application.errorhandler(HTTPError)
def render_http_error(error): def render_http_error(error):
error_code = getattr(error, 'code', 500) error_code = getattr(error, 'code', 500)
if error_code not in [401, 404, 403, 500]: if error_code not in [401, 404, 403, 500]:
error_code = 500 error_code = 500
resp = make_response(render_template("error/{0}.html".format(error_code)), error_code) return _error_response(error_code)
return useful_headers_after_request(resp)
@application.errorhandler(400)
def handle_bad_request(error):
return _error_response(404)
@application.errorhandler(404)
def handle_not_found(error):
return _error_response(404)
@application.errorhandler(403)
def handle_not_authorized(error):
return _error_response(403)
@application.errorhandler(401)
def handle_no_permissions(error):
return _error_response(401)
@application.errorhandler(Exception)
def handle_bad_request(error):
return _error_response(500)

View File

@@ -19,10 +19,7 @@ def get_service_templates(service_id):
def get_service_template_or_404(service_id, template_id): def get_service_template_or_404(service_id, template_id):
try: return notifications_api_client.get_service_template(service_id, template_id)
return notifications_api_client.get_service_template(service_id, template_id)
except HTTPError as e:
abort(e.status_code)
def delete_service_template(service_id, template_id): def delete_service_template(service_id, template_id):

View File

@@ -1,11 +1,6 @@
from datetime import datetime
from notifications_python_client import HTTPError from notifications_python_client import HTTPError
from sqlalchemy.orm import load_only
from app import login_manager from app import login_manager
from app.main.encryption import hashpw
from app import user_api_client from app import user_api_client
# #

View File

@@ -9,7 +9,6 @@ from flask_login import login_required
from app.main import main from app.main import main
from app.main.dao.services_dao import get_service_by_id from app.main.dao.services_dao import get_service_by_id
from app.main.dao import templates_dao from app.main.dao import templates_dao
from notifications_python_client.errors import HTTPError
from app import job_api_client from app import job_api_client

View File

@@ -8,7 +8,6 @@ from flask import (
jsonify jsonify
) )
from flask_login import login_required from flask_login import login_required
from notifications_python_client.errors import HTTPError
from utils.template import Template from utils.template import Template
from app import job_api_client, notification_api_client from app import job_api_client, notification_api_client