root/livinglogic.python.pycoco/src/pycoco/xmlns.py @ 90:ebc26878086f

Revision 90:ebc26878086f, 6.2 KB (checked in by Walter Doerwald <walter@…>, 8 years ago)

Checkout Python via hg. Update XIST version to 3.23.

Line 
1# -*- coding: utf-8 -*-
2
3"""
4This module is an XIST namespace used for formatting the HTML coverage report.
5"""
6
7import datetime
8
9from ll.xist import xsc
10from ll.xist.ns import xml, html, meta, htmlspecials, ul4
11
12
13xmlns = "http://xmlns.python.org/coverage"
14
15
16class page(xsc.Element):
17    xmlns = xmlns
18
19    class Attrs(xsc.Element.Attrs):
20        class title(xsc.TextAttr): required = True
21        class crumbs(xsc.TextAttr): required = True
22        class onload(xsc.TextAttr): pass
23
24    def convert(self, converter):
25        e = xsc.Frag(
26            xml.XML(), "\n",
27            html.DocTypeXHTML10transitional(), "\n",
28            html.html(
29                html.head(
30                    meta.contenttype(),
31                    html.title(
32                        "Python code coverage",
33                        ul4.if_("filename"),
34                            ": ", ul4.printx("filename"),
35                        ul4.else_(),
36                            " (", ul4.print_("format(timestamp, '%Y-%m-%d')"), ")",
37                        ul4.end("if"),
38                    ),
39                    meta.stylesheet(href="/coverage.css"),
40                    meta.stylesheet(href="/coverage_sortfilelist.css"),
41                    htmlspecials.javascript(src="/coverage.js"),
42                ),
43                html.body(
44                    html.div(
45                        html.div(
46                            html.a(
47                                htmlspecials.autoimg(src="http://www.python.org/images/python-logo.gif", alt="Python", border=0),
48                                href="http://www.python.org/",
49                            ),
50                            class_="logo",
51                        ),
52                        html.div(
53                            ul4.for_("(i, item) in enumerate(crumbs)"),
54                                html.span(
55                                    html.span(
56                                        ul4.if_("i"),
57                                            ">",
58                                        ul4.else_(),
59                                            u"\xbb",
60                                        ul4.end("if"),
61                                        class_="bullet",
62                                    ),
63                                    ul4.if_("item.href"),
64                                        html.a(ul4.printx("item.title"), href=ul4.printx("item.href")),
65                                    ul4.else_(),
66                                        html.span(ul4.printx("item.title"), class_="here"),
67                                    ul4.end("if"),
68                                ul4.end("for"),
69                                class_="crumb",
70                            ),
71                            class_="crumbs",
72                        ),
73                        class_="header",
74                    ),
75                    html.div(
76                        self.content,
77                        class_="content",
78                    ),
79                    onload=ul4.attr_if("get('onload')", ul4.printx("onload")),
80                ),
81            ),
82        )
83        return e.convert(converter)
84
85
86class filelist(xsc.Element):
87    xmlns = xmlns
88
89    class Attrs(xsc.Element.Attrs):
90        class timestamp(xsc.TextAttr): pass
91        class revision(xsc.TextAttr): pass
92
93    def convert(self, converter):
94        e = xsc.Frag(
95            html.h1("Python code coverage"),
96            html.p("Generated at ", ul4.printx("now.format('%Y-%m-%d %H:%M:%S')"), class_="note"),
97            html.p("Last commit at ", ul4.printx("timestamp.format('%Y-%m-%d %H:%M:%S')"), " by ", ul4.printx("author"), class_="note"),
98            html.p("Changeset identification hash ", ul4.printx("changesetid"), class_="note"),
99            html.p("Local revision number ", ul4.printx("revision"), class_="note"),
100            html.p(html.a("Build log", href="buildlog.txt"), " ",html.a("Test log", href="testlog.txt"), class_="note"),
101            htmlspecials.plaintable(
102                html.thead(
103                    html.tr(
104                        html.th("Filename", id="filename"),
105                        html.th("# lines", id="nroflines"),
106                        html.th("# coverable lines", id="coverablelines"),
107                        html.th("# covered lines", id="coveredlines"),
108                        html.th("coverage", id="coverage"),
109                        html.th("distribution", id="distibution"),
110                    ),
111                ),
112                html.tbody(
113                    ul4.for_("file in files"),
114                        html.tr(
115                            html.th(
116                                html.a(
117                                    ul4.printx("file.name"),
118                                    href=(ul4.printx("file.name"), ".html"),
119                                ),
120                                class_="filename",
121                            ),
122                            html.td(
123                                ul4.printx("file.lines"),
124                                class_="nroflines",
125                            ),
126                            html.td(
127                                ul4.printx("file.coverablelines"),
128                                class_="coverablelines",
129                            ),
130                            html.td(
131                                ul4.printx("file.coveredlines"),
132                                class_="coveredlines",
133                            ),
134                            html.td(
135                                ul4.if_("file.coverablelines"),
136                                    ul4.printx("((100.*file.coveredlines)/file.coverablelines).format('.2f')"),
137                                    "%",
138                                ul4.else_(),
139                                    "n/a",
140                                ul4.end("if"),
141                                class_=(
142                                    "coverage",
143                                    ul4.if_("not file.coverablelines"),
144                                        " disabled",
145                                    ul4.end("if"),
146                                ),
147                            ),
148                            html.td(
149                                ul4.code("totalwidth = 100"),
150                                ul4.if_("file.coverablelines"),
151                                    ul4.if_("file.coverablelines < file.lines"),
152                                        ul4.code("width = int(1.*(file.lines-file.coverablelines)/file.lines*100)"),
153                                        htmlspecials.pixel(src="/spc.gif", width=ul4.printx("width"), height=8, style="background-color: #ccc;"),
154                                        ul4.code("totalwidth -= width"),
155                                    ul4.end("if"),
156                                    ul4.if_("file.coveredlines < file.coverablelines"),
157                                        ul4.code("width = int(1.*(file.coverablelines-file.coveredlines)/file.lines*100)"),
158                                        htmlspecials.pixel(src="/spc.gif", width=ul4.printx("width"), height=8, style="background-color: #f00;"),
159                                        ul4.code("totalwidth -= width"),
160                                    ul4.end("if"),
161                                    ul4.if_("totalwidth"),
162                                        htmlspecials.pixel(src="/spc.gif", width=ul4.printx("totalwidth"), height=8, style="background-color: #0c0;"),
163                                    ul4.end("if"),
164                                ul4.else_(),
165                                    htmlspecials.pixel(src="/spc.gif", width=ul4.printx("totalwidth"), height=8, style="background-color: #000;"),
166                                ul4.end("if"),
167                                class_="dist",
168                            ),
169                            class_="files",
170                        ),
171                    ul4.end("for"),
172                    id="files",
173                ),
174                class_="files",
175            )
176        )
177        return e.convert(converter)
178
179
180class filecontent(xsc.Element):
181    xmlns = xmlns
182
183    class Attrs(xsc.Element.Attrs):
184        class name(xsc.TextAttr): required = True
185
186    def convert(self, converter):
187        e = xsc.Frag(
188            html.h1("Python code coverage for ", ul4.printx("filename")),
189            htmlspecials.plaintable(
190                html.thead(
191                    html.tr(
192                        html.th("#"),
193                        html.th("count"),
194                        html.th("content"),
195                    ),
196                ),
197                html.tbody(
198                    ul4.for_("(i, line) in enumerate(lines)"),
199                        html.tr(
200                            html.th(ul4.print_("i+1")),
201                            html.td(
202                                ul4.if_("not isnone(line.count) and line.count >= 0"),
203                                    ul4.printx("line.count"),
204                                ul4.else_(),
205                                    "n/a",
206                                ul4.end("if"),
207                                class_="count",
208                            ),
209                            html.td(ul4.printx("line.content"), class_="line"),
210                            class_=(
211                                ul4.attr_if("isnone(line.count) or line.count <= 0"),
212                                ul4.if_("isnone(line.count) or line.count < 0"),
213                                    "uncoverable",
214                                ul4.elif_("not line.count"),
215                                    "uncovered",
216                                ul4.end("if"),
217                            ),
218                        ),
219                    ul4.end("for"),
220                ),
221                class_="file",
222            )
223        )
224        return e.convert(converter)
Note: See TracBrowser for help on using the browser.