forked from Github-Mirrors/canaille
60 lines
1.6 KiB
Python
60 lines
1.6 KiB
Python
"""Temporary workaround for https://github.com/click-contrib/sphinx-click/issues/139"""
|
|
|
|
import inspect
|
|
|
|
import click
|
|
|
|
from canaille.backends.commands import create_factory
|
|
from canaille.backends.commands import delete_factory
|
|
from canaille.backends.commands import get_factory
|
|
from canaille.backends.commands import set_factory
|
|
from canaille.core.models import Group
|
|
from canaille.core.models import User
|
|
from canaille.oidc.basemodels import AuthorizationCode
|
|
from canaille.oidc.basemodels import Client
|
|
from canaille.oidc.basemodels import Consent
|
|
from canaille.oidc.basemodels import Token
|
|
|
|
MODELS = {
|
|
"user": User,
|
|
"group": Group,
|
|
"client": Client,
|
|
"authorizationcode": AuthorizationCode,
|
|
"token": Token,
|
|
"consent": Consent,
|
|
}
|
|
|
|
|
|
class ModelCommand(click.Group):
|
|
def __init__(self, *args, factory, **kwargs):
|
|
super().__init__(*args, **kwargs)
|
|
self.factory = factory
|
|
|
|
def list_commands(self, ctx):
|
|
base = super().list_commands(ctx)
|
|
lazy = sorted(MODELS.keys())
|
|
return base + lazy
|
|
|
|
def get_command(self, ctx, cmd_name):
|
|
model = MODELS.get(cmd_name)
|
|
return self.factory(model)
|
|
|
|
|
|
@click.command(cls=ModelCommand, factory=get_factory, help=inspect.getdoc(get_factory))
|
|
def get(): ...
|
|
|
|
|
|
@click.command(cls=ModelCommand, factory=set_factory, help=inspect.getdoc(set_factory))
|
|
def set(): ...
|
|
|
|
|
|
@click.command(
|
|
cls=ModelCommand, factory=create_factory, help=inspect.getdoc(create_factory)
|
|
)
|
|
def create(): ...
|
|
|
|
|
|
@click.command(
|
|
cls=ModelCommand, factory=delete_factory, help=inspect.getdoc(delete_factory)
|
|
)
|
|
def delete(): ...
|