forked from Github-Mirrors/canaille
chore: use isort instead of reoder-python-imports
This commit is contained in:
parent
bd57d69765
commit
4edffcaa9f
70 changed files with 207 additions and 154 deletions
|
@ -1,7 +1,7 @@
|
|||
---
|
||||
repos:
|
||||
- repo: https://github.com/astral-sh/ruff-pre-commit
|
||||
rev: 'v0.3.1'
|
||||
rev: 'v0.3.3'
|
||||
hooks:
|
||||
- id: ruff
|
||||
args: [--fix, --exit-non-zero-on-fix]
|
||||
|
@ -15,11 +15,12 @@ repos:
|
|||
- id: end-of-file-fixer
|
||||
exclude: "\\.svg$|\\.map$|\\.min\\.css$|\\.min\\.js$|\\.po$|\\.pot$"
|
||||
- id: check-toml
|
||||
- repo: https://github.com/asottile/reorder_python_imports
|
||||
rev: v3.12.0
|
||||
- repo: https://github.com/pycqa/isort
|
||||
rev: "5.13.2"
|
||||
hooks:
|
||||
- id: reorder-python-imports
|
||||
args: ["--application-directories", "canaille"]
|
||||
- id: isort
|
||||
name: isort (python)
|
||||
args: ["--force-single-line-imports", "--profile", "black"]
|
||||
- repo: https://github.com/PyCQA/docformatter
|
||||
rev: v1.7.5
|
||||
hooks:
|
||||
|
|
|
@ -6,7 +6,6 @@ from flask import request
|
|||
from flask import session
|
||||
from flask_wtf.csrf import CSRFProtect
|
||||
|
||||
|
||||
csrf = CSRFProtect()
|
||||
|
||||
|
||||
|
@ -107,16 +106,16 @@ def setup_flask(app):
|
|||
|
||||
|
||||
def setup_flask_converters(app):
|
||||
from canaille.app.flask import model_converter
|
||||
from canaille.app import models
|
||||
from canaille.app.flask import model_converter
|
||||
|
||||
for model_name, model_class in models.MODELS.items():
|
||||
app.url_map.converters[model_name.lower()] = model_converter(model_class)
|
||||
|
||||
|
||||
def create_app(config=None, validate=True, backend=None):
|
||||
from .app.i18n import setup_i18n
|
||||
from .app.configuration import setup_config
|
||||
from .app.i18n import setup_i18n
|
||||
from .app.themes import setup_themer
|
||||
from .backends import setup_backend
|
||||
|
||||
|
|
|
@ -2,10 +2,11 @@ import functools
|
|||
import sys
|
||||
|
||||
import click
|
||||
from canaille.backends import BaseBackend
|
||||
from flask import current_app
|
||||
from flask.cli import with_appcontext
|
||||
|
||||
from canaille.backends import BaseBackend
|
||||
|
||||
|
||||
def with_backendcontext(func):
|
||||
@functools.wraps(func)
|
||||
|
@ -41,8 +42,8 @@ def check():
|
|||
@with_appcontext
|
||||
def install():
|
||||
"""Installs canaille elements from the configuration."""
|
||||
from canaille.app.installation import install
|
||||
from canaille.app.configuration import ConfigurationException
|
||||
from canaille.app.installation import install
|
||||
|
||||
try:
|
||||
install(current_app.config)
|
||||
|
|
|
@ -3,9 +3,10 @@ import smtplib
|
|||
import socket
|
||||
from collections.abc import Mapping
|
||||
|
||||
from flask import current_app
|
||||
|
||||
from canaille.app.mails import DEFAULT_SMTP_HOST
|
||||
from canaille.app.mails import DEFAULT_SMTP_PORT
|
||||
from flask import current_app
|
||||
|
||||
ROOT = os.path.dirname(os.path.abspath(__file__))
|
||||
|
||||
|
|
|
@ -3,9 +3,6 @@ from functools import wraps
|
|||
from urllib.parse import urlsplit
|
||||
from urllib.parse import urlunsplit
|
||||
|
||||
from canaille.app import models
|
||||
from canaille.app.i18n import gettext as _
|
||||
from canaille.app.themes import render_template
|
||||
from flask import abort
|
||||
from flask import current_app
|
||||
from flask import g
|
||||
|
@ -13,6 +10,10 @@ from flask import request
|
|||
from flask import session
|
||||
from werkzeug.routing import BaseConverter
|
||||
|
||||
from canaille.app import models
|
||||
from canaille.app.i18n import gettext as _
|
||||
from canaille.app.themes import render_template
|
||||
|
||||
|
||||
def current_user():
|
||||
if "user" in g:
|
||||
|
|
|
@ -3,11 +3,6 @@ import math
|
|||
import re
|
||||
|
||||
import wtforms.validators
|
||||
from canaille.app import models
|
||||
from canaille.app.i18n import DEFAULT_LANGUAGE_CODE
|
||||
from canaille.app.i18n import gettext as _
|
||||
from canaille.app.i18n import locale_selector
|
||||
from canaille.app.i18n import timezone_selector
|
||||
from flask import abort
|
||||
from flask import current_app
|
||||
from flask import make_response
|
||||
|
@ -15,6 +10,12 @@ from flask import request
|
|||
from flask_wtf import FlaskForm
|
||||
from wtforms.meta import DefaultMeta
|
||||
|
||||
from canaille.app import models
|
||||
from canaille.app.i18n import DEFAULT_LANGUAGE_CODE
|
||||
from canaille.app.i18n import gettext as _
|
||||
from canaille.app.i18n import locale_selector
|
||||
from canaille.app.i18n import timezone_selector
|
||||
|
||||
from . import validate_uri
|
||||
from .flask import request_is_htmx
|
||||
|
||||
|
|
|
@ -74,8 +74,9 @@ def timezone_selector():
|
|||
|
||||
def native_language_name_from_code(code):
|
||||
try:
|
||||
import pycountry
|
||||
from gettext import translation
|
||||
|
||||
import pycountry
|
||||
except ImportError:
|
||||
return code
|
||||
|
||||
|
|
|
@ -4,11 +4,12 @@ import smtplib
|
|||
import urllib.request
|
||||
from email.utils import make_msgid
|
||||
|
||||
from canaille.app import get_current_domain
|
||||
from canaille.app import get_current_mail_domain
|
||||
from flask import current_app
|
||||
from flask import request
|
||||
|
||||
from canaille.app import get_current_domain
|
||||
from canaille.app import get_current_mail_domain
|
||||
|
||||
DEFAULT_SMTP_HOST = "localhost"
|
||||
DEFAULT_SMTP_PORT = 25
|
||||
DEFAULT_SMTP_TLS = False
|
||||
|
|
|
@ -5,11 +5,12 @@ from contextlib import contextmanager
|
|||
|
||||
import ldap.modlist
|
||||
import ldif
|
||||
from flask import current_app
|
||||
|
||||
from canaille.app import models
|
||||
from canaille.app.configuration import ConfigurationException
|
||||
from canaille.app.i18n import gettext as _
|
||||
from canaille.backends import BaseBackend
|
||||
from flask import current_app
|
||||
|
||||
from .utils import listify
|
||||
|
||||
|
@ -188,9 +189,10 @@ class Backend(BaseBackend):
|
|||
|
||||
|
||||
def setup_ldap_models(config):
|
||||
from .ldapobject import LDAPObject
|
||||
from canaille.app import models
|
||||
|
||||
from .ldapobject import LDAPObject
|
||||
|
||||
LDAPObject.root_dn = config["BACKENDS"]["LDAP"]["ROOT_DN"]
|
||||
|
||||
user_base = config["BACKENDS"]["LDAP"]["USER_BASE"].replace(
|
||||
|
|
|
@ -3,6 +3,7 @@ from collections.abc import Iterable
|
|||
|
||||
import ldap.dn
|
||||
import ldap.filter
|
||||
|
||||
from canaille.backends.models import Model
|
||||
|
||||
from .backend import Backend
|
||||
|
|
|
@ -1,11 +1,12 @@
|
|||
import canaille.core.models
|
||||
import canaille.oidc.models
|
||||
import ldap.filter
|
||||
from flask import current_app
|
||||
from ldap.controls import DecodeControlTuples
|
||||
from ldap.controls.ppolicy import PasswordPolicyControl
|
||||
from ldap.controls.ppolicy import PasswordPolicyError
|
||||
|
||||
import canaille.core.models
|
||||
import canaille.oidc.models
|
||||
|
||||
from .backend import Backend
|
||||
from .ldapobject import LDAPObject
|
||||
|
||||
|
|
|
@ -2,11 +2,12 @@ import copy
|
|||
import datetime
|
||||
import uuid
|
||||
|
||||
from flask import current_app
|
||||
|
||||
import canaille.core.models
|
||||
import canaille.oidc.models
|
||||
from canaille.app import models
|
||||
from canaille.backends.models import Model
|
||||
from flask import current_app
|
||||
|
||||
|
||||
def listify(value):
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
from canaille.backends import BaseBackend
|
||||
from sqlalchemy import create_engine
|
||||
from sqlalchemy.orm import declarative_base
|
||||
from sqlalchemy.orm import Session
|
||||
from sqlalchemy.orm import declarative_base
|
||||
|
||||
from canaille.backends import BaseBackend
|
||||
|
||||
Base = declarative_base()
|
||||
|
||||
|
|
|
@ -2,27 +2,28 @@ import datetime
|
|||
import uuid
|
||||
from typing import List
|
||||
|
||||
import canaille.core.models
|
||||
import canaille.oidc.models
|
||||
from canaille.app import models
|
||||
from canaille.backends.models import Model
|
||||
from flask import current_app
|
||||
from sqlalchemy import Boolean
|
||||
from sqlalchemy import Column
|
||||
from sqlalchemy import ForeignKey
|
||||
from sqlalchemy import Integer
|
||||
from sqlalchemy import LargeBinary
|
||||
from sqlalchemy import or_
|
||||
from sqlalchemy import select
|
||||
from sqlalchemy import String
|
||||
from sqlalchemy import Table
|
||||
from sqlalchemy import or_
|
||||
from sqlalchemy import select
|
||||
from sqlalchemy.orm import Mapped
|
||||
from sqlalchemy.orm import mapped_column
|
||||
from sqlalchemy.orm import reconstructor
|
||||
from sqlalchemy.orm import relationship
|
||||
from sqlalchemy_json import MutableJson
|
||||
from sqlalchemy_utils import force_auto_coercion
|
||||
from sqlalchemy_utils import PasswordType
|
||||
from sqlalchemy_utils import force_auto_coercion
|
||||
|
||||
import canaille.core.models
|
||||
import canaille.oidc.models
|
||||
from canaille.app import models
|
||||
from canaille.backends.models import Model
|
||||
|
||||
from .backend import Backend
|
||||
from .backend import Base
|
||||
|
|
|
@ -1,9 +1,10 @@
|
|||
import click
|
||||
from flask.cli import FlaskGroup
|
||||
|
||||
import canaille.app.commands
|
||||
import canaille.core.commands
|
||||
import canaille.oidc.commands
|
||||
import click
|
||||
from canaille import create_app
|
||||
from flask.cli import FlaskGroup
|
||||
|
||||
|
||||
@click.group(cls=FlaskGroup, create_app=create_app)
|
||||
|
|
|
@ -1,7 +1,8 @@
|
|||
import click
|
||||
from canaille.app.commands import with_backendcontext
|
||||
from flask.cli import with_appcontext
|
||||
|
||||
from canaille.app.commands import with_backendcontext
|
||||
|
||||
try:
|
||||
HAS_FAKER = True
|
||||
except ImportError:
|
||||
|
|
|
@ -7,6 +7,19 @@ from importlib import metadata
|
|||
from typing import List
|
||||
|
||||
import wtforms
|
||||
from flask import Blueprint
|
||||
from flask import abort
|
||||
from flask import current_app
|
||||
from flask import flash
|
||||
from flask import g
|
||||
from flask import redirect
|
||||
from flask import request
|
||||
from flask import send_file
|
||||
from flask import session
|
||||
from flask import url_for
|
||||
from werkzeug.datastructures import CombinedMultiDict
|
||||
from werkzeug.datastructures import FileStorage
|
||||
|
||||
from canaille.app import b64_to_obj
|
||||
from canaille.app import build_hash
|
||||
from canaille.app import default_fields
|
||||
|
@ -21,38 +34,25 @@ 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 IDToModel
|
||||
from canaille.app.forms import TableForm
|
||||
from canaille.app.forms import is_readonly
|
||||
from canaille.app.forms import set_readonly
|
||||
from canaille.app.forms import set_writable
|
||||
from canaille.app.forms import TableForm
|
||||
from canaille.app.i18n import gettext as _
|
||||
from canaille.app.i18n import reload_translations
|
||||
from canaille.app.themes import render_template
|
||||
from canaille.backends import BaseBackend
|
||||
from flask import abort
|
||||
from flask import Blueprint
|
||||
from flask import current_app
|
||||
from flask import flash
|
||||
from flask import g
|
||||
from flask import redirect
|
||||
from flask import request
|
||||
from flask import send_file
|
||||
from flask import session
|
||||
from flask import url_for
|
||||
from werkzeug.datastructures import CombinedMultiDict
|
||||
from werkzeug.datastructures import FileStorage
|
||||
|
||||
from ..mails import send_confirmation_email
|
||||
from ..mails import send_invitation_mail
|
||||
from ..mails import send_password_initialization_mail
|
||||
from ..mails import send_password_reset_mail
|
||||
from ..mails import send_registration_mail
|
||||
from .forms import build_profile_form
|
||||
from .forms import MINIMUM_PASSWORD_LENGTH
|
||||
from .forms import EmailConfirmationForm
|
||||
from .forms import InvitationForm
|
||||
from .forms import JoinForm
|
||||
from .forms import MINIMUM_PASSWORD_LENGTH
|
||||
|
||||
from .forms import build_profile_form
|
||||
|
||||
bp = Blueprint("account", __name__)
|
||||
|
||||
|
|
|
@ -1,11 +1,3 @@
|
|||
from canaille.app import obj_to_b64
|
||||
from canaille.app.flask import permissions_needed
|
||||
from canaille.app.forms import email_validator
|
||||
from canaille.app.forms import Form
|
||||
from canaille.app.i18n import gettext as _
|
||||
from canaille.app.themes import render_template
|
||||
from canaille.core.mails import build_hash
|
||||
from canaille.core.mails import send_test_mail
|
||||
from flask import Blueprint
|
||||
from flask import current_app
|
||||
from flask import flash
|
||||
|
@ -14,6 +6,14 @@ from flask import url_for
|
|||
from wtforms import StringField
|
||||
from wtforms.validators import DataRequired
|
||||
|
||||
from canaille.app import obj_to_b64
|
||||
from canaille.app.flask import permissions_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.core.mails import build_hash
|
||||
from canaille.core.mails import send_test_mail
|
||||
|
||||
bp = Blueprint("admin", __name__, url_prefix="/admin")
|
||||
|
||||
|
|
|
@ -1,3 +1,12 @@
|
|||
from flask import Blueprint
|
||||
from flask import abort
|
||||
from flask import current_app
|
||||
from flask import flash
|
||||
from flask import redirect
|
||||
from flask import request
|
||||
from flask import session
|
||||
from flask import url_for
|
||||
|
||||
from canaille.app import build_hash
|
||||
from canaille.app import models
|
||||
from canaille.app.flask import current_user
|
||||
|
@ -7,14 +16,6 @@ from canaille.app.flask import smtp_needed
|
|||
from canaille.app.i18n import gettext as _
|
||||
from canaille.app.themes import render_template
|
||||
from canaille.backends import BaseBackend
|
||||
from flask import abort
|
||||
from flask import Blueprint
|
||||
from flask import current_app
|
||||
from flask import flash
|
||||
from flask import redirect
|
||||
from flask import request
|
||||
from flask import session
|
||||
from flask import url_for
|
||||
|
||||
from ..mails import send_password_initialization_mail
|
||||
from ..mails import send_password_reset_mail
|
||||
|
|
|
@ -1,22 +1,22 @@
|
|||
import wtforms.form
|
||||
import wtforms.validators
|
||||
from flask import current_app
|
||||
from flask import g
|
||||
from flask_wtf.file import FileAllowed
|
||||
from flask_wtf.file import FileField
|
||||
|
||||
from canaille.app import models
|
||||
from canaille.app.forms import BaseForm
|
||||
from canaille.app.forms import DateTimeUTCField
|
||||
from canaille.app.forms import email_validator
|
||||
from canaille.app.forms import Form
|
||||
from canaille.app.forms import IDToModel
|
||||
from canaille.app.forms import email_validator
|
||||
from canaille.app.forms import is_uri
|
||||
from canaille.app.forms import phone_number
|
||||
from canaille.app.forms import set_readonly
|
||||
from canaille.app.forms import unique_values
|
||||
from canaille.app.i18n import lazy_gettext as _
|
||||
from canaille.app.i18n import native_language_name_from_code
|
||||
from flask import current_app
|
||||
from flask import g
|
||||
from flask_wtf.file import FileAllowed
|
||||
from flask_wtf.file import FileField
|
||||
|
||||
|
||||
MINIMUM_PASSWORD_LENGTH = 8
|
||||
|
||||
|
|
|
@ -1,15 +1,16 @@
|
|||
from flask import Blueprint
|
||||
from flask import abort
|
||||
from flask import flash
|
||||
from flask import redirect
|
||||
from flask import request
|
||||
from flask import url_for
|
||||
|
||||
from canaille.app import models
|
||||
from canaille.app.flask import permissions_needed
|
||||
from canaille.app.flask import render_htmx_template
|
||||
from canaille.app.forms import TableForm
|
||||
from canaille.app.i18n import gettext as _
|
||||
from canaille.app.themes import render_template
|
||||
from flask import abort
|
||||
from flask import Blueprint
|
||||
from flask import flash
|
||||
from flask import redirect
|
||||
from flask import request
|
||||
from flask import url_for
|
||||
|
||||
from .forms import CreateGroupForm
|
||||
from .forms import EditGroupForm
|
||||
|
|
|
@ -1,10 +1,11 @@
|
|||
from flask import current_app
|
||||
from flask import url_for
|
||||
|
||||
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 flask import current_app
|
||||
from flask import url_for
|
||||
|
||||
|
||||
def send_test_mail(email):
|
||||
|
|
|
@ -1,9 +1,10 @@
|
|||
import random
|
||||
|
||||
import faker
|
||||
from faker.config import AVAILABLE_LOCALES
|
||||
|
||||
from canaille.app import models
|
||||
from canaille.app.i18n import available_language_codes
|
||||
from faker.config import AVAILABLE_LOCALES
|
||||
|
||||
|
||||
def faker_generator(locales=None):
|
||||
|
|
|
@ -1,7 +1,8 @@
|
|||
import click
|
||||
from flask.cli import with_appcontext
|
||||
|
||||
from canaille.app import models
|
||||
from canaille.app.commands import with_backendcontext
|
||||
from flask.cli import with_appcontext
|
||||
|
||||
|
||||
@click.command()
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
from flask import Blueprint
|
||||
from flask import abort
|
||||
from flask import request
|
||||
|
||||
from canaille.app import models
|
||||
from canaille.app.flask import permissions_needed
|
||||
from canaille.app.flask import render_htmx_template
|
||||
from canaille.app.forms import TableForm
|
||||
from canaille.app.themes import render_template
|
||||
from flask import abort
|
||||
from flask import Blueprint
|
||||
from flask import request
|
||||
|
||||
|
||||
bp = Blueprint("authorizations", __name__, url_prefix="/admin/authorization")
|
||||
|
||||
|
|
|
@ -1,22 +1,22 @@
|
|||
import datetime
|
||||
|
||||
from flask import Blueprint
|
||||
from flask import abort
|
||||
from flask import flash
|
||||
from flask import redirect
|
||||
from flask import request
|
||||
from flask import url_for
|
||||
from werkzeug.security import gen_salt
|
||||
|
||||
from canaille.app import models
|
||||
from canaille.app.flask import permissions_needed
|
||||
from canaille.app.flask import render_htmx_template
|
||||
from canaille.app.forms import TableForm
|
||||
from canaille.app.i18n import gettext as _
|
||||
from canaille.app.themes import render_template
|
||||
from flask import abort
|
||||
from flask import Blueprint
|
||||
from flask import flash
|
||||
from flask import redirect
|
||||
from flask import request
|
||||
from flask import url_for
|
||||
from werkzeug.security import gen_salt
|
||||
|
||||
from .forms import ClientAddForm
|
||||
|
||||
|
||||
bp = Blueprint("clients", __name__, url_prefix="/admin/client")
|
||||
|
||||
|
||||
|
|
|
@ -1,17 +1,17 @@
|
|||
import datetime
|
||||
import uuid
|
||||
|
||||
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 flask import Blueprint
|
||||
from flask import flash
|
||||
from flask import redirect
|
||||
from flask import url_for
|
||||
|
||||
from ..utils import SCOPE_DETAILS
|
||||
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 ..utils import SCOPE_DETAILS
|
||||
|
||||
bp = Blueprint("consents", __name__, url_prefix="/consent")
|
||||
|
||||
|
|
|
@ -1,8 +1,9 @@
|
|||
import wtforms
|
||||
|
||||
from canaille.app import models
|
||||
from canaille.app.forms import email_validator
|
||||
from canaille.app.forms import Form
|
||||
from canaille.app.forms import IDToModel
|
||||
from canaille.app.forms import email_validator
|
||||
from canaille.app.forms import is_uri
|
||||
from canaille.app.forms import unique_values
|
||||
from canaille.app.i18n import lazy_gettext as _
|
||||
|
|
|
@ -5,15 +5,8 @@ from authlib.integrations.flask_oauth2 import current_token
|
|||
from authlib.jose import jwt
|
||||
from authlib.jose.errors import JoseError
|
||||
from authlib.oauth2 import OAuth2Error
|
||||
from canaille import csrf
|
||||
from canaille.app import models
|
||||
from canaille.app.flask import current_user
|
||||
from canaille.app.flask import logout_user
|
||||
from canaille.app.flask import set_parameter_in_url_query
|
||||
from canaille.app.i18n import gettext as _
|
||||
from canaille.app.themes import render_template
|
||||
from flask import abort
|
||||
from flask import Blueprint
|
||||
from flask import abort
|
||||
from flask import current_app
|
||||
from flask import flash
|
||||
from flask import jsonify
|
||||
|
@ -23,21 +16,28 @@ from flask import session
|
|||
from flask import url_for
|
||||
from werkzeug.datastructures import CombinedMultiDict
|
||||
|
||||
from ..oauth import authorization
|
||||
from canaille import csrf
|
||||
from canaille.app import models
|
||||
from canaille.app.flask import current_user
|
||||
from canaille.app.flask import logout_user
|
||||
from canaille.app.flask import set_parameter_in_url_query
|
||||
from canaille.app.i18n import gettext as _
|
||||
from canaille.app.themes import render_template
|
||||
|
||||
from ..oauth import ClientConfigurationEndpoint
|
||||
from ..oauth import ClientRegistrationEndpoint
|
||||
from ..oauth import IntrospectionEndpoint
|
||||
from ..oauth import RevocationEndpoint
|
||||
from ..oauth import authorization
|
||||
from ..oauth import generate_user_info
|
||||
from ..oauth import get_issuer
|
||||
from ..oauth import get_jwks
|
||||
from ..oauth import IntrospectionEndpoint
|
||||
from ..oauth import require_oauth
|
||||
from ..oauth import RevocationEndpoint
|
||||
from ..utils import SCOPE_DETAILS
|
||||
from .forms import AuthorizeForm
|
||||
from .forms import LogoutForm
|
||||
from .well_known import openid_configuration
|
||||
|
||||
|
||||
bp = Blueprint("endpoints", __name__, url_prefix="/oauth")
|
||||
|
||||
|
||||
|
|
|
@ -1,15 +1,16 @@
|
|||
import datetime
|
||||
|
||||
from flask import Blueprint
|
||||
from flask import abort
|
||||
from flask import flash
|
||||
from flask import request
|
||||
|
||||
from canaille.app import models
|
||||
from canaille.app.flask import permissions_needed
|
||||
from canaille.app.flask import render_htmx_template
|
||||
from canaille.app.forms import TableForm
|
||||
from canaille.app.i18n import gettext as _
|
||||
from canaille.app.themes import render_template
|
||||
from flask import abort
|
||||
from flask import Blueprint
|
||||
from flask import flash
|
||||
from flask import request
|
||||
|
||||
from .forms import TokenRevokationForm
|
||||
|
||||
|
|
|
@ -5,7 +5,6 @@ from flask import request
|
|||
from ..oauth import oauth_authorization_server
|
||||
from ..oauth import openid_configuration
|
||||
|
||||
|
||||
bp = Blueprint("home", __name__, url_prefix="/.well-known")
|
||||
|
||||
|
||||
|
|
|
@ -4,6 +4,7 @@ from authlib.oauth2.rfc6749 import AuthorizationCodeMixin
|
|||
from authlib.oauth2.rfc6749 import ClientMixin
|
||||
from authlib.oauth2.rfc6749 import TokenMixin
|
||||
from authlib.oauth2.rfc6749 import util
|
||||
|
||||
from canaille.app import models
|
||||
|
||||
from .basemodels import AuthorizationCode as BaseAuthorizationCode
|
||||
|
|
|
@ -27,13 +27,13 @@ from authlib.oidc.core.grants import OpenIDCode as _OpenIDCode
|
|||
from authlib.oidc.core.grants import OpenIDHybridGrant as _OpenIDHybridGrant
|
||||
from authlib.oidc.core.grants import OpenIDImplicitGrant as _OpenIDImplicitGrant
|
||||
from authlib.oidc.core.grants.util import generate_id_token
|
||||
from canaille.app import models
|
||||
from flask import current_app
|
||||
from flask import g
|
||||
from flask import request
|
||||
from flask import url_for
|
||||
from werkzeug.security import gen_salt
|
||||
|
||||
from canaille.app import models
|
||||
|
||||
DEFAULT_JWT_KTY = "RSA"
|
||||
DEFAULT_JWT_ALG = "RS256"
|
||||
|
|
|
@ -4,15 +4,14 @@ from urllib.parse import urlunsplit
|
|||
from authlib.common.errors import AuthlibBaseError
|
||||
from authlib.integrations.flask_client import OAuth
|
||||
from authlib.oidc.discovery import get_well_known_url
|
||||
from flask import Flask
|
||||
from flask import current_app
|
||||
from flask import flash
|
||||
from flask import Flask
|
||||
from flask import redirect
|
||||
from flask import render_template
|
||||
from flask import session
|
||||
from flask import url_for
|
||||
|
||||
|
||||
oauth = OAuth()
|
||||
|
||||
|
||||
|
|
|
@ -2,7 +2,6 @@ import datetime
|
|||
import os
|
||||
import sys
|
||||
|
||||
|
||||
if os.path.exists("../canaille"):
|
||||
sys.path.append("../canaille")
|
||||
|
||||
|
|
|
@ -170,7 +170,7 @@ exclude_lines = [
|
|||
"if app.debug",
|
||||
]
|
||||
|
||||
[tool.ruff]
|
||||
[tool.ruff.lint]
|
||||
ignore = ["E501", "E722"]
|
||||
|
||||
[tool.tox]
|
||||
|
|
|
@ -1,10 +1,11 @@
|
|||
import os
|
||||
|
||||
import pytest
|
||||
from flask_webtest import TestApp
|
||||
|
||||
from canaille import create_app
|
||||
from canaille.app.configuration import ConfigurationException
|
||||
from canaille.app.configuration import validate
|
||||
from flask_webtest import TestApp
|
||||
|
||||
|
||||
def test_configuration_file_suffix(tmp_path, backend, configuration):
|
||||
|
|
|
@ -2,9 +2,10 @@ import os
|
|||
|
||||
import pytest
|
||||
import toml
|
||||
from flask_webtest import TestApp
|
||||
|
||||
from canaille import create_app
|
||||
from canaille.app.flask import set_parameter_in_url_query
|
||||
from flask_webtest import TestApp
|
||||
|
||||
|
||||
def test_set_parameter_in_url_query():
|
||||
|
|
|
@ -3,11 +3,12 @@ import datetime
|
|||
import pytest
|
||||
import wtforms
|
||||
from babel.dates import LOCALTZ
|
||||
from canaille.app.forms import DateTimeUTCField
|
||||
from canaille.app.forms import phone_number
|
||||
from flask import current_app
|
||||
from werkzeug.datastructures import ImmutableMultiDict
|
||||
|
||||
from canaille.app.forms import DateTimeUTCField
|
||||
from canaille.app.forms import phone_number
|
||||
|
||||
|
||||
def test_datetime_utc_field_no_timezone_is_local_timezone(testclient):
|
||||
del current_app.config["TIMEZONE"]
|
||||
|
|
|
@ -3,9 +3,10 @@ import warnings
|
|||
from unittest import mock
|
||||
|
||||
import pytest
|
||||
from canaille import create_app
|
||||
from flask_webtest import TestApp
|
||||
|
||||
from canaille import create_app
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def configuration(configuration, httpserver):
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
import pytest
|
||||
|
||||
from canaille.backends.ldap.backend import Backend
|
||||
from tests.backends.ldap import CustomSlapdObject
|
||||
|
||||
|
|
|
@ -1,7 +1,8 @@
|
|||
import pytest
|
||||
from canaille import create_app
|
||||
from flask_webtest import TestApp
|
||||
|
||||
from canaille import create_app
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def configuration(slapd_server, ldap_configuration):
|
||||
|
|
|
@ -1,10 +1,11 @@
|
|||
import pytest
|
||||
from flask_webtest import TestApp
|
||||
|
||||
from canaille import create_app
|
||||
from canaille.app.installation import InstallationException
|
||||
from canaille.backends.ldap.backend import Backend
|
||||
from canaille.backends.ldap.ldapobject import LDAPObject
|
||||
from canaille.commands import cli
|
||||
from flask_webtest import TestApp
|
||||
|
||||
from . import CustomSlapdObject
|
||||
|
||||
|
|
|
@ -3,15 +3,16 @@ from unittest import mock
|
|||
|
||||
import ldap.dn
|
||||
import pytest
|
||||
|
||||
from canaille.app import models
|
||||
from canaille.app.configuration import ConfigurationException
|
||||
from canaille.app.configuration import validate
|
||||
from canaille.backends.ldap.backend import setup_ldap_models
|
||||
from canaille.backends.ldap.ldapobject import LDAPObject
|
||||
from canaille.backends.ldap.ldapobject import python_attrs_to_ldap
|
||||
from canaille.backends.ldap.utils import Syntax
|
||||
from canaille.backends.ldap.utils import ldap_to_python
|
||||
from canaille.backends.ldap.utils import python_to_ldap
|
||||
from canaille.backends.ldap.utils import Syntax
|
||||
|
||||
|
||||
# TODO: tester le changement de cardinalité des attributs
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
import pytest
|
||||
|
||||
from canaille.backends.memory.backend import Backend
|
||||
|
||||
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
import pytest
|
||||
|
||||
from canaille.backends.sql.backend import Backend
|
||||
|
||||
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
import pytest
|
||||
|
||||
from canaille.backends import BaseBackend
|
||||
|
||||
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
import pytest
|
||||
|
||||
from canaille.app import models
|
||||
from canaille.backends.models import Model
|
||||
|
||||
|
|
|
@ -2,14 +2,15 @@ import os
|
|||
|
||||
import pytest
|
||||
from babel.messages.frontend import compile_catalog
|
||||
from canaille import create_app
|
||||
from canaille.app import models
|
||||
from canaille.backends import available_backends
|
||||
from flask_webtest import TestApp
|
||||
from jinja2 import StrictUndefined
|
||||
from pytest_lazyfixture import lazy_fixture
|
||||
from werkzeug.security import gen_salt
|
||||
|
||||
from canaille import create_app
|
||||
from canaille.app import models
|
||||
from canaille.backends import available_backends
|
||||
|
||||
|
||||
@pytest.fixture(autouse=True, scope="session")
|
||||
def babel_catalogs():
|
||||
|
|
|
@ -1,9 +1,10 @@
|
|||
import datetime
|
||||
from unittest import mock
|
||||
|
||||
from canaille.app import models
|
||||
from flask import g
|
||||
|
||||
from canaille.app import models
|
||||
|
||||
|
||||
def test_index(testclient, user):
|
||||
res = testclient.get("/", status=302)
|
||||
|
|
|
@ -2,9 +2,10 @@ import datetime
|
|||
from unittest import mock
|
||||
|
||||
import freezegun
|
||||
from flask import url_for
|
||||
|
||||
from canaille.core.endpoints.account import EmailConfirmationPayload
|
||||
from canaille.core.endpoints.account import RegistrationPayload
|
||||
from flask import url_for
|
||||
|
||||
|
||||
def test_confirmation_disabled_email_editable(testclient, backend, logged_user):
|
||||
|
|
|
@ -1,8 +1,9 @@
|
|||
import datetime
|
||||
|
||||
from flask import g
|
||||
|
||||
from canaille.app import models
|
||||
from canaille.core.endpoints.account import RegistrationPayload
|
||||
from flask import g
|
||||
|
||||
|
||||
def test_invitation(testclient, logged_admin, foo_group, smtpd):
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
import pytest
|
||||
|
||||
from canaille.app import models
|
||||
from canaille.core.models import Group
|
||||
from canaille.core.models import User
|
||||
|
|
|
@ -1,8 +1,9 @@
|
|||
import pytest
|
||||
from canaille.core.populate import fake_users
|
||||
from flask import g
|
||||
from webtest import Upload
|
||||
|
||||
from canaille.core.populate import fake_users
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def configuration(configuration):
|
||||
|
|
|
@ -1,8 +1,9 @@
|
|||
import datetime
|
||||
|
||||
from canaille.app import models
|
||||
from webtest import Upload
|
||||
|
||||
from canaille.app import models
|
||||
|
||||
|
||||
def test_photo(testclient, user, jpeg_photo):
|
||||
user.photo = jpeg_photo
|
||||
|
|
|
@ -1,9 +1,10 @@
|
|||
import datetime
|
||||
from unittest import mock
|
||||
|
||||
from canaille.app import models
|
||||
from flask import g
|
||||
|
||||
from canaille.app import models
|
||||
|
||||
|
||||
def test_edition(
|
||||
testclient,
|
||||
|
|
|
@ -1,9 +1,10 @@
|
|||
from unittest import mock
|
||||
|
||||
import freezegun
|
||||
from flask import url_for
|
||||
|
||||
from canaille.app import models
|
||||
from canaille.core.endpoints.account import RegistrationPayload
|
||||
from flask import url_for
|
||||
|
||||
|
||||
def test_registration_without_email_validation(testclient, backend, foo_group):
|
||||
|
|
|
@ -1,8 +1,9 @@
|
|||
import datetime
|
||||
|
||||
from werkzeug.security import gen_salt
|
||||
|
||||
from canaille.app import models
|
||||
from canaille.commands import cli
|
||||
from werkzeug.security import gen_salt
|
||||
|
||||
|
||||
def test_clean_command(testclient, backend, client, user):
|
||||
|
|
|
@ -4,11 +4,12 @@ import uuid
|
|||
|
||||
import pytest
|
||||
from authlib.oidc.core.grants.util import generate_id_token
|
||||
from werkzeug.security import gen_salt
|
||||
|
||||
from canaille.app import models
|
||||
from canaille.oidc.installation import generate_keypair
|
||||
from canaille.oidc.oauth import generate_user_info
|
||||
from canaille.oidc.oauth import get_jwt_config
|
||||
from werkzeug.security import gen_salt
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
|
|
|
@ -4,11 +4,12 @@ from urllib.parse import urlsplit
|
|||
import freezegun
|
||||
from authlib.jose import jwt
|
||||
from authlib.oauth2.rfc7636 import create_s256_code_challenge
|
||||
from canaille.app import models
|
||||
from canaille.oidc.oauth import setup_oauth
|
||||
from flask import g
|
||||
from werkzeug.security import gen_salt
|
||||
|
||||
from canaille.app import models
|
||||
from canaille.oidc.oauth import setup_oauth
|
||||
|
||||
from . import client_credentials
|
||||
|
||||
|
||||
|
|
|
@ -2,14 +2,16 @@
|
|||
|
||||
https://openid.net/specs/openid-connect-core-1_0.html#AuthorizationEndpoint
|
||||
"""
|
||||
|
||||
import datetime
|
||||
import uuid
|
||||
from urllib.parse import parse_qs
|
||||
from urllib.parse import urlsplit
|
||||
|
||||
from flask import url_for
|
||||
|
||||
from canaille.app import models
|
||||
from canaille.core.endpoints.account import RegistrationPayload
|
||||
from flask import url_for
|
||||
|
||||
|
||||
def test_prompt_none(testclient, logged_user, client):
|
||||
|
|
|
@ -1,8 +1,9 @@
|
|||
import datetime
|
||||
|
||||
from canaille.app import models
|
||||
from werkzeug.security import gen_salt
|
||||
|
||||
from canaille.app import models
|
||||
|
||||
|
||||
def test_no_logged_no_access(testclient):
|
||||
testclient.get("/admin/client", status=403)
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
from canaille.app import models
|
||||
from werkzeug.security import gen_salt
|
||||
|
||||
from canaille.app import models
|
||||
|
||||
|
||||
def test_no_logged_no_access(testclient):
|
||||
testclient.get("/admin/authorization", status=403)
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
import warnings
|
||||
|
||||
import pytest
|
||||
|
||||
from canaille.app.configuration import ConfigurationException
|
||||
from canaille.app.configuration import validate
|
||||
from canaille.oidc.oauth import get_issuer
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
from unittest import mock
|
||||
|
||||
from authlib.jose import jwt
|
||||
|
||||
from canaille.app import models
|
||||
|
||||
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
from authlib.oidc.core.grants.util import generate_id_token
|
||||
|
||||
from canaille.oidc.oauth import generate_user_info
|
||||
from canaille.oidc.oauth import get_jwt_config
|
||||
|
||||
|
|
|
@ -2,6 +2,7 @@ from urllib.parse import parse_qs
|
|||
from urllib.parse import urlsplit
|
||||
|
||||
from authlib.jose import jwt
|
||||
|
||||
from canaille.app import models
|
||||
|
||||
|
||||
|
|
|
@ -2,6 +2,7 @@ from urllib.parse import parse_qs
|
|||
from urllib.parse import urlsplit
|
||||
|
||||
from authlib.jose import jwt
|
||||
|
||||
from canaille.app import models
|
||||
|
||||
|
||||
|
|
|
@ -1,8 +1,9 @@
|
|||
import datetime
|
||||
|
||||
from canaille.app import models
|
||||
from werkzeug.security import gen_salt
|
||||
|
||||
from canaille.app import models
|
||||
|
||||
|
||||
def test_no_logged_no_access(testclient):
|
||||
testclient.get("/admin/token", status=403)
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
from canaille.oidc.oauth import claims_from_scope
|
||||
from canaille.oidc.oauth import DEFAULT_JWT_MAPPING
|
||||
from canaille.oidc.oauth import claims_from_scope
|
||||
from canaille.oidc.oauth import generate_user_claims
|
||||
|
||||
|
||||
|
|
Loading…
Reference in a new issue