view talosnames/web.py @ 27:ce9374c19169

try to fix a keyerror
author Jeff Hammel <jhammel@mozilla.com>
date Fri, 13 Jul 2012 15:47:05 -0700
parents c6a042aad739
children c6580ad2612f
line wrap: on
line source

#!/usr/bin/env python

"""
web handler for talosnames
"""

import os
import pprint
import tempita
from api import TalosNames
from webob import Request, Response, exc

here = os.path.dirname(os.path.abspath(__file__))
template = os.path.join(here, 'templates', 'index.html')

class Handler(object):

    def __init__(self, **kw):
        self.api = TalosNames()
        self.template = file(template).read()

        # get data
        suites = sorted(self.api.suites.keys())
        tests = {}
        for suite in suites:
            try:
                test = self.api.test_config(suite)
                tests[suite] = test
            except:
                tests[suite] = None

        self.data = {'suites': suites,
                     'commands': self.api.buildbot_commands,
                     'tbpl': dict([(suite, self.api.tbpl_name(suite))
                                   for suite in suites]),
                     'tests': tests,
                     'pprint': pprint.pformat,
                     'api': self.api
                     }

        paint = {}
        chrome = {}
        graphserver = {}
        for suite in suites:
            for test in tests.get(suite) or []:
                config = self.api.talos_config(suite)
                _paint = '--mozAfterPaint' in self.data['commands'][suite]
                _chrome = '--noChrome' not in self.data['commands'][suite]
                extension = config.get('test_name_extension', '')
                _extension = ''
                if not _chrome:
                    _extension += '_nochrome'
                if _paint:
                    _extension += '_paint'
                if extension != _extension:
                    raise AssertionError
                paint[suite] = _paint
                chrome[suite] = _chrome
                graphserver.setdefault(suite, {})[test] = [self.api.graphserver_name(test + extension) or ('','')]
        self.data['graphserver'] = graphserver
        self.data['paint'] = paint
        self.data['chrome'] = chrome

    def __call__(self, environ, start_response):
        request = Request(environ)
        response = Response(content_type='text/html',
                            body=self.render())
        return response(environ, start_response)

    def render(self):
        template = tempita.HTMLTemplate(self.template)
        return template.substitute(self.data)

if __name__ == '__main__':
    from wsgiref import simple_server
    app = Handler()
    server = simple_server.make_server(host='0.0.0.0', port=8080, app=app)
    server.serve_forever()