adding support to delete a job from the queue
authorVictor García <victor@tuenti.com>
Thu, 21 Mar 2013 12:10:48 +0000 (13:10 +0100)
committerVictor García <victor@tuenti.com>
Thu, 21 Mar 2013 12:10:48 +0000 (13:10 +0100)
jenkinsapi/exceptions.py
jenkinsapi/jenkins.py
jenkinsapi/job.py

index 1d5db3e..3a1d000 100644 (file)
@@ -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
+    """
index 2c44fdf..d5cc530 100644 (file)
@@ -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()
index 5fef16e..6da961b 100644 (file)
@@ -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
+