Skip to content

Commit 0be0443

Browse files
committed
Merge remote-tracking branch 'origin/release/4.0'
2 parents ce8f015 + c10258f commit 0be0443

File tree

7 files changed

+97
-18
lines changed

7 files changed

+97
-18
lines changed

dataikuapi/dss/dataset.py

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -178,7 +178,7 @@ def compute_metrics(self, partition='', metric_ids=None, probes=None):
178178
"POST" , "%s/computeMetrics" % url,
179179
params={'partition':partition}, body=probes)
180180
else:
181-
return self.client._perform_empty(
181+
return self.client._perform_json(
182182
"POST" , "%s/computeMetrics" % url,
183183
params={'partition':partition})
184184

@@ -188,12 +188,13 @@ def run_checks(self, partition='', checks=None):
188188
setup on the dataset are used.
189189
"""
190190
if checks is None:
191-
return self.client._perform_empty(
192-
"POST" , "/projects/%s/datasets/%s/actions/runChecks" %(self.project_key, self.dataset_name, partition))
191+
return self.client._perform_json(
192+
"POST" , "/projects/%s/datasets/%s/actions/runChecks" %(self.project_key, self.dataset_name),
193+
params={'partition':partition})
193194
else:
194195
return self.client._perform_json(
195-
"POST" , "/projects/%s/datasets/%s/actions/runChecks" %(self.project_key, self.dataset_name, partition),
196-
params=checks)
196+
"POST" , "/projects/%s/datasets/%s/actions/runChecks" %(self.project_key, self.dataset_name),
197+
params={'partition':partition}, body=checks)
197198

198199
########################################################
199200
# Metrics

dataikuapi/dss/managedfolder.py

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ def get_definition(self):
3838
the definition, as a JSON object
3939
"""
4040
return self.client._perform_json(
41-
"GET", "/projects/%s/managedfolders/%s/" % (self.project_key, self.odb_id))
41+
"GET", "/projects/%s/managedfolders/%s" % (self.project_key, self.odb_id))
4242

4343
def set_definition(self, definition):
4444
"""
@@ -49,7 +49,7 @@ def set_definition(self, definition):
4949
that has been retrieved using the get_definition call.
5050
"""
5151
return self.client._perform_json(
52-
"PUT", "/projects/%s/managedfolders/%s/" % (self.project_key, self.odb_id),
52+
"PUT", "/projects/%s/managedfolders/%s" % (self.project_key, self.odb_id),
5353
body=definition)
5454

5555

@@ -116,16 +116,9 @@ def compute_metrics(self, metric_ids=None, probes=None):
116116
"POST" , "%s/computeMetrics" % url,
117117
body=probes)
118118
else:
119-
return self.client._perform_empty(
119+
return self.client._perform_json(
120120
"POST" , "%s/computeMetrics" % url)
121121

122-
if metrics is None:
123-
self.client._perform_empty(
124-
"POST" , "/projects/%s/managedfolders/%s/actions/computeMetrics" %(self.project_key, self.odb_id))
125-
else:
126-
self.client._perform_json(
127-
"POST" , "/projects/%s/managedfolders/%s/actions/computeMetrics" %(self.project_key, self.odb_id),
128-
params=metrics)
129122

130123
########################################################
131124
# Metrics

dataikuapi/dss/notebook.py

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
class DSSNotebook(object):
2+
"""
3+
A Python/R/Scala notebook on the DSS instance
4+
"""
5+
def __init__(self, client, project_key, notebook_name, state=None):
6+
self.client = client
7+
self.project_key = project_key
8+
self.notebook_name = notebook_name
9+
self.state = state
10+
self.state_is_peek = True
11+
12+
def unload(self, session_id=None):
13+
"""
14+
Stop the notebook and release its resources
15+
"""
16+
state = self.get_state()
17+
if state is None:
18+
raise Exception("Notebook isn't running")
19+
if state.get('activeSessions', None) is None:
20+
raise Exception("Notebook isn't running")
21+
if len(state['activeSessions']) == 0:
22+
raise Exception("Notebook isn't running")
23+
if session_id is None:
24+
if len(state['activeSessions']) > 1:
25+
raise Exception("Several sessions of the notebook are running, choose one")
26+
else:
27+
session_id = state['activeSessions'][0].get('sessionId', None)
28+
return self.client._perform_json("DELETE", "/projects/%s/notebooks/" % self.project_key, params={'notebookName' : self.notebook_name, 'sessionId' : session_id})
29+
30+
def get_state(self):
31+
"""
32+
Get the status of the notebook
33+
"""
34+
if self.state is None:
35+
self.state = self.client._perform_json("GET", "/projects/%s/notebooks/" % self.project_key, params={'notebookName' : self.notebook_name})
36+
return self.state
37+
38+
def get_sessions(self):
39+
"""
40+
Get the list of the running sessions of this notebook
41+
"""
42+
state = self.get_state()
43+
if state is None:
44+
raise Exception("Notebook isn't running")
45+
if state.get('activeSessions', None) is None:
46+
raise Exception("Notebook isn't running")
47+
return state['activeSessions']

dataikuapi/dss/project.py

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import sys
99
import os.path as osp
1010
from .future import DSSFuture
11+
from .notebook import DSSNotebook
1112

1213
class DSSProject(object):
1314
"""
@@ -498,4 +499,20 @@ def sync_datasets_acls(self):
498499
"POST", "/projects/%s/actions/sync" % (self.project_key))
499500
return DSSFuture(self.client, future_response.get('jobId', None), future_response)
500501

501-
502+
########################################################
503+
# Notebooks
504+
########################################################
505+
506+
def list_running_notebooks(self, as_objects=True):
507+
"""
508+
List the currently-running notebooks
509+
510+
Returns:
511+
list of notebooks. Each object contains at least a 'name' field
512+
"""
513+
list = self.client._perform_json("GET", "/projects/%s/notebooks/active" % self.project_key)
514+
if as_objects:
515+
return [DSSNotebook(self.client, notebook['projectKey'], notebook['name'], notebook) for notebook in list]
516+
else:
517+
return list
518+

dataikuapi/dss/recipe.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ def get_definition_and_payload(self):
3333
the definition, as a DSSRecipeDefinitionAndPayload object, containing the recipe definition itself and its payload
3434
"""
3535
data = self.client._perform_json(
36-
"GET", "/projects/%s/recipes/%s/" % (self.project_key, self.recipe_name))
36+
"GET", "/projects/%s/recipes/%s" % (self.project_key, self.recipe_name))
3737
return DSSRecipeDefinitionAndPayload(data)
3838

3939
def set_definition_and_payload(self, definition):
@@ -45,7 +45,7 @@ def set_definition_and_payload(self, definition):
4545
that has been retrieved using the get_definition call.
4646
"""
4747
return self.client._perform_json(
48-
"PUT", "/projects/%s/recipes/%s/" % (self.project_key, self.recipe_name),
48+
"PUT", "/projects/%s/recipes/%s" % (self.project_key, self.recipe_name),
4949
body=definition.data)
5050

5151
########################################################

dataikuapi/dss/scenario.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
from datetime import datetime
2+
13
class DSSScenario(object):
24
"""
35
A handle to interact with a scenario on the DSS instance

dataikuapi/dssclient.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
from dss.admin import DSSUser, DSSGroup, DSSConnection, DSSGeneralSettings
1010
from dss.meaning import DSSMeaning
1111
from dss.sqlquery import DSSSQLQuery
12+
from dss.notebook import DSSNotebook
1213
import os.path as osp
1314
from .utils import DataikuException
1415

@@ -76,6 +77,24 @@ def get_future(self, job_id):
7677
return DSSFuture(self, job_id)
7778

7879

80+
########################################################
81+
# Notebooks
82+
########################################################
83+
84+
def list_running_notebooks(self, as_objects=True):
85+
"""
86+
List the currently-running notebooks
87+
88+
Returns:
89+
list of notebooks. Each object contains at least a 'name' field
90+
"""
91+
list = self._perform_json("GET", "/admin/notebooks/")
92+
if as_objects:
93+
return [DSSNotebook(self, notebook['projectKey'], notebook['name'], notebook) for notebook in list]
94+
else:
95+
return list
96+
97+
7998
########################################################
8099
# Projects
81100
########################################################

0 commit comments

Comments
 (0)