1   
  2   
  3   
  4   
  5   
  6   
  7   
  8   
  9   
 10   
 11   
 12   
 13   
 14   
 15   
 16  from zope.interface import implements 
 17  from twisted.python import log 
 18  from twisted.internet import defer 
 19  from buildbot import interfaces 
 20  from buildbot.util.eventual import eventually 
 23      implements(interfaces.IBuildRequestStatus) 
 24   
 25 -    def __init__(self, buildername, brid, status): 
  26          self.buildername = buildername 
 27          self.brid = brid 
 28          self.status = status 
 29          self.master = status.master 
 30   
 31          self._buildrequest = None 
 32          self._buildrequest_lock = defer.DeferredLock() 
  33   
 34      @defer.deferredGenerator 
 36          """ 
 37          Get the underlying BuildRequest object for this status.  This is a slow 
 38          operation! 
 39   
 40          @returns: BuildRequest instance or None, via Deferred 
 41          """ 
 42           
 43          from buildbot.process import buildrequest 
 44   
 45           
 46          if self._buildrequest: 
 47              yield self._buildrequest 
 48   
 49          wfd = defer.waitForDeferred( 
 50                  self._buildrequest_lock.acquire()) 
 51          yield wfd 
 52          wfd.getResult() 
 53   
 54          try: 
 55              if not self._buildrequest: 
 56                  wfd = defer.waitForDeferred( 
 57                      self.master.db.buildrequests.getBuildRequest(self.brid)) 
 58                  yield wfd 
 59                  brd = wfd.getResult() 
 60   
 61                  wfd = defer.waitForDeferred( 
 62                      buildrequest.BuildRequest.fromBrdict(self.master, brd)) 
 63                  yield wfd 
 64                  self._buildrequest = wfd.getResult() 
 65          except:  
 66              self._buildrequest_lock.release() 
 67              raise 
 68   
 69          self._buildrequest_lock.release() 
 70   
 71          yield self._buildrequest 
  72   
 76   
 77       
 78      @defer.deferredGenerator 
 80          wfd = defer.waitForDeferred( 
 81                  self._getBuildRequest()) 
 82          yield wfd 
 83          br = wfd.getResult() 
 84   
 85          yield br.source 
  86   
 88          return self.buildername 
  89   
 90      @defer.deferredGenerator 
107   
109          d = self.getBuilds() 
110          def notify_old(oldbuilds): 
111              for bs in oldbuilds: 
112                  eventually(observer, bs) 
 113          d.addCallback(notify_old) 
114          d.addCallback(lambda _ : 
115              self.status._buildrequest_subscribe(self.brid, observer)) 
116          d.addErrback(log.err, 'while notifying subscribers') 
 117   
119          self.status._buildrequest_unsubscribe(self.brid, observer) 
 120   
121      @defer.deferredGenerator 
123          wfd = defer.waitForDeferred( 
124                  self._getBuildRequest()) 
125          yield wfd 
126          br = wfd.getResult() 
127   
128          yield br.submittedAt 
 129   
131          result = {} 
132           
133          result['source'] = None  
134          result['builderName'] = self.buildername 
135          result['submittedAt'] = None  
136   
137           
138          result['builds'] = []  
139          return result 
 140   
141      @defer.deferredGenerator 
143          result = {} 
144   
145          wfd = defer.waitForDeferred( 
146                  self.getSourceStamp()) 
147          yield wfd 
148          ss = wfd.getResult() 
149          result['source'] = ss.asDict() 
150   
151          result['builderName'] = self.getBuilderName() 
152   
153          wfd = defer.waitForDeferred( 
154                  self.getSubmitTime()) 
155          yield wfd 
156          submittedAt = wfd.getResult() 
157          result['submittedAt'] = submittedAt 
158   
159          wfd = defer.waitForDeferred( 
160              self.getBuilds()) 
161          yield wfd 
162          builds = wfd.getResult() 
163   
164          result['builds'] = [ build.asDict() for build in builds ] 
165   
166          yield result 
 167