[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