Parametrable error names

This commit is contained in:
Gregoo 2025-01-29 22:44:08 +01:00
parent 3893f2aa19
commit aed7a520bd
2 changed files with 63 additions and 19 deletions

View File

@ -1,7 +1,7 @@
import logging import logging
from sqlite3 import Error, OperationalError from sqlite3 import Error, OperationalError
import traceback import traceback
from typing import Tuple from typing import Any, Tuple
from flask import jsonify, redirect, request, render_template, url_for from flask import jsonify, redirect, request, render_template, url_for
from werkzeug.wrappers.response import Response from werkzeug.wrappers.response import Response
@ -33,12 +33,16 @@ def error(
*, *,
json: bool = False, json: bool = False,
post_redirect: str | None = None, post_redirect: str | None = None,
error_name: str = 'error',
**kwargs, **kwargs,
) -> str | Tuple[str | Response, int] | Response: ) -> str | Tuple[str | Response, int] | Response:
# Back to the index if no error (not sure if this can happen) # Back to the index if no error (not sure if this can happen)
if error is None: if error is None:
if json: if json:
return jsonify({'error': 'error() called without an error'}) return json_error(
'error() called without an error',
error_name=error_name
)
else: else:
return redirect(url_for('index.index')) return redirect(url_for('index.index'))
@ -56,6 +60,7 @@ def error(
error, error,
json=json, json=json,
post_redirect=post_redirect, post_redirect=post_redirect,
error_name=error_name,
**kwargs **kwargs
) )
@ -71,13 +76,17 @@ def error(
logger.debug(cleaned_exception(error)) logger.debug(cleaned_exception(error))
if json: if json:
return jsonify({'error': str(error)}) return json_error(
str(error),
error_name=error_name
)
elif post_redirect is not None: elif post_redirect is not None:
return redirect(url_for( return redirect_error(
post_redirect, post_redirect,
error=str(error), error=str(error),
error_name=error_name,
**kwargs, **kwargs,
)) )
else: else:
return render_template( return render_template(
'error.html', 'error.html',
@ -96,18 +105,20 @@ def error(
line = None line = None
if json: if json:
return jsonify({ return json_error(
'error': 'Exception: {error}'.format(error=str(error)), 'Exception: {error}'.format(error=str(error)),
'name': type(error).__name__, error_name=error_name,
'line': line, name=type(error).__name__,
'file': file, line=line,
}), 500 file=file
), 500
elif post_redirect is not None: elif post_redirect is not None:
return redirect(url_for( return redirect_error(
post_redirect, post_redirect,
error=str(error), error=str(error),
error_name=error_name,
**kwargs, **kwargs,
)) )
else: else:
return render_template( return render_template(
'exception.html', 'exception.html',
@ -125,6 +136,7 @@ def error_404(
*, *,
json: bool = False, json: bool = False,
post_redirect: str | None = None, post_redirect: str | None = None,
error_name: str = 'error',
**kwargs, **kwargs,
) -> Tuple[str | Response, int]: ) -> Tuple[str | Response, int]:
# Warning # Warning
@ -134,14 +146,44 @@ def error_404(
)) ))
if json: if json:
return jsonify({ return json_error(
'error': 'Not found: {error}'.format(error=str(error)) 'Not found: {error}'.format(error=str(error)),
}), 404 error_name=error_name
), 404
elif post_redirect is not None: elif post_redirect is not None:
return redirect(url_for( return redirect_error(
post_redirect, post_redirect,
error=str(error), error=str(error),
**kwargs error_name=error_name,
)), 404 **kwargs,
), 404
else: else:
return render_template('404.html', error=str(error)), 404 return render_template('404.html', error=str(error)), 404
# JSON error with parametric error name
def json_error(
error: str,
error_name: str = 'error',
**parameters: Any
) -> Response:
parameters[error_name] = error
return jsonify(parameters)
# Redirect error with parametric error name
def redirect_error(
url: str,
error: str,
error_name: str = 'error',
**kwargs
) -> Response:
error_parameter: dict[str, str] = {}
error_parameter[error_name] = str(error)
return redirect(url_for(
url,
**error_parameter,
**kwargs
))

View File

@ -28,6 +28,7 @@ def exception_handler(
*, *,
json: bool = False, json: bool = False,
post_redirect: str | None = None, post_redirect: str | None = None,
error_name: str = 'error',
**superkwargs, **superkwargs,
) -> Callable[[ViewCallable], ViewCallable]: ) -> Callable[[ViewCallable], ViewCallable]:
def outer(function: ViewCallable, /) -> ViewCallable: def outer(function: ViewCallable, /) -> ViewCallable:
@ -42,6 +43,7 @@ def exception_handler(
file, file,
json=json, json=json,
post_redirect=post_redirect, post_redirect=post_redirect,
error_name=error_name,
**kwargs, **kwargs,
**superkwargs, **superkwargs,
) )