From b38c30d4097ef3874c5d3a88c6cb7915f0f538f7 Mon Sep 17 00:00:00 2001 From: Aleksey Maksimov Date: Fri, 12 Sep 2014 21:30:14 +0800 Subject: [PATCH] Low level api change to support tree api --- jenkinsapi/build.py | 4 ++-- jenkinsapi/jenkinsbase.py | 19 +++++++++++++------ jenkinsapi/job.py | 4 ++-- jenkinsapi/plugins.py | 4 ++-- jenkinsapi_tests/unittests/test_build.py | 2 +- jenkinsapi_tests/unittests/test_jenkins.py | 2 +- .../unittests/test_job_get_all_builds.py | 2 +- jenkinsapi_tests/unittests/test_job_scm_hg.py | 2 +- jenkinsapi_tests/unittests/test_views.py | 2 +- 9 files changed, 24 insertions(+), 17 deletions(-) diff --git a/jenkinsapi/build.py b/jenkinsapi/build.py index 1f07e69..6fc9410 100644 --- a/jenkinsapi/build.py +++ b/jenkinsapi/build.py @@ -49,11 +49,11 @@ class Build(JenkinsBase): self.depth = depth JenkinsBase.__init__(self, url) - def _poll(self): + def _poll(self, tree=None): # For build's we need more information for downstream and upstream builds # so we override the poll to get at the extra data for build objects url = '%s?depth=%s' % (self.python_api_url(self.baseurl), self.depth) - return self.get_data(url) + return self.get_data(url, tree=tree) def __str__(self): return self._data['fullDisplayName'] diff --git a/jenkinsapi/jenkinsbase.py b/jenkinsapi/jenkinsbase.py index ddd4d92..aa7897d 100644 --- a/jenkinsapi/jenkinsbase.py +++ b/jenkinsapi/jenkinsbase.py @@ -53,21 +53,28 @@ class JenkinsBase(object): url = url[:-1] return url - def poll(self): - self._data = self._poll() + def poll(self, tree=None): + self._data = self._poll(tree=tree) if 'jobs' in self._data: self._data['jobs'] = self.resolve_job_folders(self._data['jobs']) return self - def _poll(self): + def _poll(self, tree=None): url = self.python_api_url(self.baseurl) - return self.get_data(url) + return self.get_data(url, tree=tree) - def get_data(self, url, params=None): + def get_data(self, url, params=None, tree=None): requester = self.get_jenkins_obj().requester + if tree: + if not params: + params = {'tree': tree} + else: + params.update({'tree', tree}) + response = requester.get_url(url, params) if response.status_code != 200: - logging.error('Failed request at %s with params: %s', url, params) + logging.error('Failed request at %s with params: %s %s', + url, params, tree if tree else '') response.raise_for_status() try: return ast.literal_eval(response.text) diff --git a/jenkinsapi/job.py b/jenkinsapi/job.py index a0c1e06..2c2da5a 100644 --- a/jenkinsapi/job.py +++ b/jenkinsapi/job.py @@ -92,8 +92,8 @@ class Job(JenkinsBase, MutableJenkinsThing): branches.append(hg_default_branch) return branches - def _poll(self): - data = JenkinsBase._poll(self) + def _poll(self, tree=None): + data = JenkinsBase._poll(self, tree=tree) # jenkins loads only the first 100 builds, load more if needed data = self._add_missing_builds(data) return data diff --git a/jenkinsapi/plugins.py b/jenkinsapi/plugins.py index a6c992b..a1cc8be 100644 --- a/jenkinsapi/plugins.py +++ b/jenkinsapi/plugins.py @@ -24,8 +24,8 @@ class Plugins(JenkinsBase): def get_jenkins_obj(self): return self.jenkins_obj - def _poll(self): - return self.get_data(self.baseurl) + def _poll(self, tree=None): + return self.get_data(self.baseurl, tree=tree) def keys(self): return self.get_plugins_dict().keys() diff --git a/jenkinsapi_tests/unittests/test_build.py b/jenkinsapi_tests/unittests/test_build.py index 817db97..055e08c 100644 --- a/jenkinsapi_tests/unittests/test_build.py +++ b/jenkinsapi_tests/unittests/test_build.py @@ -84,7 +84,7 @@ class test_build(unittest.TestCase): @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) - get_data_mock.assert_called_with('http://halob:8080/job/foo/98/api/python?depth=0') + get_data_mock.assert_called_with('http://halob:8080/job/foo/98/api/python?depth=0', tree=None) def test_get_revision_no_scm(self): """ with no scm, get_revision should return None """ diff --git a/jenkinsapi_tests/unittests/test_jenkins.py b/jenkinsapi_tests/unittests/test_jenkins.py index c452d4d..6c0b279 100644 --- a/jenkinsapi_tests/unittests/test_jenkins.py +++ b/jenkinsapi_tests/unittests/test_jenkins.py @@ -235,7 +235,7 @@ class TestJenkins(unittest.TestCase): ] # Mock function - def second_call_poll(): + def second_call_poll(tree=None): return TestJenkins.create_job_returns.pop(0) # Patch Jenkins with mock function diff --git a/jenkinsapi_tests/unittests/test_job_get_all_builds.py b/jenkinsapi_tests/unittests/test_job_get_all_builds.py index df3bb0c..39cfa51 100644 --- a/jenkinsapi_tests/unittests/test_job_get_all_builds.py +++ b/jenkinsapi_tests/unittests/test_job_get_all_builds.py @@ -137,7 +137,7 @@ class TestJobGetAllBuilds(unittest.TestCase): (JOB3_API_URL, str({'tree': 'allBuilds[number,url]'})): JOB3_ALL_BUILDS_DATA, } - def fakeGetData(self, url, params=None): + def fakeGetData(self, url, params=None, tree=None): TestJobGetAllBuilds.__get_data_call_count += 1 if params is None: try: diff --git a/jenkinsapi_tests/unittests/test_job_scm_hg.py b/jenkinsapi_tests/unittests/test_job_scm_hg.py index 977ff81..fa63e44 100644 --- a/jenkinsapi_tests/unittests/test_job_scm_hg.py +++ b/jenkinsapi_tests/unittests/test_job_scm_hg.py @@ -50,7 +50,7 @@ class TestHgJob(unittest.TestCase): URL_DATA = {'http://halob:8080/job/foo/%s' % config.JENKINS_API: JOB_DATA} - def fakeGetData(self, url, *args): + def fakeGetData(self, url, *args, **kwargs): try: return TestHgJob.URL_DATA[url] except KeyError: diff --git a/jenkinsapi_tests/unittests/test_views.py b/jenkinsapi_tests/unittests/test_views.py index 0d87320..27acca4 100644 --- a/jenkinsapi_tests/unittests/test_views.py +++ b/jenkinsapi_tests/unittests/test_views.py @@ -43,7 +43,7 @@ class TestViews(unittest.TestCase): Assert that attempting to create a view which already exists simply returns the same view. """ - def mockGetData(JJ, url): + def mockGetData(JJ, url, tree=None): DATA = {} DATA['http://localhost:8080/%s' % config.JENKINS_API] = \ {'views': [dict(name='NewView', url='http://xxxxx/yyyy')]} -- 2.34.1