Parametrable error names
This commit is contained in:
parent
40142b7e62
commit
8fdeb47c80
@ -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
|
||||||
|
))
|
||||||
|
@ -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,
|
||||||
)
|
)
|
||||||
|
Loading…
Reference in New Issue
Block a user