summaryrefslogtreecommitdiff
path: root/jenkinsapi
diff options
context:
space:
mode:
authorAleksey Maksimov <ctpeko3a@gmail.com>2014-09-23 22:44:36 +0800
committerAleksey Maksimov <ctpeko3a@gmail.com>2014-09-23 22:44:36 +0800
commit6d7c4e59a8fc556a30cac5c8db97764d552422b5 (patch)
tree12127f96259a30397d5d19443a78fd915eae2366 /jenkinsapi
parent2ff2c3b0cb4721a1b8db5464228139ae5cf93f4f (diff)
downloadpython-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__.py9
-rw-r--r--jenkinsapi/executor.py15
-rw-r--r--jenkinsapi/job.py15
-rw-r--r--jenkinsapi/node.py12
-rw-r--r--jenkinsapi/queue.py3
-rw-r--r--jenkinsapi/utils/requester.py4
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')))