From e5e4fb13727f19e33463c7227a8a0890ef4e4725 Mon Sep 17 00:00:00 2001 From: Jingjing Duan Date: Mon, 9 Jun 2014 15:02:23 -0700 Subject: [PATCH] add get_causes --- jenkinsapi/build.py | 15 +++++++++++++++ jenkinsapi_tests/unittests/test_build.py | 9 ++++++++- 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/jenkinsapi/build.py b/jenkinsapi/build.py index da04fd8..a0a2d7a 100644 --- a/jenkinsapi/build.py +++ b/jenkinsapi/build.py @@ -361,6 +361,21 @@ class Build(JenkinsBase): all_actions.update(dct_action) return all_actions + def get_causes(self): + ''' + Returns a list of causes. There can be multiple causes lists and + some of the can be empty. For instance, when a build is manually + aborted, Jenkins could add an empty causes list to the actions + dict. Empty ones are ignored. + ''' + all_causes = [] + for dct_action in self._data["actions"]: + if dct_action is None: + continue + if 'causes' in dct_action and dct_action['causes']: + all_causes.extend(dct_action['causes']) + return all_causes + def get_timestamp(self): ''' Returns build timestamp in UTC diff --git a/jenkinsapi_tests/unittests/test_build.py b/jenkinsapi_tests/unittests/test_build.py index 0e67858..9223cbe 100644 --- a/jenkinsapi_tests/unittests/test_build.py +++ b/jenkinsapi_tests/unittests/test_build.py @@ -15,7 +15,8 @@ class test_build(unittest.TestCase): DATA = { 'actions': [{'causes': [{'shortDescription': 'Started by user anonymous', 'userId': None, - 'userName': 'anonymous'}]}], + 'userName': 'anonymous'}]}, + {'causes': []}], 'artifacts': [], 'building': False, 'builtOn': '', @@ -73,6 +74,12 @@ class test_build(unittest.TestCase): self.assertEquals(self.b.get_duration().microseconds, 782000) self.assertEquals(str(self.b.get_duration()), '0:00:05.782000') + def test_get_causes(self): + self.assertEquals(self.b.get_causes(), + [{'shortDescription': 'Started by user anonymous', + 'userId': None, + 'userName': 'anonymous'}]) + @mock.patch.object(Build, 'get_data') def test_build_depth(self, get_data_mock): build = Build('http://halob:8080/job/foo/98', 98, self.j, depth=0) -- 2.34.1