From ac706f755406a1dd915f6da7980fb9e942735cfe Mon Sep 17 00:00:00 2001 From: Abhi Shah Date: Thu, 14 Apr 2022 14:33:47 +0530 Subject: [PATCH 1/2] Added Output mode JSON support for jobs.create --- splunklib/client.py | 12 ++++++++---- tests/test_job.py | 5 +++++ 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/splunklib/client.py b/splunklib/client.py index 0979140c..14d9fa40 100644 --- a/splunklib/client.py +++ b/splunklib/client.py @@ -226,8 +226,12 @@ def _load_atom_entries(response): # Load the sid from the body of the given response -def _load_sid(response): - return _load_atom(response).response.sid +def _load_sid(response, output_mode): + if output_mode == "json": + json_obj = json.loads(response.body.read()) + return json_obj.get('sid') + else: + return _load_atom(response).response.sid # Parse the given atom entry record into a generic entity state record @@ -2968,7 +2972,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 +3188,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") From f7f15b21543e18cf1aa667856f2e396d63bc7dfd Mon Sep 17 00:00:00 2001 From: Abhi Shah Date: Thu, 14 Apr 2022 14:37:15 +0530 Subject: [PATCH 2/2] Update client.py --- splunklib/client.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/splunklib/client.py b/splunklib/client.py index 14d9fa40..5a4ec271 100644 --- a/splunklib/client.py +++ b/splunklib/client.py @@ -230,8 +230,7 @@ def _load_sid(response, output_mode): if output_mode == "json": json_obj = json.loads(response.body.read()) return json_obj.get('sid') - else: - return _load_atom(response).response.sid + return _load_atom(response).response.sid # Parse the given atom entry record into a generic entity state record