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

Commit bc8c07c

Browse files
BartoszCkiMudlaffP
authored andcommitted
Add optional --projectHandle to experiments list to filter experiments
1 parent 7cad8f2 commit bc8c07c

File tree

2 files changed

+54
-27
lines changed

2 files changed

+54
-27
lines changed

paperspace/cli.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -271,9 +271,11 @@ def stop(experiment_handle):
271271
commands.stop_experiment(experiment_handle)
272272

273273

274+
@click.option("--projectHandle", "project_handle")
274275
@experiments.command("list")
275-
def list_experiments():
276-
commands.list_experiments()
276+
def list_experiments(project_handle):
277+
command = commands.ListExperimentsCommand()
278+
command.execute(project_handle)
277279

278280

279281
@experiments.command("details")

paperspace/commands.py

Lines changed: 50 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -65,35 +65,60 @@ def stop_experiment(experiment_handle, api=experiments_api):
6565
_log_response(response, "Experiment stopped", "Unknown error while stopping the experiment")
6666

6767

68-
def _make_experiments_list_table(experiments):
69-
data = [("Name", "Handle", "Status")]
70-
for experiment in experiments:
71-
name = experiment["templateHistory"]["params"].get("name")
72-
handle = experiment["handle"]
73-
status = constants.ExperimentState.get_state_str(experiment["state"])
74-
data.append((name, handle, status))
68+
class ListExperimentsCommand(object):
69+
def __init__(self, api=experiments_api):
70+
self.api = api
7571

76-
ascii_table = terminaltables.AsciiTable(data)
77-
table_string = ascii_table.table
78-
return table_string
72+
def execute(self, project_handle=None):
73+
# TODO: change to limit: -1 when PS-9535 is deployed to production
74+
params = {"limit": 1000000} # to list all experiments
75+
if project_handle:
76+
params["projectHandle[0]"] = project_handle
77+
response = self.api.get("/experiments/", params=params)
7978

80-
81-
def list_experiments(api=experiments_api):
82-
# TODO: change to limit: -1 when PS-9535 is deployed to production
83-
response = api.get("/experiments/", params={"limit": 1000000})
84-
details = response.content
85-
if response.ok:
8679
try:
87-
experiments = response.json()["data"]
88-
details = _make_experiments_list_table(experiments)
80+
experiments = self._get_experiments_list(response, bool(project_handle))
8981
except (ValueError, KeyError) as e:
90-
logger.log("Error parsing response data")
91-
logger.debug(e)
92-
93-
if response.ok and len(details.splitlines()) > get_terminal_lines():
94-
pydoc.pager(details)
95-
else:
96-
_log_response(response, details, "Unknown error while retrieving list of experiments")
82+
logger.log("Error while parsing response data")
83+
else:
84+
self._log_experiments_list(experiments)
85+
86+
@staticmethod
87+
def _make_experiments_list_table(experiments):
88+
data = [("Name", "Handle", "Status")]
89+
for experiment in experiments:
90+
name = experiment["templateHistory"]["params"].get("name")
91+
handle = experiment["handle"]
92+
status = constants.ExperimentState.get_state_str(experiment["state"])
93+
data.append((name, handle, status))
94+
95+
ascii_table = terminaltables.AsciiTable(data)
96+
table_string = ascii_table.table
97+
return table_string
98+
99+
@staticmethod
100+
def _get_experiments_list(response, filtered=False):
101+
""""""
102+
103+
if not response.ok:
104+
raise ValueError("Unknown error")
105+
106+
experiments = response.json()["data"]
107+
if not filtered: # If filtering by projectHandle response data has different format
108+
return experiments
109+
110+
experiments = [experiment for experiment in experiments[0]["data"]]
111+
return experiments
112+
113+
def _log_experiments_list(self, experiments):
114+
if not experiments:
115+
logger.log("No experiments found")
116+
else:
117+
table_str = self._make_experiments_list_table(experiments)
118+
if len(table_str.splitlines()) > get_terminal_lines():
119+
pydoc.pager(table_str)
120+
else:
121+
logger.log(table_str)
97122

98123

99124
def _make_details_table(experiment):

0 commit comments

Comments
 (0)