import click
import glotaran as gta
from .commands.optimize import optimize_cmd
from .commands.pluginlist import plugin_list_cmd
from .commands.print import print_cmd
from .commands.validate import validate_cmd
[docs]class Cli(click.Group):
def __init__(self, *args, **kwargs):
self.help_priorities = {}
super().__init__(*args, **kwargs)
[docs] def get_help(self, ctx):
self.list_commands = self.list_commands_for_help
return super().get_help(ctx)
[docs] 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
)
)
[docs] 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
@click.group(cls=Cli)
@click.version_option(version=gta.__version__)
def glotaran():
pass
glotaran.add_command(
glotaran.command(
name="pluginlist", short_help="Prints a list of installed plugins.", help_priority=4
)(plugin_list_cmd)
)
glotaran.add_command(
glotaran.command(name="print", short_help="Prints a model as markdown.", help_priority=3)(
print_cmd
)
)
glotaran.add_command(
glotaran.command(name="validate", short_help="Validates a model file.", help_priority=2)(
validate_cmd
)
)
glotaran.add_command(
glotaran.command(name="optimize", short_help="Optimizes a model.", help_priority=1)(
optimize_cmd
)
)
if __name__ == "__main__":
glotaran()