import logging
import click
from msprof_analyze.cli.analyze_cli import analyze_cli
from msprof_analyze.cli.complete_cli import auto_complete_cli
from msprof_analyze.cli.compare_cli import compare_cli
from msprof_analyze.cli.cluster_cli import cluster_cli
from msprof_analyze.advisor.version import print_version_callback, cli_version
from msprof_analyze.cli.precheck_cli import precheck_cli
logger = logging.getLogger()
CONTEXT_SETTINGS = dict(help_option_names=['-H', '-h', '--help'],
max_content_width=160)
COMMAND_PRIORITY = {
"advisor": 1,
"compare": 2,
"cluster": 3,
"precheck": 4,
"auto-completion": 5
}
class SpecialHelpOrder(click.Group):
def __init__(self, *args, **kwargs):
super(SpecialHelpOrder, self).__init__(*args, **kwargs)
def list_commands_for_help(self, ctx):
"""
reorder the list of commands when listing the help
"""
commands = super(SpecialHelpOrder, self).list_commands(ctx)
priority_items = []
for command in commands:
priority_items.append((COMMAND_PRIORITY.get(command, float('INF')), command))
return [item[1] for item in sorted(priority_items)]
def get_help(self, ctx):
self.list_commands = self.list_commands_for_help
return super(SpecialHelpOrder, self).get_help(ctx)
def parse_args(self, ctx, args):
has_subcommand = any(arg in self.list_commands(ctx) for arg in args if not arg.startswith('-'))
if not has_subcommand and args:
args = ['cluster'] + args
elif not has_subcommand and not args:
args = ['cluster', '--help']
return super(SpecialHelpOrder, self).parse_args(ctx, args)
@click.group(context_settings=CONTEXT_SETTINGS, cls=SpecialHelpOrder, invoke_without_command=True)
@click.option('--version', '-V', '-v', is_flag=True,
callback=print_version_callback, expose_value=False,
is_eager=True, help=cli_version())
@click.pass_context
def msprof_analyze_cli(ctx, **kwargs):
"""如果没有子命令,默认执行 cluster"""
if ctx.invoked_subcommand is None:
ctx.invoke(cluster_cli)
msprof_analyze_cli.add_command(analyze_cli, name="advisor")
msprof_analyze_cli.add_command(compare_cli, name="compare")
msprof_analyze_cli.add_command(cluster_cli, name="cluster")
msprof_analyze_cli.add_command(precheck_cli, name="precheck")
msprof_analyze_cli.add_command(auto_complete_cli, name="auto-completion")