summaryrefslogtreecommitdiffstats
path: root/eos_downloader/cli/utils.py
blob: 4a14f5301793a582f6e69996f3063a20e8f94aaa (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#!/usr/bin/python
# coding: utf-8 -*-
# pylint: disable=inconsistent-return-statements


"""
Extension for the python ``click`` module
to provide a group or command with aliases.
"""


from typing import Any
import click


class AliasedGroup(click.Group):
    """
    Implements a subclass of Group that accepts a prefix for a command.
    If there were a command called push, it would accept pus as an alias (so long as it was unique)
    """
    def get_command(self, ctx: click.Context, cmd_name: str) -> Any:
        """Documentation to build"""
        rv = click.Group.get_command(self, ctx, cmd_name)
        if rv is not None:
            return rv
        matches = [x for x in self.list_commands(ctx)
                   if x.startswith(cmd_name)]
        if not matches:
            return None
        if len(matches) == 1:
            return click.Group.get_command(self, ctx, matches[0])
        ctx.fail(f"Too many matches: {', '.join(sorted(matches))}")

    def resolve_command(self, ctx: click.Context, args: Any) -> Any:
        """Documentation to build"""
        # always return the full command name
        _, cmd, args = super().resolve_command(ctx, args)
        return cmd.name, cmd, args