remove a lot of unused imports, marked by pyflakes
[buildbot.git] / buildbot / clients / debug.py
blob34b2c75d29fd3b9a0b3ebf1ea42de8a1e81a7d15
1 #! /usr/bin/python
3 from twisted.internet import gtk2reactor
4 gtk2reactor.install()
5 from twisted.internet import reactor
6 from twisted.python import util
7 from twisted.spread import pb
8 from twisted.cred import credentials
9 import gtk, gtk.glade, gnome.ui
10 import sys, re
12 class DebugWidget:
13 def __init__(self, master="localhost:8007", passwd="debugpw"):
14 self.connected = 0
15 try:
16 host, port = re.search(r'(.+):(\d+)', master).groups()
17 except:
18 print "unparseable master location '%s'" % master
19 print " expecting something more like localhost:8007"
20 raise
21 self.host = host
22 self.port = int(port)
23 self.passwd = passwd
24 self.remote = None
25 xml = self.xml = gtk.glade.XML(util.sibpath(__file__, "debug.glade"))
26 g = xml.get_widget
27 self.buildname = g('buildname')
28 self.filename = g('filename')
29 self.connectbutton = g('connectbutton')
30 self.connectlabel = g('connectlabel')
31 g('window1').connect('destroy', lambda win: gtk.mainquit())
32 # put the master info in the window's titlebar
33 g('window1').set_title("Buildbot Debug Tool: %s" % master)
34 c = xml.signal_connect
35 c('do_connect', self.do_connect)
36 c('do_reload', self.do_reload)
37 c('do_rebuild', self.do_rebuild)
38 c('do_poke_irc', self.do_poke_irc)
39 c('do_build', self.do_build)
40 c('do_commit', self.do_commit)
41 c('on_usebranch_toggled', self.usebranch_toggled)
42 self.usebranch_toggled(g('usebranch'))
43 c('on_userevision_toggled', self.userevision_toggled)
44 self.userevision_toggled(g('userevision'))
45 c('do_current_offline', self.do_current, "offline")
46 c('do_current_idle', self.do_current, "idle")
47 c('do_current_waiting', self.do_current, "waiting")
48 c('do_current_building', self.do_current, "building")
50 def do_connect(self, widget):
51 if self.connected:
52 self.connectlabel.set_text("Disconnecting...")
53 if self.remote:
54 self.remote.broker.transport.loseConnection()
55 else:
56 self.connectlabel.set_text("Connecting...")
57 f = pb.PBClientFactory()
58 creds = credentials.UsernamePassword("debug", self.passwd)
59 d = f.login(creds)
60 reactor.connectTCP(self.host, int(self.port), f)
61 d.addCallbacks(self.connect_complete, self.connect_failed)
62 def connect_complete(self, ref):
63 self.connectbutton.set_label("Disconnect")
64 self.connectlabel.set_text("Connected")
65 self.connected = 1
66 self.remote = ref
67 self.remote.callRemote("print", "hello cleveland")
68 self.remote.notifyOnDisconnect(self.disconnected)
69 def connect_failed(self, why):
70 self.connectlabel.set_text("Failed")
71 print why
72 def disconnected(self, ref):
73 self.connectbutton.set_label("Connect")
74 self.connectlabel.set_text("Disconnected")
75 self.connected = 0
76 self.remote = None
78 def do_reload(self, widget):
79 if not self.remote:
80 return
81 d = self.remote.callRemote("reload")
82 d.addErrback(self.err)
83 def do_rebuild(self, widget):
84 print "Not yet implemented"
85 return
86 def do_poke_irc(self, widget):
87 if not self.remote:
88 return
89 d = self.remote.callRemote("pokeIRC")
90 d.addErrback(self.err)
92 def do_build(self, widget):
93 if not self.remote:
94 return
95 name = self.buildname.get_text()
96 d = self.remote.callRemote("forceBuild", name)
97 d.addErrback(self.err)
99 def usebranch_toggled(self, widget):
100 rev = self.xml.get_widget('branch')
101 if widget.get_active():
102 rev.set_sensitive(True)
103 else:
104 rev.set_sensitive(False)
106 def userevision_toggled(self, widget):
107 rev = self.xml.get_widget('revision')
108 if widget.get_active():
109 rev.set_sensitive(True)
110 else:
111 rev.set_sensitive(False)
113 def do_commit(self, widget):
114 if not self.remote:
115 return
116 filename = self.filename.get_text()
117 who = self.xml.get_widget("who").get_text()
119 branch = None
120 if self.xml.get_widget("usebranch").get_active():
121 branch = self.xml.get_widget('branch').get_text()
122 if branch == '':
123 branch = None
125 revision = None
126 if self.xml.get_widget("userevision").get_active():
127 revision = self.xml.get_widget('revision').get_text()
128 try:
129 revision = int(revision)
130 except ValueError:
131 pass
132 if revision == '':
133 revision = None
135 kwargs = { 'revision': revision, 'who': who }
136 if branch:
137 kwargs['branch'] = branch
138 d = self.remote.callRemote("fakeChange", filename, **kwargs)
139 d.addErrback(self.err)
141 def do_current(self, widget, state):
142 if not self.remote:
143 return
144 name = self.buildname.get_text()
145 d = self.remote.callRemote("setCurrentState", name, state)
146 d.addErrback(self.err)
147 def err(self, failure):
148 print "received error"
149 failure.printTraceback()
152 def run(self):
153 reactor.run()
155 if __name__ == '__main__':
156 master = "localhost:8007"
157 if len(sys.argv) > 1:
158 master = sys.argv[1]
159 passwd = "debugpw"
160 if len(sys.argv) > 2:
161 passwd = sys.argv[2]
162 d = DebugWidget(master, passwd)
163 d.run()