1 '''
2 Created on Nov 29, 2012
3
4 @author: bolme
5 '''
6
7 import os
8 import pyvision as pv
9 import StringIO
10 import base64
11
13 '''
14 classdocs
15 '''
16
18 '''
19 Constructor
20 '''
21 self.title='untitled'
22 self.elements = []
23 self.hidden_id = 0
24
26 self.elements.append(table)
27
29 '''
30 Add a horizontal rule.
31 '''
32 self.elements.append("\n\n<!---------------------------------------------------------------->\n<HR>\n\n")
33
35 '''
36 Add a horizontal rule.
37 '''
38 self.elements.append("\n<BR>\n\n")
39
41 '''
42 Add a section header.
43 '''
44 self.elements.append("<H2>%s</H2>\n\n"%(name))
45
51
52 - def html(self,name):
53 '''
54 Insert raw unmodified html.
55 '''
56 self.elements.append(name)
57
59 '''
60 Insert text as a paragraph.
61 '''
62 self.elements.append('<p>%s</p>\n\n'%(text))
63
64 - def line(self,text=""):
65 '''
66 insert text followed by a line break
67 '''
68 self.elements.append('%s<br/>\n'%(text))
69
71 text = ""
72 text += "<HTML>\n"
73 text += "<HEAD>\n"
74 text += " <TITLE>%s</TITLE>\n"%(self.title,)
75 text += "</HEAD>\n"
76 text += "<BODY>\n\n\n"
77 for element in self.elements:
78 if isinstance(element,str):
79 text += element
80 if isinstance(element,pv.Table):
81 text += element.asHtml(print_row_headers=True)
82 text += "\n\n</BODY>\n"
83 text += "</HTML>\n"
84 return text
85
86 - def save(self,path,show=False):
87 f = open(path,'wb')
88 f.write(self.asText())
89 f.close()
90 if show:
91 os.system('open %s'%path)
92
94 self.hidden_id += 1
95 check_id = "check_%s"%self.hidden_id
96 obj_id = "hideable_%s"%self.hidden_id
97 self.elements.append('''[<font color='blue'><a id="%(check_id)s" onClick="
98 if(document.getElementById('%(check_id)s').innerHTML=='show'){
99 document.getElementById('%(check_id)s').innerHTML='hide';
100 document.getElementById('%(hidden_id)s').style.display = 'block';
101 }
102 else {
103 document.getElementById('%(check_id)s').innerHTML='show';
104 document.getElementById('%(hidden_id)s').style.display = 'none';
105 };"
106 >show</a></font>]<br>\n'''%{'hidden_id':obj_id,'check_id':check_id} )
107 self.elements.append('''<div id="%(hidden_id)s" style="display:none">\n'''%{'hidden_id':obj_id})
108
110 self.elements.append('''</div>''')
111
112 - def image(self,im,format='jpg'):
113 f = StringIO.StringIO()
114 im.asAnnotated().save(f,format)
115
116
117 encoded = base64.b64encode(f.getvalue())
118 im_tag = '<img src="data:image/%s;base64,%s" />'%(format,encoded)
119 self.elements.append(im_tag)
120
121
122 if __name__ == '__main__':
123 rpt = HtmlReport()
124 rpt.section("Summary")
125 rpt.hr()
126 rpt.comment("Hello world.")
127 rpt.section('Section 1')
128 rpt.p("Here is some text.")
129 rpt.p("Here are some more text.")
130 rpt.html("AAPL data ")
131 rpt.start_hidden()
132 rpt.line()
133 rpt.line("Here is a number: 27.89")
134 rpt.line("Here is a number: 29.89")
135 rpt.line("Here is a number: 3.89")
136 rpt.line()
137 rpt.end_hidden()
138
139 rpt.html("XOM data ")
140 rpt.start_hidden()
141 rpt.line("Here is a number: 27.89")
142 rpt.line("Here is a number: 29.89")
143 rpt.line("Here is a number: 3.89")
144 rpt.line()
145 rpt.end_hidden()
146
147 print rpt.asText()
148 rpt.save("/Users/bolme/test_report.html",show=True)
149