diff --git a/canaille/__init__.py b/canaille/__init__.py index 2bdc96cb..8b104285 100644 --- a/canaille/__init__.py +++ b/canaille/__init__.py @@ -17,7 +17,7 @@ csrf = CSRFProtect() def setup_config(app, config=None, validate=True): - import canaille.configuration + import canaille.app.configuration app.config.from_mapping( { @@ -42,7 +42,7 @@ def setup_config(app, config=None, validate=True): canaille.oidc.installation.setup_keypair(app.config) if validate: - canaille.configuration.validate(app.config) + canaille.app.configuration.validate(app.config) def setup_sentry(app): # pragma: no cover @@ -138,7 +138,7 @@ def setup_flask(app): @app.context_processor def global_processor(): - from .utils.flask import current_user + from canaille.app.flask import current_user return { "has_smtp": "SMTP" in app.config, @@ -174,7 +174,7 @@ def create_app(config=None, validate=True): try: from .oidc.oauth import setup_oauth from .ldap_backend.backend import init_backend - from .utils.i18n import setup_i18n + from .app.i18n import setup_i18n setup_logging(app) init_backend(app) diff --git a/canaille/utils/__init__.py b/canaille/app/__init__.py similarity index 100% rename from canaille/utils/__init__.py rename to canaille/app/__init__.py diff --git a/canaille/commands.py b/canaille/app/commands.py similarity index 93% rename from canaille/commands.py rename to canaille/app/commands.py index 43cc859b..7d9abf66 100644 --- a/canaille/commands.py +++ b/canaille/app/commands.py @@ -63,7 +63,7 @@ def check(): """ Check the configuration file. """ - from canaille.configuration import validate, ConfigurationException + from canaille.app.configuration import validate, ConfigurationException try: validate(current_app.config, validate_remote=True) @@ -78,8 +78,8 @@ def install(): """ Installs canaille elements from the configuration. """ - from canaille.installation import install - from canaille.configuration import ConfigurationException + from canaille.app.installation import install + from canaille.app.configuration import ConfigurationException try: install(current_app.config) diff --git a/canaille/configuration.py b/canaille/app/configuration.py similarity index 96% rename from canaille/configuration.py rename to canaille/app/configuration.py index 711f54c0..a4a7f773 100644 --- a/canaille/configuration.py +++ b/canaille/app/configuration.py @@ -16,7 +16,7 @@ def validate(config, validate_remote=False): if not validate_remote: return - from .ldap_backend.backend import validate_configuration + from canaille.ldap_backend.backend import validate_configuration validate_configuration(config) validate_smtp_configuration(config) diff --git a/canaille/utils/flask.py b/canaille/app/flask.py similarity index 100% rename from canaille/utils/flask.py rename to canaille/app/flask.py diff --git a/canaille/utils/forms.py b/canaille/app/forms.py similarity index 96% rename from canaille/utils/forms.py rename to canaille/app/forms.py index 7891cd57..e124acbe 100644 --- a/canaille/utils/forms.py +++ b/canaille/app/forms.py @@ -1,8 +1,8 @@ import math import wtforms -from canaille.utils.i18n import DEFAULT_LANGUAGE_CODE -from canaille.utils.i18n import locale_selector +from canaille.app.i18n import DEFAULT_LANGUAGE_CODE +from canaille.app.i18n import locale_selector from flask import abort from flask import current_app from flask import make_response diff --git a/canaille/utils/i18n.py b/canaille/app/i18n.py similarity index 100% rename from canaille/utils/i18n.py rename to canaille/app/i18n.py diff --git a/canaille/installation.py b/canaille/app/installation.py similarity index 100% rename from canaille/installation.py rename to canaille/app/installation.py diff --git a/canaille/utils/mails.py b/canaille/app/mails.py similarity index 96% rename from canaille/utils/mails.py rename to canaille/app/mails.py index 03691c95..b873a35d 100644 --- a/canaille/utils/mails.py +++ b/canaille/app/mails.py @@ -4,8 +4,8 @@ import smtplib import urllib.request from email.utils import make_msgid -from canaille.utils import get_current_domain -from canaille.utils import get_current_mail_domain +from canaille.app import get_current_domain +from canaille.app import get_current_mail_domain from flask import current_app from flask import request diff --git a/canaille/core/account.py b/canaille/core/account.py index 01a9c6f7..2500f46f 100644 --- a/canaille/core/account.py +++ b/canaille/core/account.py @@ -6,18 +6,18 @@ from typing import List import pkg_resources import wtforms -from canaille.utils import b64_to_obj -from canaille.utils import default_fields -from canaille.utils import login_placeholder -from canaille.utils import obj_to_b64 -from canaille.utils import profile_hash -from canaille.utils.flask import current_user -from canaille.utils.flask import permissions_needed -from canaille.utils.flask import render_htmx_template -from canaille.utils.flask import request_is_htmx -from canaille.utils.flask import smtp_needed -from canaille.utils.flask import user_needed -from canaille.utils.forms import TableForm +from canaille.app import b64_to_obj +from canaille.app import default_fields +from canaille.app import login_placeholder +from canaille.app import obj_to_b64 +from canaille.app import profile_hash +from canaille.app.flask import current_user +from canaille.app.flask import permissions_needed +from canaille.app.flask import render_htmx_template +from canaille.app.flask import request_is_htmx +from canaille.app.flask import smtp_needed +from canaille.app.flask import user_needed +from canaille.app.forms import TableForm from flask import abort from flask import Blueprint from flask import current_app diff --git a/canaille/core/admin.py b/canaille/core/admin.py index 2e5cbdb6..e7dc1e51 100644 --- a/canaille/core/admin.py +++ b/canaille/core/admin.py @@ -1,8 +1,8 @@ +from canaille.app import obj_to_b64 +from canaille.app.flask import permissions_needed +from canaille.app.forms import HTMXForm from canaille.core.mails import profile_hash from canaille.core.mails import send_test_mail -from canaille.utils import obj_to_b64 -from canaille.utils.flask import permissions_needed -from canaille.utils.forms import HTMXForm from flask import Blueprint from flask import current_app from flask import flash diff --git a/canaille/core/forms.py b/canaille/core/forms.py index faacf1c1..51851fdb 100644 --- a/canaille/core/forms.py +++ b/canaille/core/forms.py @@ -1,8 +1,8 @@ import wtforms.form -from canaille.utils.forms import HTMXBaseForm -from canaille.utils.forms import HTMXForm -from canaille.utils.forms import is_uri -from canaille.utils.i18n import native_language_name_from_code +from canaille.app.forms import HTMXBaseForm +from canaille.app.forms import HTMXForm +from canaille.app.forms import is_uri +from canaille.app.i18n import native_language_name_from_code from flask import current_app from flask import g from flask_babel import lazy_gettext as _ diff --git a/canaille/core/groups.py b/canaille/core/groups.py index e871bd22..20c84c72 100644 --- a/canaille/core/groups.py +++ b/canaille/core/groups.py @@ -1,6 +1,6 @@ -from canaille.utils.flask import permissions_needed -from canaille.utils.flask import render_htmx_template -from canaille.utils.forms import TableForm +from canaille.app.flask import permissions_needed +from canaille.app.flask import render_htmx_template +from canaille.app.forms import TableForm from flask import abort from flask import Blueprint from flask import flash diff --git a/canaille/core/mails.py b/canaille/core/mails.py index c5414f12..85870ed4 100644 --- a/canaille/core/mails.py +++ b/canaille/core/mails.py @@ -1,6 +1,6 @@ -from canaille.utils import profile_hash -from canaille.utils.mails import logo -from canaille.utils.mails import send_email +from canaille.app import profile_hash +from canaille.app.mails import logo +from canaille.app.mails import send_email from flask import current_app from flask import url_for from flask_babel import gettext as _ diff --git a/canaille/core/populate.py b/canaille/core/populate.py index 984e0304..e66dc133 100644 --- a/canaille/core/populate.py +++ b/canaille/core/populate.py @@ -2,9 +2,9 @@ import random import faker import ldap +from canaille.app.i18n import available_language_codes from canaille.core.models import Group from canaille.core.models import User -from canaille.utils.i18n import available_language_codes from faker.config import AVAILABLE_LOCALES diff --git a/canaille/ldap_backend/backend.py b/canaille/ldap_backend/backend.py index 05a2ac2f..bd8c1fcc 100644 --- a/canaille/ldap_backend/backend.py +++ b/canaille/ldap_backend/backend.py @@ -2,7 +2,7 @@ import logging import uuid import ldap -from canaille.configuration import ConfigurationException +from canaille.app.configuration import ConfigurationException from flask import g from flask import render_template from flask import request diff --git a/canaille/ldap_backend/installation.py b/canaille/ldap_backend/installation.py index 04933ecc..c41e1d81 100644 --- a/canaille/ldap_backend/installation.py +++ b/canaille/ldap_backend/installation.py @@ -17,7 +17,7 @@ def ldap_connection(config): def install_schema(config, schema_path): - from canaille.installation import InstallationException + from canaille.app.installation import InstallationException with open(schema_path) as fd: parser = ldif.LDIFRecordList(fd) diff --git a/canaille/oidc/authorizations.py b/canaille/oidc/authorizations.py index d7d06b87..0e850fb0 100644 --- a/canaille/oidc/authorizations.py +++ b/canaille/oidc/authorizations.py @@ -1,7 +1,7 @@ +from canaille.app.flask import permissions_needed +from canaille.app.flask import render_htmx_template +from canaille.app.forms import TableForm from canaille.oidc.models import AuthorizationCode -from canaille.utils.flask import permissions_needed -from canaille.utils.flask import render_htmx_template -from canaille.utils.forms import TableForm from flask import abort from flask import Blueprint from flask import request diff --git a/canaille/oidc/clients.py b/canaille/oidc/clients.py index 76e8b1dd..0bba8ce3 100644 --- a/canaille/oidc/clients.py +++ b/canaille/oidc/clients.py @@ -1,11 +1,11 @@ import datetime +from canaille.app.flask import permissions_needed +from canaille.app.flask import render_htmx_template +from canaille.app.flask import request_is_htmx +from canaille.app.forms import TableForm from canaille.oidc.forms import ClientAddForm from canaille.oidc.models import Client -from canaille.utils.flask import permissions_needed -from canaille.utils.flask import render_htmx_template -from canaille.utils.flask import request_is_htmx -from canaille.utils.forms import TableForm from flask import abort from flask import Blueprint from flask import flash diff --git a/canaille/oidc/consents.py b/canaille/oidc/consents.py index 0c96c955..122d37d4 100644 --- a/canaille/oidc/consents.py +++ b/canaille/oidc/consents.py @@ -1,9 +1,9 @@ import datetime import uuid +from canaille.app.flask import user_needed from canaille.oidc.models import Client from canaille.oidc.models import Consent -from canaille.utils.flask import user_needed from flask import Blueprint from flask import flash from flask import redirect diff --git a/canaille/oidc/endpoints.py b/canaille/oidc/endpoints.py index 68503cb3..edcae8c1 100644 --- a/canaille/oidc/endpoints.py +++ b/canaille/oidc/endpoints.py @@ -6,6 +6,8 @@ from authlib.jose import JsonWebKey from authlib.jose import jwt from authlib.oauth2 import OAuth2Error from canaille import csrf +from canaille.app.flask import current_user +from canaille.app.flask import set_parameter_in_url_query from canaille.core.forms import FullLoginForm from canaille.core.models import User from flask import abort @@ -21,8 +23,6 @@ from flask_babel import gettext as _ from flask_themer import render_template from werkzeug.datastructures import CombinedMultiDict -from ..utils.flask import current_user -from ..utils.flask import set_parameter_in_url_query from .forms import AuthorizeForm from .forms import LogoutForm from .models import Client diff --git a/canaille/oidc/forms.py b/canaille/oidc/forms.py index 12897cf3..b92d43db 100644 --- a/canaille/oidc/forms.py +++ b/canaille/oidc/forms.py @@ -1,7 +1,7 @@ import wtforms +from canaille.app.forms import HTMXForm +from canaille.app.forms import is_uri from canaille.oidc.models import Client -from canaille.utils.forms import HTMXForm -from canaille.utils.forms import is_uri from flask_babel import lazy_gettext as _ diff --git a/canaille/oidc/tokens.py b/canaille/oidc/tokens.py index 48a43c2c..ec74391d 100644 --- a/canaille/oidc/tokens.py +++ b/canaille/oidc/tokens.py @@ -1,9 +1,9 @@ import datetime +from canaille.app.flask import permissions_needed +from canaille.app.flask import render_htmx_template +from canaille.app.forms import TableForm from canaille.oidc.models import Token -from canaille.utils.flask import permissions_needed -from canaille.utils.flask import render_htmx_template -from canaille.utils.forms import TableForm from flask import abort from flask import Blueprint from flask import flash diff --git a/tests/commands/__init__.py b/tests/app/__init__.py similarity index 100% rename from tests/commands/__init__.py rename to tests/app/__init__.py diff --git a/tests/utils/__init__.py b/tests/app/commands/__init__.py similarity index 100% rename from tests/utils/__init__.py rename to tests/app/commands/__init__.py diff --git a/tests/commands/test_check.py b/tests/app/commands/test_check.py similarity index 91% rename from tests/commands/test_check.py rename to tests/app/commands/test_check.py index d9abf194..84cf2d0d 100644 --- a/tests/commands/test_check.py +++ b/tests/app/commands/test_check.py @@ -1,4 +1,4 @@ -from canaille.commands import cli +from canaille.app.commands import cli def test_check_command(testclient): diff --git a/tests/fixtures/themes/test/base.html b/tests/app/fixtures/themes/test/base.html similarity index 100% rename from tests/fixtures/themes/test/base.html rename to tests/app/fixtures/themes/test/base.html diff --git a/tests/utils/test_apputils.py b/tests/app/test_apputils.py similarity index 87% rename from tests/utils/test_apputils.py rename to tests/app/test_apputils.py index 90fcec14..997105cb 100644 --- a/tests/utils/test_apputils.py +++ b/tests/app/test_apputils.py @@ -1,4 +1,4 @@ -from canaille.utils import validate_uri +from canaille.app import validate_uri def test_validate_uri(): diff --git a/tests/test_configuration.py b/tests/app/test_configuration.py similarity index 97% rename from tests/test_configuration.py rename to tests/app/test_configuration.py index 5ad554da..f4867253 100644 --- a/tests/test_configuration.py +++ b/tests/app/test_configuration.py @@ -4,8 +4,8 @@ from unittest import mock import ldap import pytest from canaille import create_app -from canaille.configuration import ConfigurationException -from canaille.configuration import validate +from canaille.app.configuration import ConfigurationException +from canaille.app.configuration import validate from flask_webtest import TestApp diff --git a/tests/test_errors.py b/tests/app/test_errors.py similarity index 100% rename from tests/test_errors.py rename to tests/app/test_errors.py diff --git a/tests/utils/test_flaskutils.py b/tests/app/test_flaskutils.py similarity index 97% rename from tests/utils/test_flaskutils.py rename to tests/app/test_flaskutils.py index 87c9447e..7cbc7092 100644 --- a/tests/utils/test_flaskutils.py +++ b/tests/app/test_flaskutils.py @@ -4,7 +4,7 @@ import ldap import pytest import toml from canaille import create_app -from canaille.utils.flask import set_parameter_in_url_query +from canaille.app.flask import set_parameter_in_url_query from flask import g from flask_webtest import TestApp diff --git a/tests/test_i18n.py b/tests/app/test_i18n.py similarity index 100% rename from tests/test_i18n.py rename to tests/app/test_i18n.py diff --git a/tests/test_mails.py b/tests/app/test_mails.py similarity index 100% rename from tests/test_mails.py rename to tests/app/test_mails.py diff --git a/tests/core/commands/test_populate.py b/tests/core/commands/test_populate.py index 49ac69d8..a4b3878b 100644 --- a/tests/core/commands/test_populate.py +++ b/tests/core/commands/test_populate.py @@ -1,4 +1,4 @@ -from canaille.commands import cli +from canaille.app.commands import cli from canaille.core.models import Group from canaille.core.models import User from canaille.core.populate import fake_users diff --git a/tests/oidc/commands/test_clean.py b/tests/oidc/commands/test_clean.py index e9c34524..3ca2ad6a 100644 --- a/tests/oidc/commands/test_clean.py +++ b/tests/oidc/commands/test_clean.py @@ -1,6 +1,6 @@ import datetime -from canaille.commands import cli +from canaille.app.commands import cli from canaille.oidc.models import AuthorizationCode from canaille.oidc.models import Token from werkzeug.security import gen_salt diff --git a/tests/oidc/commands/test_install.py b/tests/oidc/commands/test_install.py index 06b1b890..f439cb74 100644 --- a/tests/oidc/commands/test_install.py +++ b/tests/oidc/commands/test_install.py @@ -3,8 +3,8 @@ import os import ldap import pytest from canaille import create_app -from canaille.commands import cli -from canaille.installation import InstallationException +from canaille.app.commands import cli +from canaille.app.installation import InstallationException from canaille.ldap_backend.ldapobject import LDAPObject from canaille.oidc.installation import setup_schemas from flask_webtest import TestApp diff --git a/tests/oidc/test_configuration.py b/tests/oidc/test_configuration.py index 0d8b465c..da33395e 100644 --- a/tests/oidc/test_configuration.py +++ b/tests/oidc/test_configuration.py @@ -1,8 +1,8 @@ import warnings import pytest -from canaille.configuration import ConfigurationException -from canaille.configuration import validate +from canaille.app.configuration import ConfigurationException +from canaille.app.configuration import validate from canaille.oidc.oauth import get_issuer