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