blob: 24c7fce38a45730d5c2bf21e10bba6bfaed18b16 [file] [log] [blame]
import logging
import os
import time
from google.appengine.dist import use_library
use_library('django', '1.2')
from google.appengine.ext import webapp
from google.appengine.ext.webapp import template
from google.appengine.ext.webapp.util import run_wsgi_app
import settings
import base_view
import utils
from dash_db import Build, NetbookBoard, Test, Category
def CategoryDetailTable(netbook, board, category, limit):
header_height = settings.DEFAULT_TABLE_HEADER_HEIGHT
tbl_header = []
tbl_name = category.name
test_dict = {}
tested_tests = set()
build_dict = {}
for i in range(len(category.test_names)/settings.IN_QUERY_LIMIT + 1):
category_names = category.test_names[i*settings.IN_QUERY_LIMIT:(i+1)*settings.IN_QUERY_LIMIT]
test_query = Test.all()
test_query.filter('netbook = ', netbook.name)
test_query.filter('board = ', board.name)
if category.is_job_name:
test_query.filter('job_name = ', category.name)
test_query.filter('test_name in ', category_names)
test_query.order('-test_finished_time')
results = test_query.fetch(limit * 30)
for test in results:
if test.build not in build_dict:
build_dict[test.build] = Build.get(board.name, test.build)
tests = test_dict.setdefault(test.build, {})
tests[test.test_name] = test
tested_tests.add(test.test_name)
for test_name in sorted(tested_tests):
link = '/test?test_name=%s' % test_name
popup = ''
title = test_name
if test_name.split('_')[0] == category.name:
test_name = test_name.split('_')[1]
if len(test_name) > settings.DEFAULT_LENGTH:
test_name = test_name[:settings.DEFAULT_LENGTH] + '...'
header_name = test_name
tbl_header.append(utils.Render('test_col_header.html', locals()))
tbl_rows = []
for build_name in board.builds[:limit]:
build = build_dict.get(build_name, None)
if not build:
build = Build.get(board.name, build_name)
cells = []
build_link = '/build?board=%s&build=%s' % (board.name, build_name)
started_time, finished_time, build_time = utils.FormatBuildTime(build)
chrome_version = '%s(%s)' % (build.chrome_version, build.chrome_svn_number)
build_popup = utils.Render('build_popup.html', locals())
tested = False
for test_name in sorted(tested_tests):
test = test_dict.get(build_name, {}).get(test_name, None)
if test:
tested = True
cells.append(utils.RenderTestCell(test))
if tested:
tbl_rows.append((build_name, build_link, build_popup, cells))
if tbl_header and tbl_rows:
return utils.Render('table.html', locals())
else:
return
class BoardView(base_view.BaseView):
def do_get(self):
self.board_bar()
self.netbook_bar()
netbook_board = NetbookBoard.get(self.netbook.name, self.board.name)
if netbook_board.categories:
category_link_list = []
for category_name in netbook_board.categories:
category_link_list.append(
'<a href="?board=%s&netbook=%s&category=%s&limit=%d">%s</a>' %
(self.board.name, self.netbook.name, category_name, self.limit, category_name))
self.response.out.write('<div style="clear:both;">')
self.response.out.write(' | '.join(category_link_list))
self.response.out.write('</div>')
self.spacer()
# legend
self.response.out.write(utils.Render('legend.html', locals()))
self.spacer()
table = CategoryDetailTable(self.netbook, self.board, self.category, self.limit)
if table:
self.response.out.write(table)
self.timing()
application = webapp.WSGIApplication([('/board', BoardView),
],
debug=False)
def main():
run_wsgi_app(application)
if __name__ == "__main__":
main()