canaille-globuzma/canaille/app/commands.py
2025-01-10 12:32:18 +01:00

66 lines
1.5 KiB
Python

import functools
import sys
import click
from flask import current_app
from flask.cli import with_appcontext
from canaille.backends import Backend
def with_backendcontext(func):
@functools.wraps(func)
def _func(*args, **kwargs):
if not current_app.config["TESTING"]: # pragma: no cover
with Backend.instance.session():
result = func(*args, **kwargs)
else:
result = func(*args, **kwargs)
return result
return _func
@click.command()
@with_appcontext
@with_backendcontext
def check():
"""Test the configuration file.
Attempt to reach the database and the SMTP server with the provided
credentials.
"""
from canaille.app.configuration import ConfigurationException
from canaille.app.configuration import validate
try:
validate(current_app.config, validate_remote=True)
except ConfigurationException as exc:
print(exc)
sys.exit(1)
@click.command()
@with_appcontext
def install():
"""Installs canaille elements from the configuration.
For instance, depending on the configuration, this can generate OIDC
keys or install LDAP schemas.
"""
from canaille.app.configuration import ConfigurationException
from canaille.app.installation import install
try:
install(current_app)
except ConfigurationException as exc: # pragma: no cover
print(exc)
sys.exit(1)
def register(cli):
cli.add_command(check)
cli.add_command(install)