Skip to content
This repository was archived by the owner on Aug 11, 2020. It is now read-only.

Commit 179003a

Browse files
Merge pull request #113 from Paperspace/PS-9993/singular-alias
cli group alias supported
2 parents fd2160d + 9ed096e commit 179003a

File tree

9 files changed

+56
-11
lines changed

9 files changed

+56
-11
lines changed

paperspace/cli/common.py

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import getpass
22

33
import click
4+
from click import group
45
from click_didyoumean import DYMMixin
56
from click_help_colors import HelpColorsGroup
67

@@ -19,7 +20,27 @@ def del_if_value_is_none(dict_):
1920

2021

2122
class ClickGroup(DYMMixin, HelpColorsGroup):
22-
pass
23+
def group(self, *args, **kwargs):
24+
aliases = []
25+
_args = args
26+
if args and isinstance(args[0], list):
27+
# we have a list so create group aliases
28+
aliases = args[0][1:]
29+
_args = [args[0][0]] + list(args[1:])
30+
31+
if 'alias' in kwargs:
32+
aliases.append(kwargs.pop('alias'))
33+
34+
def decorator(f):
35+
cmd = group(*_args, **kwargs)(f)
36+
self.add_command(cmd)
37+
for alias in set(aliases):
38+
alias_cmd = group(alias, **kwargs)(f)
39+
self.add_command(alias_cmd)
40+
alias_cmd.commands = cmd.commands
41+
return cmd
42+
43+
return decorator
2344

2445

2546
def prompt_for_secret(prompt):

paperspace/cli/deployments.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,14 @@
22

33
import click
44

5-
from paperspace import constants, client, config
5+
from paperspace import client, config
66
from paperspace.cli.cli import cli
77
from paperspace.cli.cli_types import ChoiceType
88
from paperspace.cli.common import api_key_option, del_if_value_is_none, ClickGroup
99
from paperspace.commands import deployments as deployments_commands
1010

1111

12-
@cli.group("deployments", help="Manage deployments", cls=ClickGroup)
12+
@cli.group("deployments", alias='deployment', help="Manage deployments", cls=ClickGroup)
1313
def deployments():
1414
pass
1515

@@ -22,7 +22,8 @@ def deployments():
2222
)
2323

2424
DEPLOYMENT_MACHINE_TYPES = ("G1", "G6", "G12",
25-
"K80", "P100", "GV100")
25+
"K80", "P100", "GV100")
26+
2627

2728
@deployments.command("create", help="Create new deployment")
2829
@click.option(
@@ -135,4 +136,4 @@ def start_deployment(id_, api_key=None):
135136
def stop_deployment(id_, api_key=None):
136137
deployments_api = client.API(config.CONFIG_HOST, api_key=api_key)
137138
command = deployments_commands.StopDeploymentCommand(api=deployments_api)
138-
command.execute(id_)
139+
command.execute(id_)

paperspace/cli/experiments.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
)
1818

1919

20-
@cli.group("experiments", help="Manage experiments", cls=ClickGroup)
20+
@cli.group(["experiments", "experiment"], help="Manage experiments", cls=ClickGroup)
2121
def experiments():
2222
pass
2323

paperspace/cli/hyperparameters.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
from paperspace.commands import hyperparameters as hyperparameters_commands
1010

1111

12-
@cli.group("hyperparameters", help="Manage hyperparameters", cls=ClickGroup)
12+
@cli.group(["hyperparameters", "hyperparameter"], help="Manage hyperparameters", cls=ClickGroup)
1313
def hyperparameters_group():
1414
pass
1515

paperspace/cli/jobs.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
from paperspace.commands import jobs as jobs_commands
88

99

10-
@cli.group("jobs", help="Manage gradient jobs", cls=ClickGroup)
10+
@cli.group(["jobs", "job"], help="Manage gradient jobs", cls=ClickGroup)
1111
def jobs_group():
1212
pass
1313

paperspace/cli/machines.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
)
1919

2020

21-
@cli.group("machines", help="Manage machines", cls=ClickGroup)
21+
@cli.group(["machines", "machine"], help="Manage machines", cls=ClickGroup)
2222
def machines_group():
2323
pass
2424

paperspace/cli/models.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
from paperspace.commands import models as models_commands
77

88

9-
@cli.group("models", help="Manage models", cls=common.ClickGroup)
9+
@cli.group(["models", "model"], help="Manage models", cls=common.ClickGroup)
1010
def models_group():
1111
pass
1212

paperspace/cli/projects.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
from paperspace.cli import common
55

66

7-
@cli.group("projects", help="Manage projects", cls=common.ClickGroup)
7+
@cli.group(["projects", "project"], help="Manage projects", cls=common.ClickGroup)
88
def projects_group():
99
pass
1010

tests/functional/test_jobs.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,29 @@ class TestJobs(object):
1616
EXPECTED_HEADERS_WITH_CHANGED_API_KEY["X-API-Key"] = "some_key"
1717

1818

19+
class TestJobsAlias(object):
20+
expected_help = """Usage: cli %s [OPTIONS] COMMAND [ARGS]...
21+
22+
Manage gradient jobs
23+
24+
Options:
25+
--help Show this message and exit.
26+
27+
Commands:
28+
artifacts Manage jobs' artifacts
29+
create Create job
30+
delete Delete job
31+
list List jobs with optional filtering
32+
log List job logs
33+
stop Stop running job
34+
"""
35+
@pytest.mark.parametrize("group_name", ("jobs", "job"))
36+
def test_alias_help(self, group_name):
37+
cli_runner = CliRunner()
38+
result = cli_runner.invoke(cli.cli, [group_name])
39+
assert result.output == self.expected_help % group_name
40+
41+
1942
class TestListJobs(TestJobs):
2043
URL = "https://api.paperspace.io/jobs/getJobs/"
2144
BASIC_COMMAND = ["jobs", "list"]

0 commit comments

Comments
 (0)