From 7352b157f3732ac77c4cadf3e8aa3d85d7b377ce Mon Sep 17 00:00:00 2001 From: =?utf8?q?Victor=20Garc=C3=ADa?= Date: Thu, 21 Mar 2013 13:10:48 +0100 Subject: [PATCH] adding support to delete a job from the queue --- jenkinsapi/exceptions.py | 5 ++++- jenkinsapi/jenkins.py | 4 ++++ jenkinsapi/job.py | 21 ++++++++++++++++++--- 3 files changed, 26 insertions(+), 4 deletions(-) diff --git a/jenkinsapi/exceptions.py b/jenkinsapi/exceptions.py index 1d5db3e..3a1d000 100644 --- a/jenkinsapi/exceptions.py +++ b/jenkinsapi/exceptions.py @@ -61,4 +61,7 @@ class NotConfiguredSCM(Exception): """ It's a job that doesn't have configured SCM """ - +class NotInQueue(Exception): + """ + It's a job that is not in the queue + """ diff --git a/jenkinsapi/jenkins.py b/jenkinsapi/jenkins.py index 2c44fdf..d5cc530 100644 --- a/jenkinsapi/jenkins.py +++ b/jenkinsapi/jenkins.py @@ -4,6 +4,7 @@ from jenkinsapi.jenkinsbase import JenkinsBase from jenkinsapi.job import Job from jenkinsapi.node import Node from jenkinsapi.view import View +from jenkinsapi import config from utils.urlopener import mkurlopener, mkopener, NoAuto302Handler import cookielib import logging @@ -69,6 +70,9 @@ class Jenkins(JenkinsBase): log.debug("args: %s" % auth_args) return auth_args + def get_base_server_url(self): + return self.baseurl[:-(len(config.JENKINS_API))] + def get_opener(self): if self.formauth: return self.get_login_opener() diff --git a/jenkinsapi/job.py b/jenkinsapi/job.py index 5fef16e..6da961b 100644 --- a/jenkinsapi/job.py +++ b/jenkinsapi/job.py @@ -9,7 +9,7 @@ from jenkinsapi.build import Build from jenkinsapi.jenkinsbase import JenkinsBase from jenkinsapi import exceptions -from exceptions import NoBuildData, NotFound +from exceptions import NoBuildData, NotFound, NotInQueue log = logging.getLogger(__name__) @@ -385,10 +385,25 @@ class Job(JenkinsBase): def disable(self): '''Disable job''' - disableurl = urlparse.urljoin( self.baseurl, 'disable' ) + disableurl = urlparse.urljoin(self.baseurl, 'disable' ) return self.post_data(disableurl, '') def enable(self): '''Enable job''' - enableurl = urlparse.urljoin( self.baseurl, 'enable' ) + enableurl = urlparse.urljoin(self.baseurl, 'enable' ) return self.post_data(enableurl, '') + + def delete_from_queue(self): + if not self.is_queued(): + raise NotInQueue() + queue_id = self._data['queueItem']['id'] + cancelurl = urlparse.urljoin(self.get_jenkins_obj().get_base_server_url(), + 'queue/cancelItem?id=%s' % queue_id) + try: + self.post_data(cancelurl, '') + except urllib2.HTTPError: + # The request doesn't have a response, so it returns 404, + # it's the expected behaviour + pass + return True + -- 2.7.4