revision methods added to job and build classes
authorRuslan Lutsenko <ruslan.lutcenko@gmail.com>
Tue, 3 Jan 2012 15:45:01 +0000 (16:45 +0100)
committerRuslan Lutsenko <ruslan.lutcenko@gmail.com>
Tue, 3 Jan 2012 15:45:01 +0000 (16:45 +0100)
README
pyjenkinsci/build.py
pyjenkinsci/exceptions.py
pyjenkinsci/job.py

diff --git a/README b/README
index 2609e81..0b62cb6 100644 (file)
--- a/README
+++ b/README
@@ -1,3 +1,2 @@
 Cloned copy of http://pyjenkinsci.googlecode.com/ 
-
 This file was modified by PyCharm 2.0.1 for binding GitHub repository
index 31236f8..a3799bc 100644 (file)
@@ -33,6 +33,10 @@ class Build(JenkinsBase):
     def get_status(self):\r
         return self._data["result"]\r
 \r
+    def get_revision(self):\r
+        for set in self._data["changeSet"]["revisions"]:\r
+            return set["revision"]\r
+\r
     def get_duration(self):\r
         return self._data["duration"]\r
 \r
index 6a2b6cc..9bc4e7a 100644 (file)
@@ -42,3 +42,8 @@ class BadURL(ValueError):
     """\r
     A URL appears to be broken\r
     """\r
+\r
+class NotFound(Exception):\r
+    """\r
+    Resource cannot be found\r
+    """\r
index 05b39ae..76ce08e 100644 (file)
@@ -5,7 +5,7 @@ from datetime import time
 from pyjenkinsci.build import Build\r
 from pyjenkinsci.jenkinsbase import JenkinsBase\r
 \r
-from exceptions import NoBuildData\r
+from exceptions import NoBuildData, NotFound\r
 \r
 log = logging.getLogger(__name__)\r
 \r
@@ -126,6 +126,14 @@ class Job(JenkinsBase):
             raise NoBuildData( repr(self) )\r
         return dict( ( a["number"], a["url"] ) for a in self._data["builds"] )\r
 \r
+    def get_revision_dict(self):\r
+        """\r
+        Get dictionary of all revision:buildnumber available\r
+        """\r
+        if not self._data.has_key( "builds" ):\r
+            raise NoBuildData( repr(self) )\r
+        return dict( ( self.get_build(a["number"] ).get_revision(), a["number"] ) for a in self._data["builds"] ) \r
+\r
     def get_build_ids(self):\r
         """\r
         Return a sorted list of all good builds as ints.\r
@@ -153,6 +161,18 @@ class Job(JenkinsBase):
         bn = self.get_last_completed_buildnumber()\r
         return self.get_build( bn )\r
 \r
+    def get_buildnumber_for_revision(self, revision ):\r
+        """\r
+        Returns the buildnumber for a revision\r
+        """\r
+        if not isinstance(revision, int):\r
+            revision = int(revision)\r
+        revmap = self.get_revision_dict()\r
+        try:\r
+            return revmap[revision]\r
+        except KeyError:\r
+            raise NotFound("Couldn't find a build with that revision")\r
+\r
     def get_build( self, buildnumber ):\r
         assert type(buildnumber) == int\r
         url = self.get_build_dict()[ buildnumber ]\r