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

Commit a30c50f

Browse files
committed
Merge branch 'master' of github.com:Paperspace/paperspace-python into PS-9645-Add-support-for-managing-deployments
2 parents 23505d0 + bf93fbd commit a30c50f

File tree

5 files changed

+197
-56
lines changed

5 files changed

+197
-56
lines changed

paperspace/cli.py

Lines changed: 45 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
import click
66

7-
from paperspace import constants
7+
from paperspace import constants, client, config
88
from paperspace.commands import experiments as experiments_commands, deployments as deployments_commands
99

1010

@@ -116,6 +116,10 @@ def common_experiments_create_options(f):
116116
"--modelPath",
117117
"modelPath",
118118
),
119+
click.option(
120+
"--apiKey",
121+
"api_key",
122+
)
119123
]
120124
return functools.reduce(lambda x, opt: opt(x), reversed(options), f)
121125

@@ -232,60 +236,84 @@ def common_experiments_create_single_node_options(f):
232236
@create.command(name="multinode")
233237
@common_experiments_create_options
234238
@common_experiment_create_multi_node_options
235-
def create_multi_node(**kwargs):
239+
def create_multi_node(api_key, **kwargs):
236240
del_if_value_is_none(kwargs)
237-
experiments_commands.create_experiment(kwargs)
241+
experiments_api = client.API(config.CONFIG_EXPERIMENTS_HOST, api_key=api_key)
242+
experiments_commands.create_experiment(kwargs, api=experiments_api)
238243

239244

240245
@create.command(name="singlenode")
241246
@common_experiments_create_options
242247
@common_experiments_create_single_node_options
243-
def create_single_node(**kwargs):
248+
def create_single_node(api_key, **kwargs):
244249
kwargs["experimentTypeId"] = constants.ExperimentType.SINGLE_NODE
245250
del_if_value_is_none(kwargs)
246-
experiments_commands.create_experiment(kwargs)
251+
experiments_api = client.API(config.CONFIG_EXPERIMENTS_HOST, api_key=api_key)
252+
experiments_commands.create_experiment(kwargs, api=experiments_api)
247253

248254

249255
@create_and_start.command(name="multinode")
250256
@common_experiments_create_options
251257
@common_experiment_create_multi_node_options
252-
def create_and_start_multi_node(**kwargs):
258+
def create_and_start_multi_node(api_key, **kwargs):
253259
del_if_value_is_none(kwargs)
254-
experiments_commands.create_and_start_experiment(kwargs)
260+
experiments_api = client.API(config.CONFIG_EXPERIMENTS_HOST, api_key=api_key)
261+
experiments_commands.create_and_start_experiment(kwargs, api=experiments_api)
255262

256263

257264
@create_and_start.command(name="singlenode")
258265
@common_experiments_create_options
259266
@common_experiments_create_single_node_options
260-
def create_and_start_single_node(**kwargs):
267+
def create_and_start_single_node(api_key, **kwargs):
261268
kwargs["experimentTypeId"] = constants.ExperimentType.SINGLE_NODE
262269
del_if_value_is_none(kwargs)
263-
experiments_commands.create_and_start_experiment(kwargs)
270+
experiments_api = client.API(config.CONFIG_EXPERIMENTS_HOST, api_key=api_key)
271+
experiments_commands.create_and_start_experiment(kwargs, api=experiments_api)
264272

265273

266274
@experiments.command()
267275
@click.argument("experiment-handle")
268-
def start(experiment_handle):
269-
experiments_commands.start_experiment(experiment_handle)
276+
@click.option(
277+
"--apiKey",
278+
"api_key",
279+
)
280+
def start(experiment_handle, api_key):
281+
experiments_api = client.API(config.CONFIG_EXPERIMENTS_HOST, api_key=api_key)
282+
experiments_commands.start_experiment(experiment_handle, api=experiments_api)
270283

271284

272285
@experiments.command()
273286
@click.argument("experiment-handle")
274-
def stop(experiment_handle):
275-
experiments_commands.stop_experiment(experiment_handle)
287+
@click.option(
288+
"--apiKey",
289+
"api_key",
290+
)
291+
def stop(experiment_handle, api_key):
292+
experiments_api = client.API(config.CONFIG_EXPERIMENTS_HOST, api_key=api_key)
293+
experiments_commands.stop_experiment(experiment_handle, api=experiments_api)
276294

277295

278296
@experiments.command("list")
279297
@click.option("--projectHandle", "-p", "project_handles", multiple=True)
280-
def list_experiments(project_handles):
281-
command = experiments_commands.ListExperimentsCommand()
298+
@click.option(
299+
"--apiKey",
300+
"api_key",
301+
)
302+
def list_experiments(project_handles, api_key):
303+
experiments_api = client.API(config.CONFIG_EXPERIMENTS_HOST, api_key=api_key)
304+
command = experiments_commands.ListExperimentsCommand(api=experiments_api)
282305
command.execute(project_handles)
283306

284307

285308
@experiments.command("details")
286309
@click.argument("experiment-handle")
287-
def get_experiment_details(experiment_handle):
288-
experiments_commands.get_experiment_details(experiment_handle)
310+
@click.option(
311+
"--apiKey",
312+
"api_key",
313+
)
314+
def get_experiment_details(experiment_handle, api_key):
315+
experiments_api = client.API(config.CONFIG_EXPERIMENTS_HOST, api_key=api_key)
316+
experiments_commands.get_experiment_details(experiment_handle, api=experiments_api)
289317

290318

291319
# TODO: delete experiment - not implemented in the api

paperspace/client.py

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,27 @@
11
import requests
22

3-
from paperspace import logger
3+
from paperspace import logger, config, version
4+
5+
default_headers = {"X-API-Key": config.PAPERSPACE_API_KEY,
6+
"ps_client_name": "paperspace-python",
7+
"ps_client_version": version.version}
48

59

610
class API(object):
7-
def __init__(self, api_url, headers=None):
11+
def __init__(self, api_url, headers=None, api_key=None):
812
self.api_url = api_url
9-
self.headers = headers or {}
13+
headers = headers or default_headers
14+
self.headers = headers.copy()
15+
if api_key:
16+
self.api_key = api_key
17+
18+
@property
19+
def api_key(self):
20+
return self.headers.get("X-API-Key")
21+
22+
@api_key.setter
23+
def api_key(self, value):
24+
self.headers["X-API-Key"] = value
1025

1126
def get_path(self, url):
1227
api_url = self.api_url if not self.api_url.endswith("/") else self.api_url[:-1]

paperspace/commands/experiments.py

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,11 @@
22

33
import terminaltables
44

5-
from paperspace import config, version, client, logger, constants
5+
from paperspace import logger, constants, client, config
66
from paperspace.logger import log_response
77
from paperspace.utils import get_terminal_lines
88

9-
default_headers = {"X-API-Key": config.PAPERSPACE_API_KEY,
10-
"ps_client_name": "paperspace-python",
11-
"ps_client_version": version.version}
12-
experiments_api = client.API(config.CONFIG_EXPERIMENTS_HOST, headers=default_headers)
9+
experiments_api = client.API(config.CONFIG_EXPERIMENTS_HOST, headers=client.default_headers)
1310

1411

1512
def _log_create_experiment(response, success_msg_template, error_msg, logger_=logger):
@@ -182,4 +179,4 @@ def get_experiment_details(experiment_handle, api=experiments_api):
182179
logger.log("Error parsing response data")
183180
logger.debug(e)
184181

185-
log_response(response, details, "Unknown error while retrieving details of the experiment")
182+
log_response(response, details, "Unknown error while retrieving details of the experiment")

0 commit comments

Comments
 (0)