Low level api change to support tree api
authorAleksey Maksimov <ctpeko3a@gmail.com>
Fri, 12 Sep 2014 13:30:14 +0000 (21:30 +0800)
committerAleksey Maksimov <ctpeko3a@gmail.com>
Fri, 19 Sep 2014 13:18:25 +0000 (21:18 +0800)
jenkinsapi/build.py
jenkinsapi/jenkinsbase.py
jenkinsapi/job.py
jenkinsapi/plugins.py
jenkinsapi_tests/unittests/test_build.py
jenkinsapi_tests/unittests/test_jenkins.py
jenkinsapi_tests/unittests/test_job_get_all_builds.py
jenkinsapi_tests/unittests/test_job_scm_hg.py
jenkinsapi_tests/unittests/test_views.py

index 1f07e6949a3d0ad45129be72db0d09885e00319a..6fc94100e025810adce5d6c56cfc7101b6a92ae4 100644 (file)
@@ -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']
index ddd4d92a37398f35107fd9ebea6229e6fad3de23..aa7897d739bed42befa055f8326ed6bd4c727de8 100644 (file)
@@ -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)
index a0c1e0681259962cfc8b79027c3621dced8166e8..2c2da5a4ef4c2b0eaeaef52cc9faf7136b3d159a 100644 (file)
@@ -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
index a6c992be67f55ce6b2cc47cdab29a5a691ebfa72..a1cc8be404e4b38bb64221530439d45ec14057a0 100644 (file)
@@ -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()
index 817db9750b63e8dea5a067202e0f616bf1367556..055e08c59676aee88e97e6e40b15fd285fcd5680 100644 (file)
@@ -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 """
index c452d4d3595a222c82169017d5e6c9ae7db37d8c..6c0b279c7774dbe2955ec27eec95bd81835a0f29 100644 (file)
@@ -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
index df3bb0c586091ff267b53c7e0d25e4d483304236..39cfa51b92571f6dd074bd9b4550143ba8980702 100644 (file)
@@ -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:
index 977ff81aa9ca65d51ac24b882837f0c0caffc3e8..fa63e449ee85a5885069d3b07663a3ead3467e99 100644 (file)
@@ -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:
index 0d873207b38f477a704706eb574bee1ebc3f91ee..27acca408ab712450120c82b6486a851da7019c8 100644 (file)
@@ -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')]}