diff --git a/canaille/__init__.py b/canaille/__init__.py index d2ae1307..945d14c7 100644 --- a/canaille/__init__.py +++ b/canaille/__init__.py @@ -2,12 +2,9 @@ import datetime import sys from flask import Flask -from flask import request from flask import session from flask_wtf.csrf import CSRFProtect -from canaille.app.forms import password_strength_calculator - csrf = CSRFProtect() @@ -28,12 +25,6 @@ def setup_sentry(app): # pragma: no cover return sentry_sdk -def setup_jinja(app): - app.jinja_env.filters["len"] = len - app.jinja_env.filters["password_strength"] = password_strength_calculator - app.jinja_env.policies["ext.i18n.trimmed"] = True - - def setup_blueprints(app): import canaille.core.endpoints @@ -53,7 +44,7 @@ def setup_blueprints(app): def setup_flask(app): - from canaille.app.themes import render_template + from canaille.app.templating import render_template csrf.init_app(app) @@ -62,22 +53,6 @@ def setup_flask(app): session.permanent = True app.permanent_session_lifetime = datetime.timedelta(days=365) - @app.context_processor - def global_processor(): - from canaille.app.session import current_user - - return { - "debug": app.debug or app.config.get("TESTING", False), - "logo_url": app.config["CANAILLE"]["LOGO"], - "favicon_url": app.config["CANAILLE"]["FAVICON"] - or app.config["CANAILLE"]["LOGO"], - "website_name": app.config["CANAILLE"]["NAME"], - "user": current_user(), - "menu": True, - "is_boosted": request.headers.get("HX-Boosted", False), - "features": app.features, - } - @app.errorhandler(400) def bad_request(error): return render_template("error.html", description=error, error_code=400), 400 @@ -126,7 +101,8 @@ def create_app( from .app.features import setup_features from .app.i18n import setup_i18n from .app.logging import setup_logging - from .app.themes import setup_themer + from .app.templating import setup_jinja + from .app.templating import setup_themer from .backends import setup_backend app = Flask(__name__) diff --git a/canaille/app/flask.py b/canaille/app/flask.py index 8281bd64..53b965e5 100644 --- a/canaille/app/flask.py +++ b/canaille/app/flask.py @@ -15,7 +15,7 @@ from werkzeug.routing import BaseConverter from canaille.app.i18n import gettext as _ from canaille.app.session import current_user -from canaille.app.themes import render_template +from canaille.app.templating import render_template def user_needed(*args): diff --git a/canaille/app/themes.py b/canaille/app/templating.py similarity index 50% rename from canaille/app/themes.py rename to canaille/app/templating.py index db37483d..3e991206 100644 --- a/canaille/app/themes.py +++ b/canaille/app/templating.py @@ -1,6 +1,7 @@ import os import flask +from flask import request try: import flask_themer @@ -33,3 +34,27 @@ if flask_themer: else: # pragma: no cover render_template = flask.render_template + + +def setup_jinja(app): + from canaille.app.forms import password_strength_calculator + + app.jinja_env.filters["len"] = len + app.jinja_env.filters["password_strength"] = password_strength_calculator + app.jinja_env.policies["ext.i18n.trimmed"] = True + + @app.context_processor + def global_processor(): + from canaille.app.session import current_user + + return { + "debug": app.debug or app.config.get("TESTING", False), + "logo_url": app.config["CANAILLE"]["LOGO"], + "favicon_url": app.config["CANAILLE"]["FAVICON"] + or app.config["CANAILLE"]["LOGO"], + "website_name": app.config["CANAILLE"]["NAME"], + "user": current_user(), + "menu": True, + "is_boosted": request.headers.get("HX-Boosted", False), + "features": app.features, + } diff --git a/canaille/core/endpoints/account.py b/canaille/core/endpoints/account.py index 9576475f..3f42d5e7 100644 --- a/canaille/core/endpoints/account.py +++ b/canaille/core/endpoints/account.py @@ -41,7 +41,7 @@ from canaille.app.i18n import reload_translations from canaille.app.session import current_user from canaille.app.session import login_user from canaille.app.session import logout_user -from canaille.app.themes import render_template +from canaille.app.templating import render_template from canaille.backends import Backend from ..mails import send_confirmation_email diff --git a/canaille/core/endpoints/admin.py b/canaille/core/endpoints/admin.py index a802e248..801156cf 100644 --- a/canaille/core/endpoints/admin.py +++ b/canaille/core/endpoints/admin.py @@ -11,7 +11,7 @@ from canaille.app.flask import user_needed from canaille.app.forms import Form from canaille.app.forms import email_validator from canaille.app.i18n import gettext as _ -from canaille.app.themes import render_template +from canaille.app.templating import render_template from canaille.core.mails import build_hash from canaille.core.mails import send_test_mail diff --git a/canaille/core/endpoints/auth.py b/canaille/core/endpoints/auth.py index efb9d574..e8caac0d 100644 --- a/canaille/core/endpoints/auth.py +++ b/canaille/core/endpoints/auth.py @@ -18,7 +18,7 @@ from canaille.app.i18n import gettext as _ from canaille.app.session import current_user from canaille.app.session import login_user from canaille.app.session import logout_user -from canaille.app.themes import render_template +from canaille.app.templating import render_template from canaille.backends import Backend from canaille.core.endpoints.forms import TwoFactorForm from canaille.core.models import SEND_NEW_OTP_DELAY diff --git a/canaille/core/endpoints/groups.py b/canaille/core/endpoints/groups.py index 939c09db..3b50fb17 100644 --- a/canaille/core/endpoints/groups.py +++ b/canaille/core/endpoints/groups.py @@ -10,7 +10,7 @@ from canaille.app.flask import render_htmx_template from canaille.app.flask import user_needed from canaille.app.forms import TableForm from canaille.app.i18n import gettext as _ -from canaille.app.themes import render_template +from canaille.app.templating import render_template from canaille.backends import Backend from .forms import CreateGroupForm diff --git a/canaille/core/mails.py b/canaille/core/mails.py index 4085491b..a6c3974b 100644 --- a/canaille/core/mails.py +++ b/canaille/core/mails.py @@ -5,7 +5,7 @@ from canaille.app import build_hash from canaille.app.i18n import gettext as _ from canaille.app.mails import logo from canaille.app.mails import send_email -from canaille.app.themes import render_template +from canaille.app.templating import render_template def send_test_mail(email): diff --git a/canaille/core/sms.py b/canaille/core/sms.py index 83d04566..9d2442f3 100644 --- a/canaille/core/sms.py +++ b/canaille/core/sms.py @@ -1,7 +1,7 @@ from flask import current_app from canaille.app.sms import send_sms -from canaille.app.themes import render_template +from canaille.app.templating import render_template def send_one_time_password_sms(phone_number, otp): diff --git a/canaille/oidc/endpoints/authorizations.py b/canaille/oidc/endpoints/authorizations.py index 08a08667..f3267eea 100644 --- a/canaille/oidc/endpoints/authorizations.py +++ b/canaille/oidc/endpoints/authorizations.py @@ -6,7 +6,7 @@ from canaille.app import models from canaille.app.flask import render_htmx_template from canaille.app.flask import user_needed from canaille.app.forms import TableForm -from canaille.app.themes import render_template +from canaille.app.templating import render_template bp = Blueprint("authorizations", __name__, url_prefix="/admin/authorization") diff --git a/canaille/oidc/endpoints/clients.py b/canaille/oidc/endpoints/clients.py index 8b0a9326..aed12ba3 100644 --- a/canaille/oidc/endpoints/clients.py +++ b/canaille/oidc/endpoints/clients.py @@ -14,7 +14,7 @@ from canaille.app.flask import render_htmx_template from canaille.app.flask import user_needed from canaille.app.forms import TableForm from canaille.app.i18n import gettext as _ -from canaille.app.themes import render_template +from canaille.app.templating import render_template from canaille.backends import Backend from .forms import ClientAddForm diff --git a/canaille/oidc/endpoints/consents.py b/canaille/oidc/endpoints/consents.py index 35b0ad4b..5570ff8a 100644 --- a/canaille/oidc/endpoints/consents.py +++ b/canaille/oidc/endpoints/consents.py @@ -11,7 +11,7 @@ from flask import url_for from canaille.app import models from canaille.app.flask import user_needed from canaille.app.i18n import gettext as _ -from canaille.app.themes import render_template +from canaille.app.templating import render_template from canaille.backends import Backend from ..utils import SCOPE_DETAILS diff --git a/canaille/oidc/endpoints/oauth.py b/canaille/oidc/endpoints/oauth.py index 94e1a4da..559e67df 100644 --- a/canaille/oidc/endpoints/oauth.py +++ b/canaille/oidc/endpoints/oauth.py @@ -23,7 +23,7 @@ from canaille.app.flask import set_parameter_in_url_query from canaille.app.i18n import gettext as _ from canaille.app.session import current_user from canaille.app.session import logout_user -from canaille.app.themes import render_template +from canaille.app.templating import render_template from canaille.backends import Backend from ..oauth import ClientConfigurationEndpoint diff --git a/canaille/oidc/endpoints/tokens.py b/canaille/oidc/endpoints/tokens.py index afec9e29..9551f5b1 100644 --- a/canaille/oidc/endpoints/tokens.py +++ b/canaille/oidc/endpoints/tokens.py @@ -11,7 +11,7 @@ from canaille.app.flask import render_htmx_template from canaille.app.flask import user_needed from canaille.app.forms import TableForm from canaille.app.i18n import gettext as _ -from canaille.app.themes import render_template +from canaille.app.templating import render_template from canaille.backends import Backend from .forms import TokenRevokationForm