source: 2011/31/write_report.py @ 2577

Revision 2492, 3.6 KB checked in by tekrjant, 8 years ago (diff)

Viikonpäivä näkyy suomeksi.

Line 
1# -*- coding: latin-1 -*-
2"""
3Writes a html report of the build results. build_games.py
4should be run first.
5
6The report is written continuously. Hit Ctrl-c to stop.
7"""
8from __future__ import with_statement
9import sys
10import os
11from xml.dom.minidom import Document
12from os.path import *
13import shutil
14from shutil import *
15from glob import *
16from subprocess import *
17from datetime import *
18import time
19import re
20
21
22hide_pong_games = False
23
24report_location = "\\\\eppu.it.jyu.fi\\kurssit\\npo\\temp"
25report = None
26table = None
27
28
29CSS = """
30
31table, th, td {
32  border: 1px solid black;
33}
34
35th, td {
36  padding-left: 1em;
37  padding-right: 1em;
38}
39
40td {
41  color: white;
42}
43
44td.datetime {
45  text-align: right;
46}
47
48.success {
49  background-color: green;
50}
51
52.fail {
53  background-color: red;
54}
55"""
56
57
58def check_requirements():
59        if not exists("build"):
60                raise Exception("Directory build not found. Run build_games.py first!")
61
62def addElement(parent, name):
63        node = report.createElement(name)
64        parent.appendChild(node)
65        return node
66
67
68def addTextElement(parent, name, value):
69        node = report.createElement(name)
70        parent.appendChild(node)
71        node.appendChild(report.createTextNode(str(value)))
72        return node
73
74
75def initialize_report():
76        global report
77
78        report = Document()
79        html = addElement(report, "html")
80
81        refresh_tag = addElement(html, "meta")
82        refresh_tag.setAttribute("http-equiv", "refresh")
83        refresh_tag.setAttribute("content", "10")
84
85        head = addElement(html, "head")
86        style = addTextElement(head, "style", CSS)
87        style.setAttribute("type", "text/css")
88        addTextElement(head, "title", "Build")
89
90        body = addElement(html, "body")
91
92        global table
93        table = addElement(body, "table")
94        header_row = addElement(table, "tr")
95        addTextElement(header_row, "th", "Tekijä")
96        addTextElement(header_row, "th", "Peli")
97        addTextElement(header_row, "th", "Viimeisimmän talletuksen aika")
98
99
100def write_results():
101    for d in os.listdir("build"):
102            with open(join("build", d), "r") as f:
103                    lines = f.readlines()
104                    author = lines[0].strip()
105                    name = lines[1].strip()
106                    result = lines[2].strip()
107                    time_of_update = lines[3].strip()
108
109                    if hide_pong_games and re.search("pong", name, flags=re.IGNORECASE):
110                            continue
111
112                    success = (result == "success")
113
114                    style = "success"
115                    if not success:
116                            style = "fail"
117                    tr = addElement(table, "tr")
118                    tr.setAttribute("class", style)
119                    addTextElement(tr, "td", author)
120                    addTextElement(tr, "td", name)
121                    timeElement = addTextElement(tr, "td", time_of_update)
122                    timeElement.setAttribute("class", "datetime")
123
124
125def write_report():
126        with open(join(report_location, "build_report.html"), "w") as f:
127                f.write(report.toprettyxml())
128
129
130def main():
131        if "--hide-pong" in sys.argv:
132                global hide_pong_games
133                hide_pong_games = True
134
135        try:
136                while True:
137                        check_requirements()
138                        initialize_report()
139                        write_results()
140                        write_report()
141                        print "report written"
142                        time.sleep(10)
143        except KeyboardInterrupt:
144                print "cancelled"
145        except Exception, e:
146                print
147                print "NOT SUCCESSFUL:", e
148                return 1
149
150
151if __name__ == '__main__':
152        sys.exit(main())
153
Note: See TracBrowser for help on using the repository browser.