[build-system] requires = ["poetry>=1.0.0", "babel"] build-backend = "poetry.masonry.api" [tool] [tool.poetry] name = "Canaille" version = "0.0.42" description = "Lightweight identity and autorization management software" license = "MIT" keywords = ["oidc", "oauth", "oauth2", "openid", "identity"] classifiers = [ "Intended Audience :: Developers", "Development Status :: 3 - Alpha", "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: Implementation :: CPython", "License :: OSI Approved :: MIT License", "Environment :: Web Environment", "Programming Language :: Python", "Operating System :: OS Independent", "Topic :: System :: Systems Administration :: Authentication/Directory", "Topic :: System :: Systems Administration :: Authentication/Directory :: LDAP", ] authors = ["Yaal Coop "] maintainers = [ "Éloi Rivard ", ] homepage = "https://canaille.yaal.coop" documentation = "https://canaille.readthedocs.io/en/latest/" repository = "https://gitlab.com/yaal/canaille" readme = "README.md" include = ["canaille/translations/*/LC_MESSAGES/*.mo"] [tool.poetry.dependencies] python = "^3.8" flask = "^3.0.0" flask-wtf = "^1.2.1" wtforms = "^3.1.1" # extra : front email_validator = {version = "^2.0.0", optional=true} flask-babel = {version = "^4.0.0", optional=true} flask-themer = {version = "^2.0.0", optional=true} pycountry = {version = ">=22.1.10", optional=true} pytz = {version = ">=2022.7", optional=true} toml = {version = "^0.10.0", optional=true, python = "<3.11"} # extra : oidc authlib = {version = "^1.2.1", optional=true} # extra : ldap python-ldap = {version = "^3.4.0", optional=true} # extra : sentry sentry-sdk = {version = "<2", optional=true, extras=["flask"]} # extra : sql passlib = {version = "^1.7.4", optional=true} sqlalchemy = {version = "^2.0.23", optional=true} sqlalchemy-json = {version = "^0.7.0", optional=true} sqlalchemy-utils = {version = "^0.41.1", optional=true} [tool.poetry.group.doc] optional = true [tool.poetry.group.doc.dependencies] shibuya = "^2024.3.1" sphinx = "^7.0.0" sphinx-sitemap = "^2.5.1" sphinx-issues = "^4.0.0" [tool.poetry.group.dev.dependencies] coverage = {version = "*", extras=["toml"]} faker = "*" flask-webtest = "*" freezegun = "*" pre-commit = "*" pyquery = "*" pytest = "^7.0.0" pytest-coverage = "*" pytest-httpserver = "*" pytest-lazy-fixture = "==0.6.3" pytest-smtpd = "^0.1.0" pytest-xdist = "^3.3.1" slapd = "*" toml = "^0.10.0" [tool.poetry.group.demo] optional = true [tool.poetry.group.demo.dependencies] faker = "*" honcho = "*" slapd = "*" requests = "*" [tool.poetry.extras] front = [ "click", "email_validator", "flask-babel", "flask-themer", "pycountry", "pytz", "toml", ] ldap = [ "python-ldap", ] oidc = [ "authlib", ] sentry = [ "sentry-sdk", ] sql = [ "passlib", "sqlalchemy", "sqlalchemy-json", "sqlalchemy-utils", ] all = [ "click", "email_validator", "flask-babel", "flask-themer", "passlib", "pycountry", "pytz", "toml", "python-ldap", "authlib", "sentry-sdk", "sqlalchemy", "sqlalchemy-json", "sqlalchemy-utils", ] [tool.poetry.scripts] canaille = "canaille.commands:cli" [options.packages.find] exclude = [ "tests", "tests.*", "doc", "doc.*", ] [tool.poetry.build] generate-setup-file = false script = "build.py" [tool.coverage.run] source = [ "canaille", "tests", ] omit = [".tox/*"] branch = true [tool.coverage.report] exclude_lines = [ "pragma: no cover", "raise NotImplementedError", "except ImportError", "if app.debug", ] [tool.ruff.lint] ignore = ["E501", "E722"] [tool.tox] legacy_tox_ini = """ [tox] isolated_build = true skipsdist = true envlist = style py38 py39 py310 py311 py312 doc coverage [testenv] allowlist_externals = poetry commands = poetry install --extras all poetry run pytest --showlocals --full-trace {posargs} [testenv:style] commands = pip install pre-commit pre-commit run --all-files [testenv:doc] commands = poetry install --with doc --without dev --extras oidc poetry run sphinx-build doc build/sphinx/html [testenv:coverage] commands = poetry install --extras all poetry run pytest --cov --cov-fail-under=100 --cov-report term:skip-covered {posargs:-n auto} poetry run coverage html """