"""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(): ...