canaille-globuzma/canaille/commands.py

140 lines
3.1 KiB
Python
Raw Normal View History

import functools
2021-10-13 08:12:44 +00:00
import sys
2021-10-13 07:38:44 +00:00
2021-12-20 22:57:27 +00:00
import click
2021-10-13 07:38:44 +00:00
from canaille import create_app
from canaille.models import Group
from canaille.models import User
2022-01-11 18:49:06 +00:00
from canaille.oidc.models import AuthorizationCode
from canaille.oidc.models import Token
2021-10-13 07:38:44 +00:00
from flask import current_app
2021-12-20 22:57:27 +00:00
from flask.cli import FlaskGroup
from flask.cli import with_appcontext
try:
import faker
HAS_FAKER = True
except ImportError: # pragma: no cover
HAS_FAKER = False
def with_backendcontext(func):
@functools.wraps(func)
def _func(*args, **kwargs):
from canaille.ldap_backend.backend import (
setup_backend,
teardown_backend,
)
if not current_app.config["TESTING"]: # pragma: no cover
setup_backend(current_app)
result = func(*args, **kwargs)
if not current_app.config["TESTING"]: # pragma: no cover
teardown_backend(current_app)
return result
return _func
2021-10-13 07:38:44 +00:00
@click.group(cls=FlaskGroup, create_app=create_app)
def cli():
pass
2021-10-13 07:38:44 +00:00
@cli.command()
@with_appcontext
@with_backendcontext
def clean():
"""
Remove expired tokens and authorization codes.
"""
for t in Token.query():
if t.is_expired():
t.delete()
for a in AuthorizationCode.query():
if a.is_expired():
a.delete()
2021-10-13 08:12:44 +00:00
@cli.command()
@with_appcontext
def check():
"""
Check the configuration file.
"""
from canaille.configuration import validate, ConfigurationException
2021-10-29 12:20:06 +00:00
2021-10-13 08:12:44 +00:00
try:
validate(current_app.config, validate_remote=True)
except ConfigurationException as exc:
print(exc)
sys.exit(1)
2021-11-08 17:09:05 +00:00
@cli.command()
@with_appcontext
def install():
"""
2021-11-08 17:30:31 +00:00
Installs canaille elements from the configuration.
2021-11-08 17:09:05 +00:00
"""
from canaille.installation import install
2021-11-13 18:11:56 +00:00
from canaille.configuration import ConfigurationException
2021-11-08 17:09:05 +00:00
try:
install(current_app.config)
2022-12-10 00:11:33 +00:00
except ConfigurationException as exc: # pragma: no cover
2021-11-08 17:09:05 +00:00
print(exc)
sys.exit(1)
if HAS_FAKER: # pragma: no branch
@cli.group()
@click.option("--nb", default=1, help="Number of items to create")
@click.pass_context
@with_appcontext
def populate(ctx, nb):
"""
Populate the database with generated random data.
"""
ctx.ensure_object(dict)
ctx.obj["number"] = nb
@populate.command()
@click.pass_context
@with_appcontext
@with_backendcontext
def users(ctx):
"""
Populate the database with generated random users.
"""
2023-02-26 21:21:55 +00:00
from canaille.populate import fake_users
2023-02-26 21:21:55 +00:00
fake_users(ctx.obj["number"])
@populate.command()
@click.pass_context
@click.option(
"--nb-users-max",
default=1,
help="The maximum number of users that will randomly be affected in the group",
)
@with_appcontext
@with_backendcontext
def groups(ctx, nb_users_max):
"""
Populate the database with generated random groups.
"""
from canaille.populate import fake_groups
2023-02-26 21:21:55 +00:00
fake_groups(ctx.obj["number"], nb_users_max)