diff options
author | Aleksey Maksimov <ctpeko3a@gmail.com> | 2014-09-23 22:44:36 +0800 |
---|---|---|
committer | Aleksey Maksimov <ctpeko3a@gmail.com> | 2014-09-23 22:44:36 +0800 |
commit | 6d7c4e59a8fc556a30cac5c8db97764d552422b5 (patch) | |
tree | 12127f96259a30397d5d19443a78fd915eae2366 /jenkinsapi | |
parent | 2ff2c3b0cb4721a1b8db5464228139ae5cf93f4f (diff) | |
download | python-jenkinsapi-6d7c4e59a8fc556a30cac5c8db97764d552422b5.tar.gz python-jenkinsapi-6d7c4e59a8fc556a30cac5c8db97764d552422b5.tar.bz2 python-jenkinsapi-6d7c4e59a8fc556a30cac5c8db97764d552422b5.zip |
Added use of tree api to node, job, queue and fixed tests
Diffstat (limited to 'jenkinsapi')
-rw-r--r-- | jenkinsapi/__init__.py | 9 | ||||
-rw-r--r-- | jenkinsapi/executor.py | 15 | ||||
-rw-r--r-- | jenkinsapi/job.py | 15 | ||||
-rw-r--r-- | jenkinsapi/node.py | 12 | ||||
-rw-r--r-- | jenkinsapi/queue.py | 3 | ||||
-rw-r--r-- | jenkinsapi/utils/requester.py | 4 |
6 files changed, 33 insertions, 25 deletions
diff --git a/jenkinsapi/__init__.py b/jenkinsapi/__init__.py index 6f96de5..8be4e57 100644 --- a/jenkinsapi/__init__.py +++ b/jenkinsapi/__init__.py @@ -62,4 +62,11 @@ __all__ = [ "fingerprint", "jenkins", "jenkinsbase", "job", "node", "result_set", "result", "view" ] __docformat__ = "epytext" -__version__ = pkg_resources.working_set.by_key['jenkinsapi'].version + +import sys +# In case of jenkinsapi is not installed in 'develop' mode +if not sys.argv[0].endswith('nosetests'): + __version__ = pkg_resources.working_set.by_key['jenkinsapi'].version +else: + # Return bogus version + __version__ = '99.99.99' diff --git a/jenkinsapi/executor.py b/jenkinsapi/executor.py index 4989b2a..de3021e 100644 --- a/jenkinsapi/executor.py +++ b/jenkinsapi/executor.py @@ -36,33 +36,28 @@ class Executor(JenkinsBase): def get_progress(self): """Returns percentage""" - self.poll() - return self._data['progress'] + return self.poll(tree='progress')['progress'] def get_number(self): """ Get Executor number. """ - self.poll() - return self._data['number'] + return self.poll(tree='number')['number'] def is_idle(self): """ Returns Boolean: whether Executor is idle or not. """ - self.poll() - return self._data['idle'] + return self.poll(tree='idle')['idle'] def likely_stuck(self): """ Returns Boolean: whether Executor is likely stuck or not. """ - self.poll() - return self._data['likelyStuck'] + return self.poll(tree='likelyStuck')['likelyStuck'] def get_current_executable(self): """ Returns the current Queue.Task this executor is running. """ - self.poll() - return self._data['currentExecutable'] + return self.poll(tree='currentExecutable')['currentExecutable'] diff --git a/jenkinsapi/job.py b/jenkinsapi/job.py index 31f3222..ae599a7 100644 --- a/jenkinsapi/job.py +++ b/jenkinsapi/job.py @@ -192,24 +192,31 @@ class Job(JenkinsBase, MutableJenkinsThing): url = self.get_build_triggerurl(files) if cause: build_params['cause'] = cause - + # Build require params as form fields # and as Json. data = {'json': self.mk_json_from_build_parameters( - build_params, files)} + build_params, files)} data.update(build_params) - response = self.jenkins.requester.post_url( + response = self.jenkins.requester.post_and_confirm_status( url, data=data, params=params, files=files, + valid=[200, 201, 303], + allow_redirects=False ) redirect_url = response.headers['location'] if not redirect_url.startswith("%s/queue/item" % self.jenkins.baseurl): - raise ValueError("Not a Queue URL: %s" % redirect_url) + if files: + raise ValueError('Builds with file parameters are not ' + 'supported by this jenkinsapi version. ' + 'Please use previous version.') + else: + raise ValueError("Not a Queue URL: %s" % redirect_url) qi = QueueItem(redirect_url, self.jenkins) if block: diff --git a/jenkinsapi/node.py b/jenkinsapi/node.py index 27ddd51..75a6e46 100644 --- a/jenkinsapi/node.py +++ b/jenkinsapi/node.py @@ -39,12 +39,10 @@ class Node(JenkinsBase): return self.name def is_online(self): - self.poll() - return not self._data['offline'] + return not self.poll(tree='offline')['offline'] def is_temporarily_offline(self): - self.poll() - return self._data['temporarilyOffline'] + return self.poll(tree='temporarilyOffline')['temporarilyOffline'] def is_jnlpagent(self): return self._data['jnlpAgent'] @@ -81,11 +79,11 @@ class Node(JenkinsBase): """ if not self._data['offline']: self.toggle_temporarily_offline(message) - self.poll() - if not self._data['offline']: + data = self.poll(tree='offline,temporarilyOffline') + if not data['offline']: raise AssertionError("The node state is still online:" + "offline = %s , temporarilyOffline = %s" % - (self._data['offline'], self._data['temporarilyOffline'])) + (data['offline'], data['temporarilyOffline'])) def toggle_temporarily_offline(self, message="requested from jenkinsapi"): """ diff --git a/jenkinsapi/queue.py b/jenkinsapi/queue.py index 83c1a0a..2e1ff23 100644 --- a/jenkinsapi/queue.py +++ b/jenkinsapi/queue.py @@ -135,7 +135,8 @@ class QueueItem(JenkinsBase): def block_until_building(self, delay=5): while True: try: - return self.poll().get_build() + self.poll() + return self.get_build() except (NotBuiltYet, HTTPError): time.sleep(delay) continue diff --git a/jenkinsapi/utils/requester.py b/jenkinsapi/utils/requester.py index 50e077b..c966786 100644 --- a/jenkinsapi/utils/requester.py +++ b/jenkinsapi/utils/requester.py @@ -102,7 +102,7 @@ class Requester(object): headers = {'Content-Type': 'text/xml'} return self.post_and_confirm_status(url, params=params, data=data, headers=headers, valid=valid) - def post_and_confirm_status(self, url, params=None, data=None, files=None, headers=None, valid=None): + def post_and_confirm_status(self, url, params=None, data=None, files=None, headers=None, valid=None, allow_redirects=True): valid = valid or self.VALID_STATUS_CODES assert isinstance(data, ( str, dict)), \ @@ -111,7 +111,7 @@ class Requester(object): if not headers and not files: headers = {'Content-Type': 'application/x-www-form-urlencoded'} - response = self.post_url(url, params, data, files, headers) + response = self.post_url(url, params, data, files, headers, allow_redirects) if response.status_code not in valid: raise JenkinsAPIException('Operation failed. url={0}, data={1}, headers={2}, status={3}, text={4}'.format( response.url, data, headers, response.status_code, response.text.encode('UTF-8'))) |