[pypy-svn] r40434 - in pypy/branch/guido-buildtool-web/pypy/tool/build: . test web web/templates web/test
guido at codespeak.net
guido at codespeak.net
Tue Mar 13 13:03:03 CET 2007
Author: guido
Date: Tue Mar 13 13:02:59 2007
New Revision: 40434
Modified:
pypy/branch/guido-buildtool-web/pypy/tool/build/buildserver.py
pypy/branch/guido-buildtool-web/pypy/tool/build/metaserver.py
pypy/branch/guido-buildtool-web/pypy/tool/build/test/test_buildserver.py
pypy/branch/guido-buildtool-web/pypy/tool/build/web/app.py
pypy/branch/guido-buildtool-web/pypy/tool/build/web/conftest.py
pypy/branch/guido-buildtool-web/pypy/tool/build/web/templates/build.html
pypy/branch/guido-buildtool-web/pypy/tool/build/web/templates/buildersinfo.html
pypy/branch/guido-buildtool-web/pypy/tool/build/web/templates/builds.html
pypy/branch/guido-buildtool-web/pypy/tool/build/web/templates/index.html
pypy/branch/guido-buildtool-web/pypy/tool/build/web/templates/serverstatus.html
pypy/branch/guido-buildtool-web/pypy/tool/build/web/test/test_app.py
Log:
Fixed config problem in tests, added some more info (like log and error) to
the build page, fixed build_start_time and build_end_time, added nav to
all pages (hard-coded for now).
Modified: pypy/branch/guido-buildtool-web/pypy/tool/build/buildserver.py
==============================================================================
--- pypy/branch/guido-buildtool-web/pypy/tool/build/buildserver.py (original)
+++ pypy/branch/guido-buildtool-web/pypy/tool/build/buildserver.py Tue Mar 13 13:02:59 2007
@@ -28,6 +28,7 @@
accepted = self.channel.receive()
if accepted:
self.busy_on = request
+ request.build_start_time = py.std.time.time()
thread.start_new_thread(self.wait_until_done, (request,))
else:
self.refused.append(request)
@@ -62,6 +63,8 @@
# pretend we're compiling by sleeping a bit...
py.std.time.sleep(self.testing_sleeptime)
+ request.build_end_time = py.std.time.time()
+ buildpath.request = request # re-write to disk
self.metaserver.compilation_done(buildpath)
self.busy_on = None
Modified: pypy/branch/guido-buildtool-web/pypy/tool/build/metaserver.py
==============================================================================
--- pypy/branch/guido-buildtool-web/pypy/tool/build/metaserver.py (original)
+++ pypy/branch/guido-buildtool-web/pypy/tool/build/metaserver.py Tue Mar 13 13:02:59 2007
@@ -100,7 +100,7 @@
# we don't have a build for this yet, find a builder to compile it
hostname = self.run(request)
if hostname is not None:
- return (False, "found a suitable server, going to build on '%s'" %
+ return (False, "found a suitable server, going to build on '%s'" %
(hostname, ))
self._queuelock.acquire()
try:
Modified: pypy/branch/guido-buildtool-web/pypy/tool/build/test/test_buildserver.py
==============================================================================
--- pypy/branch/guido-buildtool-web/pypy/tool/build/test/test_buildserver.py (original)
+++ pypy/branch/guido-buildtool-web/pypy/tool/build/test/test_buildserver.py Tue Mar 13 13:02:59 2007
@@ -40,8 +40,8 @@
accepted = c1.compile(br)
assert accepted
ret = c1.channel.receive()
- assert ret == br.serialize() # this was still in the buffer
- assert c1.busy_on.serialize() == br.serialize()
+ assert build.BuildRequest.fromstring(ret).id() == br.id() # this was still in the buffer
+ assert c1.busy_on.id() == br.id()
c1.channel.send('foo bar')
c1.channel.send(None)
c1.channel.send('log')
Modified: pypy/branch/guido-buildtool-web/pypy/tool/build/web/app.py
==============================================================================
--- pypy/branch/guido-buildtool-web/pypy/tool/build/web/app.py (original)
+++ pypy/branch/guido-buildtool-web/pypy/tool/build/web/app.py Tue Mar 13 13:02:59 2007
@@ -18,6 +18,12 @@
'"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\n%s' % (
html.strip().encode('UTF-8'),))
+def format_time(t):
+ if t is None:
+ return None
+ time = py.std.time
+ return time.strftime('%Y/%m/%d %H:%M', time.gmtime(t))
+
class ServerPage(object):
""" base class for pages that communicate with the server
"""
@@ -122,16 +128,37 @@
br = BuildRequest.fromstring(self.call_method('buildrequest',
'"%s"' % (
self._buildid,)))
- buildurl = self.call_method('buildurl', '"%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:
+ status = 'failed'
+ else:
+ status = 'done'
+ else:
+ status = 'in progress'
+ else:
+ status = 'waiting'
return {
'url': buildurl,
'id': br.id(),
'email': br.email,
'svnurl': br.svnurl,
'svnrev': br.normalized_rev,
- 'request_time': br.request_time,
- 'build_start_time': br.build_start_time,
- 'build_end_time': br.build_end_time,
+ 'request_time': format_time(br.request_time),
+ 'build_start_time': format_time(br.build_start_time),
+ 'build_end_time': format_time(br.build_end_time),
+ 'status': status,
+ 'log': log,
+ 'error': error,
}
class BuildsIndexPage(ServerPage):
@@ -144,6 +171,9 @@
fix_html(template.unicode({'builds': self.get_builds()})))
def get_builds(self):
+ buildrequests = [BuildRequest.fromstring(b) for b in
+ self.call_method('buildrequests')]
+ buildrequests.sort(lambda a, b: cmp(a.request_time, b.request_time))
return [{'id': b.id(),
'href': '/builds/%s' % (b.id(),),
'email': b.email,
@@ -151,9 +181,7 @@
'svnrev': b.normalized_rev,
'request_time': b.request_time,
'build_start_time': b.build_start_time,
- 'build_end_time': b.build_end_time} for b in
- [BuildRequest.fromstring(b) for b in
- self.call_method('buildrequests')]]
+ 'build_end_time': b.build_end_time} for b in buildrequests]
class Builds(Collection):
""" container for BuildsIndexPage and BuildPage """
@@ -178,10 +206,11 @@
class Application(Collection):
""" the application root """
- style = FsFile(mypath.join('theme/style.css'), 'text/css')
- serverstatus = ServerStatusPage(config)
- buildersinfo = BuildersInfoPage(config)
- builds = Builds(config)
+ def __init__(self, config):
+ self.style = FsFile(mypath.join('theme/style.css'), 'text/css')
+ self.serverstatus = ServerStatusPage(config)
+ self.buildersinfo = BuildersInfoPage(config)
+ self.builds = Builds(config)
def index(self, handler, path, query):
template = templess.template(
@@ -191,7 +220,9 @@
index.exposed = True
class AppHandler(Handler):
- application = Application()
+ def __init__(self, *args, **kwargs):
+ self.application = Application(config)
+ super(AppHandler, self).__init__(*args, **kwargs)
class MetaServerAccessor(object):
def __init__(self, ms):
@@ -224,6 +255,14 @@
if r.id() == id:
return r.serialize()
+ def buildpathinfo(self, requestid):
+ for bp in self.server._done:
+ if bp.request.id() == requestid:
+ return {
+ 'log': str(bp.log),
+ 'error': str(bp.error),
+ }
+
def buildurl(self, id):
for r in self.server._done:
if r.request.id() == id:
Modified: pypy/branch/guido-buildtool-web/pypy/tool/build/web/conftest.py
==============================================================================
--- pypy/branch/guido-buildtool-web/pypy/tool/build/web/conftest.py (original)
+++ pypy/branch/guido-buildtool-web/pypy/tool/build/web/conftest.py Tue Mar 13 13:02:59 2007
@@ -1,6 +1,9 @@
import py
from py.__.doc.conftest import Directory as Dir, DoctestText, \
ReSTChecker
+
+mypath = py.magic.autopath().dirpath()
+
Option = py.test.config.Option
option = py.test.config.addoptions("pypybuilder test options",
Option('', '--webcheck',
@@ -10,3 +13,8 @@
),
)
+class Directory(Dir):
+ def run(self):
+ if self.fspath == mypath:
+ return ['test', 'README.txt', 'README_TEMPLESSER.txt']
+ return super(Directory, self).run()
Modified: pypy/branch/guido-buildtool-web/pypy/tool/build/web/templates/build.html
==============================================================================
--- pypy/branch/guido-buildtool-web/pypy/tool/build/web/templates/build.html (original)
+++ pypy/branch/guido-buildtool-web/pypy/tool/build/web/templates/build.html Tue Mar 13 13:02:59 2007
@@ -3,20 +3,48 @@
<title>Build meta server build <t:tag t:replace="id" /></title>
</head>
<body>
+ <ul class="sidebar">
+ <li><a href="/serverstatus">server status</a></li>
+ <li><a href="/buildersinfo">connected build servers</a></li>
+ <li><a href="/builds">builds (both in-progress and done)</a></li>
+ </ul>
<h2>Build <t:tag t:replace="id" /></h2>
<div class="infoblock">
- <div class="title">url</div>
- <div t:content="url" />
- <div class="title">svn url</div>
- <div t:content="svnurl" />
- <div class="title">svn revision</div>
- <div t:content="svnrev" />
- <div class="title">request time</div>
- <div t:content="request_time" />
- <div class="title">started</div>
- <div t:content="build_start_time" />
- <div class="title">ended</div>
- <div t:content="build_end_time" />
+ <div t:cond="url">
+ <span class="title">url:</span>
+ <a t:attr="href url" t:content="url"></a>
+ </div>
+ <div>
+ <span class="title">status:</span>
+ <span t:content="status" />
+ </div>
+ <div t:cond="error" class="error">
+ <span class="title">error:</span>
+ <span t:content="error" />
+ </div>
+ <div>
+ <span class="title">svn url:</span>
+ <span t:content="svnurl" />
+ </div>
+ <div>
+ <span class="title">svn revision:</span>
+ <span t:content="svnrev" />
+ </div>
+ <div>
+ <span class="title">request time:</span>
+ <span t:content="request_time" />
+ </div>
+ <div t:cond="build_start_time">
+ <span class="title">started:</span>
+ <span t:content="build_start_time" />
+ </div>
+ <div t:cond="build_end_time">
+ <span class="title">ended:</span>
+ <span t:content="build_end_time" />
+ </div>
+ <div t:cond="log">
+ <pre t:content="log" />
+ </div>
</div>
</body>
</html>
Modified: pypy/branch/guido-buildtool-web/pypy/tool/build/web/templates/buildersinfo.html
==============================================================================
--- pypy/branch/guido-buildtool-web/pypy/tool/build/web/templates/buildersinfo.html (original)
+++ pypy/branch/guido-buildtool-web/pypy/tool/build/web/templates/buildersinfo.html Tue Mar 13 13:02:59 2007
@@ -4,6 +4,11 @@
<link rel="stylesheet" type="text/css" href="/style" />
</head>
<body>
+ <ul class="sidebar">
+ <li><a href="/serverstatus">server status</a></li>
+ <li><a href="/buildersinfo">connected build servers</a></li>
+ <li><a href="/builds">builds (both in-progress and done)</a></li>
+ </ul>
<h2>Connected build servers</h2>
<div class="builders">
<div class="builder" t:content="builders">
Modified: pypy/branch/guido-buildtool-web/pypy/tool/build/web/templates/builds.html
==============================================================================
--- pypy/branch/guido-buildtool-web/pypy/tool/build/web/templates/builds.html (original)
+++ pypy/branch/guido-buildtool-web/pypy/tool/build/web/templates/builds.html Tue Mar 13 13:02:59 2007
@@ -3,6 +3,11 @@
<title>Build meta server builds page</title>
</head>
<body>
+ <ul class="sidebar">
+ <li><a href="/serverstatus">server status</a></li>
+ <li><a href="/buildersinfo">connected build servers</a></li>
+ <li><a href="/builds">builds (both in-progress and done)</a></li>
+ </ul>
<h2>Overview of builds</h2>
<p>
Here you see an overview of all builds, both completed (and available
Modified: pypy/branch/guido-buildtool-web/pypy/tool/build/web/templates/index.html
==============================================================================
--- pypy/branch/guido-buildtool-web/pypy/tool/build/web/templates/index.html (original)
+++ pypy/branch/guido-buildtool-web/pypy/tool/build/web/templates/index.html Tue Mar 13 13:02:59 2007
@@ -3,9 +3,10 @@
<title>Build meta server web interface (temp index page)</title>
</head>
<body>
- <ul>
+ <ul class="sidebar">
<li><a href="/serverstatus">server status</a></li>
<li><a href="/buildersinfo">connected build servers</a></li>
+ <li><a href="/builds">builds (both in-progress and done)</a></li>
</ul>
</body>
</html>
Modified: pypy/branch/guido-buildtool-web/pypy/tool/build/web/templates/serverstatus.html
==============================================================================
--- pypy/branch/guido-buildtool-web/pypy/tool/build/web/templates/serverstatus.html (original)
+++ pypy/branch/guido-buildtool-web/pypy/tool/build/web/templates/serverstatus.html Tue Mar 13 13:02:59 2007
@@ -3,6 +3,11 @@
<title>Build meta server status page</title>
</head>
<body>
+ <ul class="sidebar">
+ <li><a href="/serverstatus">server status</a></li>
+ <li><a href="/buildersinfo">connected build servers</a></li>
+ <li><a href="/builds">builds (both in-progress and done)</a></li>
+ </ul>
<h2>Server status</h2>
<ul>
<li>Connected build servers: <t:block t:replace="builders" /></li>
Modified: pypy/branch/guido-buildtool-web/pypy/tool/build/web/test/test_app.py
==============================================================================
--- pypy/branch/guido-buildtool-web/pypy/tool/build/web/test/test_app.py (original)
+++ pypy/branch/guido-buildtool-web/pypy/tool/build/web/test/test_app.py Tue Mar 13 13:02:59 2007
@@ -61,7 +61,7 @@
def setup_module(mod):
mod.path = path = pypyparent.strpath
mod.server_channel = init_fake_metaserver(TESTPORT, path)
- mod.config = fake.Container(port=TESTPORT, path=path)
+ mod.config = fake.Container(port=TESTPORT, path=path, server='localhost')
mod.gateway = py.execnet.PopenGateway()
def teardown_module(mod):
@@ -70,7 +70,7 @@
class TestIndexPage(object):
def test_call(self):
- a = Application()
+ a = Application(config)
headers, html = a.index(None, '/', '')
assert headers == {'Content-Type': 'text/html; charset=UTF-8'}
assert html.strip().startswith('<!DOCTYPE html')
More information about the Pypy-commit
mailing list