Source code for glotaran.cli.main

import click

from glotaran import __version__ as VERSION
from glotaran.cli.commands.optimize import optimize_cmd
from glotaran.cli.commands.pluginlist import plugin_list_cmd
from glotaran.cli.commands.print import print_cmd
from glotaran.cli.commands.validate import validate_cmd


class Cli(click.Group):
    """The glotaran CLI implementation of :class:`click.group`"""

    def __init__(self, *args, **kwargs):
        click.echo(
            "[DEPRECATED] The pyglotaran command line interface will be removed without "
            "replacement in version '0.8.0' since it lacks a lot of essential functionality and "
            "isn't used. The currently recommended usage of pyglotaran is in JuPyteR notebooks.",
            err=True,
        )
        self.help_priorities = {}
        super().__init__(*args, **kwargs)

    def get_help(self, ctx):
        self.list_commands = self.list_commands_for_help
        return super().get_help(ctx)

    def list_commands_for_help(self, ctx):
        """reorder the list of commands when listing the help"""
        commands = super().list_commands(ctx)
        return (
            c[1]
            for c in sorted(
                (self.help_priorities.get(command, 1), command) for command in commands
            )
        )

    def command(self, *args, **kwargs):
        """Behaves the same as `click.Group.command()` except capture
        a priority for listing command names in help.
        """
        help_priority = kwargs.pop("help_priority", 1)
        help_priorities = self.help_priorities

        def decorator(f):
            cmd = super(Cli, self).command(*args, **kwargs)(f)
            help_priorities[cmd.name] = help_priority
            return cmd

        return decorator


[docs] @click.group(cls=Cli) @click.version_option(version=VERSION) def main(prog_name="glotaran"): """The glotaran CLI main function."""
main.add_command( main.command( name="pluginlist", short_help="Prints a list of installed plugins.", help_priority=4 )(plugin_list_cmd) ) main.add_command( main.command(name="print", short_help="Prints a model as markdown.", help_priority=3)( print_cmd ) ) main.add_command( main.command(name="validate", short_help="Validates a model file.", help_priority=2)( validate_cmd ) ) main.add_command( main.command(name="optimize", short_help="Optimizes a model.", help_priority=1)(optimize_cmd) ) if __name__ == "__main__": raise SystemExit(main(prog_name="glotaran"))