diff --git a/splunklib/client.py b/splunklib/client.py index 0979140c..5a4ec271 100644 --- a/splunklib/client.py +++ b/splunklib/client.py @@ -226,7 +226,10 @@ def _load_atom_entries(response): # Load the sid from the body of the given response -def _load_sid(response): +def _load_sid(response, output_mode): + if output_mode == "json": + json_obj = json.loads(response.body.read()) + return json_obj.get('sid') return _load_atom(response).response.sid @@ -2968,7 +2971,7 @@ def create(self, query, **kwargs): if kwargs.get("exec_mode", None) == "oneshot": raise TypeError("Cannot specify exec_mode=oneshot; use the oneshot method instead.") response = self.post(search=query, **kwargs) - sid = _load_sid(response) + sid = _load_sid(response, kwargs.get("output_mode", None)) return Job(self.service, sid) def export(self, query, **params): @@ -3184,7 +3187,7 @@ def dispatch(self, **kwargs): :return: The :class:`Job`. """ response = self.post("dispatch", **kwargs) - sid = _load_sid(response) + sid = _load_sid(response, kwargs.get("output_mode", None)) return Job(self.service, sid) @property diff --git a/tests/test_job.py b/tests/test_job.py index 44326086..19ec8900 100755 --- a/tests/test_job.py +++ b/tests/test_job.py @@ -48,6 +48,11 @@ def test_service_search(self): self.assertTrue(job.sid in self.service.jobs) job.cancel() + def test_create_job_with_output_mode_json(self): + job = self.service.jobs.create(query='search index=_internal earliest=-1m | head 3', output_mode='json') + self.assertTrue(job.sid in self.service.jobs) + job.cancel() + def test_oneshot_with_garbage_fails(self): jobs = self.service.jobs self.assertRaises(TypeError, jobs.create, "abcd", exec_mode="oneshot")