← Back to team overview

python-jenkins-developers team mailing list archive

[Merge] lp:~soren/python-jenkins/add-crumb into lp:python-jenkins

 

Soren Hansen has proposed merging lp:~soren/python-jenkins/add-crumb into lp:python-jenkins.

Requested reviews:
  Python Jenkins Developers (python-jenkins-developers)

For more details, see:
https://code.launchpad.net/~soren/python-jenkins/add-crumb/+merge/188155

Should actually fix bug #811044
-- 
https://code.launchpad.net/~soren/python-jenkins/add-crumb/+merge/188155
Your team Python Jenkins Developers is requested to review the proposed merge of lp:~soren/python-jenkins/add-crumb into lp:python-jenkins.
=== modified file 'jenkins/__init__.py'
--- jenkins/__init__.py	2013-08-14 11:57:11 +0000
+++ jenkins/__init__.py	2013-09-27 20:20:09 +0000
@@ -58,6 +58,7 @@
 LAUNCHER_WINDOWS_SERVICE = 'hudson.os.windows.ManagedWindowsServiceLauncher'
 
 INFO = 'api/json'
+CRUMB_URL = 'crumbIssuer/api/json'
 JOB_INFO = 'job/%(name)s/api/json?depth=0'
 JOB_NAME = 'job/%(name)s/api/json?tree=name'
 Q_INFO = 'queue/api/json?depth=0'
@@ -154,6 +155,13 @@
         else:
             self.auth = None
 
+    def add_crumb(self, req):
+        response = self.jenkins_open(urllib2.Request(
+            self.server + CRUMB_URL), add_crumb=False)
+        if response:
+            data =  json.loads(response)
+            req.add_header(data['crumbRequestField'], data['crumb'])
+
     def get_job_info(self, name):
         '''
         Get job information dictionary.
@@ -200,14 +208,17 @@
         for k, v in self.get_job_info(job_name).iteritems():
             print k, v
 
-    def jenkins_open(self, req):
+    def jenkins_open(self, req, add_crumb=True):
         '''
+
         Utility routine for opening an HTTP request to a Jenkins server.   This
         should only be used to extends the :class:`Jenkins` API.
         '''
         try:
             if self.auth:
                 req.add_header('Authorization', self.auth)
+            if add_crumb:
+                self.add_crumb(req)
             return urllib2.urlopen(req).read()
         except urllib2.HTTPError, e:
             # Jenkins's funky authentication means its nigh impossible to


Follow ups