[pypy-svn] r40475 - in pypy/dist/pypy/tool/build: . web web/templates web/test web/theme
guido at codespeak.net
guido at codespeak.net
Wed Mar 14 13:12:56 CET 2007
Author: guido
Date: Wed Mar 14 13:12:53 2007
New Revision: 40475
Modified:
pypy/dist/pypy/tool/build/config.py
pypy/dist/pypy/tool/build/web/app.py
pypy/dist/pypy/tool/build/web/templates/build.html
pypy/dist/pypy/tool/build/web/templates/builds.html
pypy/dist/pypy/tool/build/web/test/test_app.py
pypy/dist/pypy/tool/build/web/theme/style.css
Log:
Displaying status in builds page, and made that the status both here and in the
build page are coloured. To make this possible I refactored the code a bit so
that information about builds and builtpaths are now sent in one server call,
rather than having to ask for the build path information seperately.
Modified: pypy/dist/pypy/tool/build/config.py
==============================================================================
--- pypy/dist/pypy/tool/build/config.py (original)
+++ pypy/dist/pypy/tool/build/config.py Wed Mar 14 13:12:53 2007
@@ -3,7 +3,7 @@
packageparent = py.magic.autopath().dirpath().dirpath().dirpath().dirpath()
# general settings, used by both server and client
-server = 'codespeak.net'
+server = 'localhost'
webserver = ''
port = 12321
testport = 32123
Modified: pypy/dist/pypy/tool/build/web/app.py
==============================================================================
--- pypy/dist/pypy/tool/build/web/app.py (original)
+++ pypy/dist/pypy/tool/build/web/app.py Wed Mar 14 13:12:53 2007
@@ -132,32 +132,12 @@
fix_html(template.unicode(self.get_info())))
def get_info(self):
- br = BuildRequest.fromstring(self.call_method('buildrequest',
- '"%s"' % (
- self._buildid,)))
- buildurl = None
- log = None
- error = None
- if br.build_start_time:
- if br.build_end_time:
- buildurl = self.call_method('buildurl',
- '"%s"' % (self._buildid,))
- info = self.call_method('buildpathinfo',
- '"%s"' % (self._buildid,))
- log = info['log']
- error = info['error']
- if error == 'None':
- error = None
- if error:
- status = 'failed'
- else:
- status = 'done'
- else:
- status = 'in progress'
- else:
- status = 'waiting'
+ bpinfo, brstr = self.call_method('buildrequest', '"%s"' % (self._buildid,))
+ br = BuildRequest.fromstring(brstr)
+ if bpinfo == None:
+ bpinfo = {}
return {
- 'url': buildurl,
+ 'url': bpinfo['buildurl'],
'id': br.id(),
'email': br.email,
'svnurl': br.svnurl,
@@ -169,8 +149,9 @@
sorted(br.sysinfo.items())],
'compileinfo': [{'key': k, 'value': v} for (k, v) in
sorted(br.compileinfo.items())],
- 'status': status,
- 'error': error,
+ 'status': bpinfo['status'],
+ 'statusclass': bpinfo['status'].replace(' ', '_'),
+ 'error': bpinfo['error'],
}
class BuildsIndexPage(ServerPage):
@@ -183,9 +164,9 @@
fix_html(template.unicode({'builds': self.get_builds()})))
def get_builds(self):
- buildrequests = [BuildRequest.fromstring(b) for b in
+ data = [(i, BuildRequest.fromstring(b)) for(i, b) in
self.call_method('buildrequests')]
- buildrequests.sort(lambda a, b: cmp(a.request_time, b.request_time))
+ data.sort(lambda a, b: cmp(b[1].request_time, a[1].request_time))
return [{'id': b.id(),
'href': '/builds/%s' % (b.id(),),
'email': b.email,
@@ -193,8 +174,11 @@
'svnrev': b.normalized_rev,
'request_time': format_time(b.request_time),
'build_start_time': format_time(b.build_start_time) or '-',
- 'build_end_time': format_time(b.build_end_time) or '-'}
- for b in buildrequests]
+ 'build_end_time': format_time(b.build_end_time) or '-',
+ 'status': i['status'],
+ 'statusclass': i['status'].replace(' ', '_'),
+ 'error': i.get('error', '')}
+ for (i, b) in data]
class Builds(Collection):
""" container for BuildsIndexPage and BuildPage """
@@ -260,20 +244,22 @@
return ret
def buildrequests(self):
- ret = [b.serialize() for b in self._all_requests()]
+ ret = [(self._getinfo(b), b.serialize()) for b in
+ self._all_requests()]
return ret
def buildrequest(self, id):
for r in self._all_requests():
if r.id() == id:
- return r.serialize()
+ return (self._getinfo(r), r.serialize())
def buildpathinfo(self, requestid):
for bp in self.metaserver._done:
if bp.request.id() == requestid:
return {
- 'log': str(bp.log),
+ #'log': str(bp.log),
'error': str(bp.error),
+ 'buildurl': self.metaserver.config.path_to_url(bp),
}
def buildurl(self, id):
@@ -286,6 +272,19 @@
done = [b.request for b in self.metaserver._done]
return self.metaserver._queued + self.metaserver._waiting + running + done
+ def _getinfo(self, br):
+ status = 'waiting'
+ info = self.buildpathinfo(br.id()) or {}
+ if br.build_end_time:
+ if info['error'] and info['error'] != 'None':
+ status = 'failed'
+ else:
+ status = 'done'
+ elif br.build_start_time:
+ status = 'in progress'
+ info.update({'status': status})
+ return info
+
if __name__ == '__main__':
from pypy.tool.build.web.server import run_server
run_server(('', 8080), AppHandler)
Modified: pypy/dist/pypy/tool/build/web/templates/build.html
==============================================================================
--- pypy/dist/pypy/tool/build/web/templates/build.html (original)
+++ pypy/dist/pypy/tool/build/web/templates/build.html Wed Mar 14 13:12:53 2007
@@ -19,7 +19,7 @@
%(url)]c
<div>
<span class="title">status:</span>
- <span>%(status)s</span>
+ <span class="%(statusclass)s">%(status)s</span>
</div>
%(error)[c
<div class="error">
Modified: pypy/dist/pypy/tool/build/web/templates/builds.html
==============================================================================
--- pypy/dist/pypy/tool/build/web/templates/builds.html (original)
+++ pypy/dist/pypy/tool/build/web/templates/builds.html Wed Mar 14 13:12:53 2007
@@ -22,6 +22,7 @@
<th>requested</th>
<th>started</th>
<th>ended</th>
+ <th>status</th>
</tr>
</thead>
<tbody>
@@ -31,6 +32,7 @@
<td>%(request_time)s</td>
<td>%(build_start_time)s</td>
<td>%(build_end_time)s</td>
+ <td class="%(statusclass)s">%(status)s</td>
</tr>
%(builds)]b
</tbody>
Modified: pypy/dist/pypy/tool/build/web/test/test_app.py
==============================================================================
--- pypy/dist/pypy/tool/build/web/test/test_app.py (original)
+++ pypy/dist/pypy/tool/build/web/test/test_app.py Wed Mar 14 13:12:53 2007
@@ -222,7 +222,8 @@
def test_buildrequests(self):
temppath = py.test.ensuretemp(
'TestMetaServerAccessor.test_buildersinfo')
- config = fake.Container(projectname='test', buildpath=temppath)
+ config = fake.Container(projectname='test', buildpath=temppath,
+ path_to_url=lambda p: 'file:///foo')
svr = metaserver.MetaServer(config, fake.FakeChannel())
s = MetaServerAccessor(svr)
req = build.BuildRequest('foo at bar.com', {'foo': 'bar'}, {},
@@ -231,13 +232,18 @@
svr._queued.append(req)
brs = s.buildrequests()
assert len(brs) == 1
- assert brs[0] == req.serialize()
+ assert brs[0][0] == {'status': 'waiting'}
+ assert brs[0][1] == req.serialize()
svr._queued = []
assert len(s.buildrequests()) == 0
- svr._done.append(fake.Container(request=req))
+ req.build_start_time = py.std.time.time()
+ req.build_end_time = py.std.time.time()
+ svr._done.append(fake.Container(request=req, error=None))
brs = s.buildrequests()
assert len(brs) == 1
- assert brs[0] == req.serialize()
+ assert brs[0][0] == {'status': 'done', 'error': 'None',
+ 'buildurl': 'file:///foo'}
+ assert brs[0][1] == req.serialize()
def test_buildrequest(self):
temppath = py.test.ensuretemp(
@@ -250,7 +256,8 @@
req._nr = '10'
svr._queued.append(req)
br = s.buildrequest(req.id())
- assert br == req.serialize()
+ assert br[0] == {'status': 'waiting'}
+ assert br[1] == req.serialize()
def test_buildurl(self):
temppath = py.test.ensuretemp(
Modified: pypy/dist/pypy/tool/build/web/theme/style.css
==============================================================================
--- pypy/dist/pypy/tool/build/web/theme/style.css (original)
+++ pypy/dist/pypy/tool/build/web/theme/style.css Wed Mar 14 13:12:53 2007
@@ -25,3 +25,19 @@
text-align: center;
}
+.failed {
+ color: red;
+}
+
+.done {
+ color: blue;
+}
+
+.in_progress {
+ color: green;
+}
+
+.waiting {
+ color: yellow;
+}
+
More information about the Pypy-commit
mailing list