import pygtk
pygtk.require('2.0')
-from twisted.internet import gtk2reactor
+from twisted.internet import gtk2reactor, defer
gtk2reactor.install()
import gnome.ui
from twisted.spread import pb
from twisted.cred import credentials
from twisted.python import log
-
-# A class to manage the remote connection to the buildbot server
-
-class BuildbotClient:
-
- def __init__(self):
-
- self.builders = {}
- self.remote = None
-
- def connect(self, host, port, username, password):
-
- cf = pb.PBClientFactory()
- creds = credentials.UsernamePassword(username, password)
-
- d = cf.login(creds)
- reactor.connectTCP(host, port, cf)
-
- d.addCallbacks(self.connected, lambda arg: log.err(arg))
-
- log.msg('connecting to %s:%d as %s' % (host, port, username))
-
- return d
-
- def connected(self, ref):
-
- log.msg('connected')
-
- # Remote reference is a StatusClientPerspective object.
-
- self.remote = ref
- self.remote.notifyOnDisconnect(self.disconnected)
-
- def disconnected(self, ref):
-
- log.msg('disconnected')
-
- ref = None
-
- def subscribe(self, mode, interval, target):
- return self.remote.callRemote('subscribe', mode, interval, target)
+from bbclient import BuildbotClient
# Application class
c.set_clickable(True)
c.set_resizable(True)
c.set_sort_column_id(text)
+ c.set_expand(True)
return c
view.append_column(
SortableTreeViewColumn(
'Build Status', self.COL_BUILDER_BUILD_STATUS))
- view.append_column(
- gtk.TreeViewColumn('Build ETA',
- gtk.CellRendererProgress(),
- text = self.COL_BUILDER_BUILD_ETA_TEXT,
- value = self.COL_BUILDER_BUILD_ETA_PERCENT))
+ col = gtk.TreeViewColumn('Build ETA',
+ gtk.CellRendererProgress(),
+ text = self.COL_BUILDER_BUILD_ETA_TEXT,
+ value = self.COL_BUILDER_BUILD_ETA_PERCENT)
+
+ col.set_clickable(True)
+ col.set_resizable(True)
+ col.set_sort_column_id(self.COL_BUILDER_BUILD_ETA_PERCENT)
+ col.set_expand(True)
+
+ view.append_column(col)
view.show()
self.model.set_value(iter, self.COL_BUILDER, builder)
self.model.set_value(iter, self.COL_BUILDER_NAME, buildername)
self.model.set_value(iter, self.COL_BUILDER_BUILD_ETA_TEXT, 'n/a')
+
def remote_builderRemoved(self, buildername):
"""Called by the PB server when a builder has been removed from the
buildbot."""
# Update status
if statename == 'building':
+
model.set_value(
iter, self.COL_BUILDER_BUILD_STATUS, 'Unknown')
+ model.set_value(
+ iter, self.COL_BUILDER_BUILD_ETA_TEXT, 'Unknown')
+
self.model.foreach(updateState, None)
def remote_buildFinished(self, buildername, build, result):
# Update build status
- build.callRemote('getNumber').addCallback(
- lambda num:
+ dl = defer.DeferredList([build.callRemote('getNumber'),
+ build.callRemote('getResults')])
+
+ dl.addCallback(
+ lambda arg:
model.set_value(iter,
self.COL_BUILDER_BUILD_STATUS,
- 'Finished build %d' % num))
+ 'Finished build %d: %s' %
+ (arg[0][1], self.Results[arg[1][1]])))
# Reset progress indicators
model.set_value(iter, self.COL_BUILDER_BUILD_ETA_TOTAL, 0)
+ model.set_value(iter, self.COL_BUILDER_BUILD_ETA_PERCENT, 0)
model.set_value(iter, self.COL_BUILDER_BUILD_ETA_TEXT, 'n/a')
self.model.foreach(updateStatus, None)