2023-08-16 15:14:11 +00:00
|
|
|
import os
|
|
|
|
|
|
|
|
import flask
|
|
|
|
|
|
|
|
try:
|
|
|
|
import flask_themer
|
2023-09-01 08:46:56 +00:00
|
|
|
except ImportError:
|
2023-08-16 15:14:11 +00:00
|
|
|
flask_themer = None
|
|
|
|
|
|
|
|
|
|
|
|
if flask_themer:
|
|
|
|
render_template = flask_themer.render_template
|
|
|
|
|
|
|
|
def setup_themer(app):
|
2023-12-18 17:06:03 +00:00
|
|
|
theme_config = app.config["CANAILLE"]["THEME"]
|
2023-08-16 15:14:11 +00:00
|
|
|
additional_themes_dir = (
|
2023-12-18 17:06:03 +00:00
|
|
|
os.path.abspath(os.path.dirname(theme_config))
|
|
|
|
if theme_config and os.path.exists(theme_config)
|
2023-08-16 15:14:11 +00:00
|
|
|
else None
|
|
|
|
)
|
|
|
|
themer = flask_themer.Themer(
|
|
|
|
app,
|
|
|
|
loaders=[flask_themer.FileSystemThemeLoader(additional_themes_dir)]
|
|
|
|
if additional_themes_dir
|
|
|
|
else None,
|
|
|
|
)
|
|
|
|
|
|
|
|
@themer.current_theme_loader
|
|
|
|
def get_current_theme():
|
2023-12-18 17:06:03 +00:00
|
|
|
# if config['THEME'] may be a theme name or a path
|
|
|
|
return app.config["CANAILLE"]["THEME"].split("/")[-1]
|
2023-08-16 15:14:11 +00:00
|
|
|
|
2023-12-15 10:58:25 +00:00
|
|
|
@app.errorhandler(400)
|
|
|
|
def bad_request(error):
|
|
|
|
return render_template("error.html", description=error, error_code=400), 400
|
|
|
|
|
|
|
|
@app.errorhandler(403)
|
|
|
|
def unauthorized(error):
|
|
|
|
return render_template("error.html", description=error, error_code=403), 403
|
|
|
|
|
|
|
|
@app.errorhandler(404)
|
|
|
|
def page_not_found(error):
|
2024-12-11 22:19:11 +00:00
|
|
|
from canaille.app.flask import redirect_to_bp_handlers
|
2024-11-25 16:47:31 +00:00
|
|
|
|
2024-12-11 22:19:11 +00:00
|
|
|
return redirect_to_bp_handlers(app, error) or render_template(
|
|
|
|
"error.html", description=error, error_code=404
|
|
|
|
), 404
|
2023-12-15 10:58:25 +00:00
|
|
|
|
|
|
|
@app.errorhandler(500)
|
|
|
|
def server_error(error): # pragma: no cover
|
|
|
|
return render_template("error.html", description=error, error_code=500), 500
|
|
|
|
|
2023-08-16 15:14:11 +00:00
|
|
|
else: # pragma: no cover
|
|
|
|
render_template = flask.render_template
|
|
|
|
|
|
|
|
def setup_themer(app):
|
2024-12-11 22:19:11 +00:00
|
|
|
@app.errorhandler(404)
|
|
|
|
def page_not_found(error):
|
|
|
|
from canaille.app.flask import redirect_to_bp_handlers
|
|
|
|
|
|
|
|
if not redirect_to_bp_handlers(app, error):
|
|
|
|
raise error
|