source: 2011/31/write_report.py @ 2488

Revision 2488, 3.5 KB checked in by tekrjant, 8 years ago (diff)

Build-taulukko paremman näköinen.

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
44.success {
45  background-color: green;
46}
47
48.fail {
49  background-color: red;
50}
51"""
52
53
54def check_requirements():
55        if not exists("build"):
56                raise Exception("Directory build not found. Run build_games.py first!")
57
58def addElement(parent, name):
59        node = report.createElement(name)
60        parent.appendChild(node)
61        return node
62
63
64def addTextElement(parent, name, value):
65        node = report.createElement(name)
66        parent.appendChild(node)
67        node.appendChild(report.createTextNode(str(value)))
68        return node
69
70
71def initialize_report():
72        global report
73
74        report = Document()
75        html = addElement(report, "html")
76
77        refresh_tag = addElement(html, "meta")
78        refresh_tag.setAttribute("http-equiv", "refresh")
79        refresh_tag.setAttribute("content", "10")
80
81        head = addElement(html, "head")
82        style = addTextElement(head, "style", CSS)
83        style.setAttribute("type", "text/css")
84        addTextElement(head, "title", "Build")
85
86        body = addElement(html, "body")
87
88        global table
89        table = addElement(body, "table")
90        header_row = addElement(table, "tr")
91        addTextElement(header_row, "th", "Tekijä")
92        addTextElement(header_row, "th", "Peli")
93        addTextElement(header_row, "th", "Viimeisimmän talletuksen aika")
94
95
96def write_results():
97    for d in os.listdir("build"):
98            with open(join("build", d), "r") as f:
99                    lines = f.readlines()
100                    author = lines[0].strip()
101                    name = lines[1].strip()
102                    result = lines[2].strip()
103                    time_of_update = lines[3].strip()
104
105                    if hide_pong_games and re.search("pong", name, flags=re.IGNORECASE):
106                            continue
107
108                    success = (result == "success")
109
110                    style = "success"
111                    if not success:
112                            style = "fail"
113                    tr = addElement(table, "tr")
114                    tr.setAttribute("class", style)
115                    addTextElement(tr, "td", author)
116                    addTextElement(tr, "td", name)
117                    addTextElement(tr, "td", time_of_update)
118
119
120def write_report():
121        with open(join(report_location, "build_report.html"), "w") as f:
122                f.write(report.toprettyxml())
123
124
125def main():
126        if "--hide-pong" in sys.argv:
127                global hide_pong_games
128                hide_pong_games = True
129
130        try:
131                while True:
132                        check_requirements()
133                        initialize_report()
134                        write_results()
135                        write_report()
136                        print "report written"
137                        time.sleep(10)
138        except KeyboardInterrupt:
139                print "cancelled"
140        except Exception, e:
141                print
142                print "NOT SUCCESSFUL:", e
143                return 1
144
145
146if __name__ == '__main__':
147        sys.exit(main())
148
Note: See TracBrowser for help on using the repository browser.