From 5d8d3b3e69ae5a41a082dd076cad81fd50c8269b Mon Sep 17 00:00:00 2001 From: Forrest Collman Date: Sun, 13 Aug 2023 16:12:37 -0700 Subject: [PATCH] adding error handling --- annotationengine/api.py | 38 +++++++++++++++++++++++++++++++++++--- annotationengine/views.py | 1 + 2 files changed, 36 insertions(+), 3 deletions(-) diff --git a/annotationengine/api.py b/annotationengine/api.py index fead24d..58a7d3e 100644 --- a/annotationengine/api.py +++ b/annotationengine/api.py @@ -10,13 +10,13 @@ from flask_accepts import accepts from flask_restx import Namespace, Resource, reqparse, inputs from middle_auth_client import ( - auth_requires_admin, - auth_requires_permission, - users_share_common_group, + auth_requires_permission ) from marshmallow import ValidationError from caveclient.materializationengine import MaterializationClient from caveclient.auth import AuthClient +import werkzeug +import traceback from annotationengine.aligned_volume import ( get_aligned_volumes, @@ -51,6 +51,38 @@ ) +@api_bp.errorhandler(Exception) +def unhandled_exception(e): + status_code = 500 + user_ip = str(request.remote_addr) + tb = traceback.format_exception(etype=type(e), value=e, tb=e.__traceback__) + + current_app.logger.error( + { + "message": str(e), + "user_id": user_ip, + "user_ip": user_ip, + "request_url": request.url, + "request_data": request.data, + "response_code": status_code, + "traceback": tb, + } + ) + + resp = { + "code": status_code, + "message": str(e), + "traceback": tb, + } + + return resp, status_code + + +@api_bp.errorhandler(werkzeug.exceptions.BadRequest) +def bad_request_exception(e): + raise e + + @api_bp.errorhandler def handle_invalid_usage(error): return {"message": str(error)}, getattr(error, "code", 500) diff --git a/annotationengine/views.py b/annotationengine/views.py index 4f8a29b..8c657f7 100644 --- a/annotationengine/views.py +++ b/annotationengine/views.py @@ -130,4 +130,5 @@ def table_view(aligned_volume_name, table_name): table_size=table_size, df_table=top15_df.to_html(escape=False), table_description=md["description"], + version=__version__, )