Skip to content

Commit 7a3a18b

Browse files
authored
[Jobs] Add --python-named-params to databricks jobs run-now (#425)
* Add python_named_parameters to run_now_cli in jobs cli * revert styling changes * Update databricks_cli/jobs/api.py
1 parent 0296117 commit 7a3a18b

5 files changed

Lines changed: 20 additions & 9 deletions

File tree

databricks_cli/jobs/api.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,10 +49,11 @@ def reset_job(self, json, headers=None, version=None):
4949
return self.client.client.perform_query('POST', '/jobs/reset', data=json, headers=headers,
5050
version=version)
5151

52-
def run_now(self, job_id, jar_params, notebook_params, python_params, spark_submit_params,
53-
headers=None, version=None):
52+
def run_now(self, job_id, jar_params, notebook_params, python_params, python_named_params,
53+
spark_submit_params, headers=None, version=None):
5454
return self.client.run_now(job_id, jar_params, notebook_params, python_params,
55-
spark_submit_params, headers=headers, version=version)
55+
python_named_params, spark_submit_params, headers=headers,
56+
version=version)
5657

5758
def _list_jobs_by_name(self, name, headers=None):
5859
jobs = self.list_jobs(headers=headers)['jobs']

databricks_cli/jobs/cli.py

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -207,6 +207,9 @@ def get_cli(api_client, job_id, version):
207207
'i.e. {"name": "john doe", "age": 35}')
208208
@click.option('--python-params', default=None, type=JsonClickType(),
209209
help='JSON string specifying an array of parameters. i.e. ["param1", "param2"]')
210+
@click.option('--python-named-params', default=None, type=JsonClickType(),
211+
help='JSON string specifying a map of key-value pairs. '
212+
'i.e. {"name": "john doe", "age": 35}')
210213
@click.option('--spark-submit-params', default=None, type=JsonClickType(),
211214
help='JSON string specifying an array of parameters. i.e. '
212215
'["--class", "org.apache.spark.examples.SparkPi"]')
@@ -217,7 +220,7 @@ def get_cli(api_client, job_id, version):
217220
@eat_exceptions
218221
@provide_api_client
219222
def run_now_cli(api_client, job_id, jar_params, notebook_params, python_params,
220-
spark_submit_params, version):
223+
python_named_params, spark_submit_params, version):
221224
"""
222225
Runs a job with optional per-run parameters.
223226
@@ -228,10 +231,11 @@ def run_now_cli(api_client, job_id, jar_params, notebook_params, python_params,
228231
jar_params_json = json_loads(jar_params) if jar_params else None
229232
notebook_params_json = json_loads(notebook_params) if notebook_params else None
230233
python_params = json_loads(python_params) if python_params else None
234+
python_named_params = json_loads(python_named_params) if python_named_params else None
231235
spark_submit_params = json_loads(spark_submit_params) if spark_submit_params else None
232236
res = JobsApi(api_client).run_now(
233-
job_id, jar_params_json, notebook_params_json, python_params, spark_submit_params,
234-
version=version)
237+
job_id, jar_params_json, notebook_params_json, python_params,
238+
python_named_params, spark_submit_params, version=version)
235239
click.echo(pretty_format(res))
236240

237241

databricks_cli/sdk/service.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,7 @@ def list_jobs(self, job_type=None, expand_tasks=None, limit=None, offset=None, h
156156

157157
return self.client.perform_query('GET', '/jobs/list', data=_data, headers=headers, version=version)
158158

159-
def run_now(self, job_id=None, jar_params=None, notebook_params=None, python_params=None,
159+
def run_now(self, job_id=None, jar_params=None, notebook_params=None, python_params=None, python_named_params=None,
160160
spark_submit_params=None, headers=None, version=None):
161161
_data = {}
162162
if job_id is not None:
@@ -167,6 +167,8 @@ def run_now(self, job_id=None, jar_params=None, notebook_params=None, python_par
167167
_data['notebook_params'] = notebook_params
168168
if python_params is not None:
169169
_data['python_params'] = python_params
170+
if python_named_params is not None:
171+
_data['python_named_params'] = python_named_params
170172
if spark_submit_params is not None:
171173
_data['spark_submit_params'] = spark_submit_params
172174
return self.client.perform_query('POST', '/jobs/run-now', data=_data, headers=headers, version=version)

tests/jobs/test_api.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -131,13 +131,13 @@ def test_list_jobs():
131131
def test_run_now():
132132
with mock.patch('databricks_cli.sdk.ApiClient') as api_client_mock:
133133
api = JobsApi(api_client_mock)
134-
api.run_now('1', ['bla'], None, None, None)
134+
api.run_now('1', ['bla'], None, None, None, None)
135135
api_client_mock.perform_query.assert_called_with(
136136
'POST', '/jobs/run-now', data={'job_id': '1', 'jar_params': ['bla']},
137137
headers=None, version=None
138138
)
139139

140-
api.run_now('1', ['bla'], None, None, None, version='3.0')
140+
api.run_now('1', ['bla'], None, None, None, None, version='3.0')
141141
api_client_mock.perform_query.assert_called_with(
142142
'POST', '/jobs/run-now', data={'job_id': '1', 'jar_params': ['bla']},
143143
headers=None, version='3.0'

tests/jobs/test_cli.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -191,6 +191,7 @@ def test_list_jobs_type_pipeline(jobs_api_mock):
191191
NOTEBOOK_PARAMS = '{"a": 1}'
192192
JAR_PARAMS = '[1, 2, 3]'
193193
PYTHON_PARAMS = '["python", "params"]'
194+
PYTHON_NAMED_PARAMS = '{"python": "named", "params": 1}'
194195
SPARK_SUBMIT_PARAMS = '["--class", "org.apache.spark.examples.SparkPi"]'
195196

196197

@@ -217,6 +218,7 @@ def test_run_now_with_params(jobs_api_mock):
217218
'--jar-params', JAR_PARAMS,
218219
'--notebook-params', NOTEBOOK_PARAMS,
219220
'--python-params', PYTHON_PARAMS,
221+
'--python-named-params', PYTHON_NAMED_PARAMS,
220222
'--spark-submit-params', SPARK_SUBMIT_PARAMS])
221223
assert jobs_api_mock.run_now.call_args[0][0] == 1
222224
assert jobs_api_mock.run_now.call_args[0][1] == json.loads(JAR_PARAMS)
@@ -225,6 +227,8 @@ def test_run_now_with_params(jobs_api_mock):
225227
assert jobs_api_mock.run_now.call_args[0][3] == json.loads(
226228
PYTHON_PARAMS)
227229
assert jobs_api_mock.run_now.call_args[0][4] == json.loads(
230+
PYTHON_NAMED_PARAMS)
231+
assert jobs_api_mock.run_now.call_args[0][5] == json.loads(
228232
SPARK_SUBMIT_PARAMS)
229233
assert echo_mock.call_args[0][0] == pretty_format(RUN_NOW_RETURN)
230234

0 commit comments

Comments
 (0)