From 2dc630e877bd165e0a30036e05d3705cb8086b73 Mon Sep 17 00:00:00 2001 From: Patrick Jentsch <p.jentsch@uni-bielefeld.de> Date: Mon, 12 Oct 2020 13:26:35 +0200 Subject: [PATCH] Create extra package for errors --- web/app/__init__.py | 2 ++ web/app/errors/__init__.py | 5 ++++ web/app/errors/handlers.py | 42 ++++++++++++++++++++++++++++ web/app/main/__init__.py | 2 +- web/app/main/errors.py | 32 --------------------- web/app/templates/403.html.j2 | 7 ----- web/app/templates/404.html.j2 | 7 ----- web/app/templates/500.html.j2 | 7 ----- web/app/templates/errors/403.html.j2 | 19 +++++++++++++ web/app/templates/errors/404.html.j2 | 19 +++++++++++++ web/app/templates/errors/413.html.j2 | 19 +++++++++++++ web/app/templates/errors/500.html.j2 | 19 +++++++++++++ 12 files changed, 126 insertions(+), 54 deletions(-) create mode 100644 web/app/errors/__init__.py create mode 100644 web/app/errors/handlers.py delete mode 100644 web/app/main/errors.py delete mode 100644 web/app/templates/403.html.j2 delete mode 100644 web/app/templates/404.html.j2 delete mode 100644 web/app/templates/500.html.j2 create mode 100644 web/app/templates/errors/403.html.j2 create mode 100644 web/app/templates/errors/404.html.j2 create mode 100644 web/app/templates/errors/413.html.j2 create mode 100644 web/app/templates/errors/500.html.j2 diff --git a/web/app/__init__.py b/web/app/__init__.py index c4e094aa..64674f34 100644 --- a/web/app/__init__.py +++ b/web/app/__init__.py @@ -38,6 +38,8 @@ def create_app(): app.register_blueprint(content_blueprint, url_prefix='/content') from .corpora import corpora as corpora_blueprint app.register_blueprint(corpora_blueprint, url_prefix='/corpora') + from .errors import errors as errors_blueprint + app.register_blueprint(errors_blueprint) from .jobs import jobs as jobs_blueprint app.register_blueprint(jobs_blueprint, url_prefix='/jobs') from .main import main as main_blueprint diff --git a/web/app/errors/__init__.py b/web/app/errors/__init__.py new file mode 100644 index 00000000..3087208b --- /dev/null +++ b/web/app/errors/__init__.py @@ -0,0 +1,5 @@ +from flask import Blueprint + + +errors = Blueprint('errors', __name__) +from app.errors import handlers diff --git a/web/app/errors/handlers.py b/web/app/errors/handlers.py new file mode 100644 index 00000000..c568fd8c --- /dev/null +++ b/web/app/errors/handlers.py @@ -0,0 +1,42 @@ +from flask import render_template, request, jsonify +from . import errors + + +@errors.app_errorhandler(403) +def forbidden(e): + if (request.accept_mimetypes.accept_json + and not request.accept_mimetypes.accept_html): + response = jsonify({'error': 'forbidden'}) + response.status_code = 403 + return response + return render_template('errors/403.html.j2', title='Forbidden'), 403 + + +@errors.app_errorhandler(404) +def not_found(e): + if (request.accept_mimetypes.accept_json + and not request.accept_mimetypes.accept_html): + response = jsonify({'error': 'not found'}) + response.status_code = 404 + return response + return render_template('errors/404.html.j2', title='Not Found'), 404 + + +@errors.app_errorhandler(413) +def payload_too_large(e): + if (request.accept_mimetypes.accept_json + and not request.accept_mimetypes.accept_html): + response = jsonify({'error': 'payload too large'}) + response.status_code = 413 + return response + return render_template('errors/413.html.j2', title='Payload Too Large'), 413 + + +@errors.app_errorhandler(500) +def internal_server_error(e): + if (request.accept_mimetypes.accept_json + and not request.accept_mimetypes.accept_html): + response = jsonify({'error': 'internal server error'}) + response.status_code = 500 + return response + return render_template('errors/500.html.j2', title='Internal Server Error'), 500 diff --git a/web/app/main/__init__.py b/web/app/main/__init__.py index e58f63b5..74430247 100644 --- a/web/app/main/__init__.py +++ b/web/app/main/__init__.py @@ -2,4 +2,4 @@ from flask import Blueprint main = Blueprint('main', __name__) -from . import errors, views # noqa +from . import views # noqa diff --git a/web/app/main/errors.py b/web/app/main/errors.py deleted file mode 100644 index 625555be..00000000 --- a/web/app/main/errors.py +++ /dev/null @@ -1,32 +0,0 @@ -from flask import render_template, request, jsonify -from . import main - - -@main.app_errorhandler(403) -def forbidden(e): - if request.accept_mimetypes.accept_json and \ - not request.accept_mimetypes.accept_html: - response = jsonify({'error': 'forbidden'}) - response.status_code = 403 - return response - return render_template('403.html.j2', title='Forbidden'), 403 - - -@main.app_errorhandler(404) -def page_not_found(e): - if request.accept_mimetypes.accept_json and \ - not request.accept_mimetypes.accept_html: - response = jsonify({'error': 'not found'}) - response.status_code = 404 - return response - return render_template('404.html.j2', title='Not Found'), 404 - - -@main.app_errorhandler(500) -def internal_server_error(e): - if request.accept_mimetypes.accept_json and \ - not request.accept_mimetypes.accept_html: - response = jsonify({'error': 'internal server error'}) - response.status_code = 500 - return response - return render_template('500.html.j2', title='Internal Server Error'), 500 diff --git a/web/app/templates/403.html.j2 b/web/app/templates/403.html.j2 deleted file mode 100644 index eba64fb3..00000000 --- a/web/app/templates/403.html.j2 +++ /dev/null @@ -1,7 +0,0 @@ -{% extends "nopaque.html.j2" %} - -{% block page_content %} -<div class="col s12"> - <p>This site is forbidden for you.</p> -</div> -{% endblock %} diff --git a/web/app/templates/404.html.j2 b/web/app/templates/404.html.j2 deleted file mode 100644 index b0fdc4fb..00000000 --- a/web/app/templates/404.html.j2 +++ /dev/null @@ -1,7 +0,0 @@ -{% extends "nopaque.html.j2" %} - -{% block page_content %} -<div class="col s12"> - <p>Site has not been found.</p> -</div> -{% endblock %} diff --git a/web/app/templates/500.html.j2 b/web/app/templates/500.html.j2 deleted file mode 100644 index 4c9c4a33..00000000 --- a/web/app/templates/500.html.j2 +++ /dev/null @@ -1,7 +0,0 @@ -{% extends "nopaque.html.j2" %} - -{% block page_content %} -<div class="col s12"> - <p>Internal Server Error. We are Sorry!</p> -</div> -{% endblock %} diff --git a/web/app/templates/errors/403.html.j2 b/web/app/templates/errors/403.html.j2 new file mode 100644 index 00000000..7a4eca4e --- /dev/null +++ b/web/app/templates/errors/403.html.j2 @@ -0,0 +1,19 @@ +{% extends 'nopaque.html.j2' %} + +{% block page_content %} +<div class="container"> + <h1>{{ title }}</h1> + <p class="light">{{ request.path }}</p> + <p>Alternatively, you can visit the <a href="{{ url_for('main.index') }}">Main Page</a> or read <a class="modal-trigger" href="#more-information-modal">more information</a> about this type of error.</p> +</div> + +<div class="modal" id="more-information-modal"> + <div class="modal-content"> + <h4>{{ title }}</h4> + <p>The request contained valid data and was understood by the server, but the server is refusing action. This may be due to the user not having the necessary permissions for a resource or needing an account of some sort, or attempting a prohibited action (e.g. creating a duplicate record where only one is allowed). This code is also typically used if the request provided authentication by answering the WWW-Authenticate header field challenge, but the server did not accept that authentication. The request should not be repeated.</p> + </div> + <div class="modal-footer"> + <a href="#!" class="btn-flat modal-close waves-effect waves-green">Close</a> + </div> +</div> +{% endblock page_content %} diff --git a/web/app/templates/errors/404.html.j2 b/web/app/templates/errors/404.html.j2 new file mode 100644 index 00000000..a6bf7492 --- /dev/null +++ b/web/app/templates/errors/404.html.j2 @@ -0,0 +1,19 @@ +{% extends 'nopaque.html.j2' %} + +{% block page_content %} +<div class="container"> + <h1>{{ title }}</h1> + <p class="light">{{ request.path }}</p> + <p>Alternatively, you can visit the <a href="{{ url_for('main.index') }}">Main Page</a> or read <a class="modal-trigger" href="#more-information-modal">more information</a> about this type of error.</p> +</div> + +<div class="modal" id="more-information-modal"> + <div class="modal-content"> + <h4>{{ title }}</h4> + <p>The requested resource could not be found but may be available in the future. Subsequent requests by the client are permissible.</p> + </div> + <div class="modal-footer"> + <a href="#!" class="btn-flat modal-close waves-effect waves-green">Close</a> + </div> +</div> +{% endblock page_content %} diff --git a/web/app/templates/errors/413.html.j2 b/web/app/templates/errors/413.html.j2 new file mode 100644 index 00000000..1be86042 --- /dev/null +++ b/web/app/templates/errors/413.html.j2 @@ -0,0 +1,19 @@ +{% extends 'nopaque.html.j2' %} + +{% block page_content %} +<div class="container"> + <h1>{{ title }}</h1> + <p class="light">{{ request.path }}</p> + <p>Alternatively, you can visit the <a href="{{ url_for('main.index') }}">Main Page</a> or read <a class="modal-trigger" href="#more-information-modal">more information</a> about this type of error.</p> +</div> + +<div class="modal" id="more-information-modal"> + <div class="modal-content"> + <h4>{{ title }}</h4> + <p>The request is larger than the server is willing or able to process. Previously called "Request Entity Too Large".</p> + </div> + <div class="modal-footer"> + <a href="#!" class="btn-flat modal-close waves-effect waves-green">Close</a> + </div> +</div> +{% endblock page_content %} diff --git a/web/app/templates/errors/500.html.j2 b/web/app/templates/errors/500.html.j2 new file mode 100644 index 00000000..1faaa42d --- /dev/null +++ b/web/app/templates/errors/500.html.j2 @@ -0,0 +1,19 @@ +{% extends 'nopaque.html.j2' %} + +{% block page_content %} +<div class="container"> + <h1>{{ title }}</h1> + <p class="light">{{ request.path }}</p> + <p>Alternatively, you can visit the <a href="{{ url_for('main.index') }}">Main Page</a> or read <a class="modal-trigger" href="#more-information-modal">more information</a> about this type of error.</p> +</div> + +<div class="modal" id="more-information-modal"> + <div class="modal-content"> + <h4>{{ title }}</h4> + <p>A generic error message, given when an unexpected condition was encountered and no more specific message is suitable.</p> + </div> + <div class="modal-footer"> + <a href="#!" class="btn-flat modal-close waves-effect waves-green">Close</a> + </div> +</div> +{% endblock page_content %} -- GitLab