Package pyvision :: Package analysis :: Module html_report
[hide private]
[frames] | no frames]

Source Code for Module pyvision.analysis.html_report

  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   
12 -class HtmlReport(object):
13 ''' 14 classdocs 15 ''' 16
17 - def __init__(self,title="untitled"):
18 ''' 19 Constructor 20 ''' 21 self.title='untitled' 22 self.elements = [] 23 self.hidden_id = 0
24
25 - def table(self,table):
26 self.elements.append(table)
27
28 - def hr(self):
29 ''' 30 Add a horizontal rule. 31 ''' 32 self.elements.append("\n\n<!---------------------------------------------------------------->\n<HR>\n\n")
33
34 - def br(self):
35 ''' 36 Add a horizontal rule. 37 ''' 38 self.elements.append("\n<BR>\n\n")
39
40 - def section(self,name):
41 ''' 42 Add a section header. 43 ''' 44 self.elements.append("<H2>%s</H2>\n\n"%(name))
45
46 - def comment(self,name):
47 ''' 48 Add a comment. 49 ''' 50 self.elements.append("<!-- %s -->\n\n"%(name))
51
52 - def html(self,name):
53 ''' 54 Insert raw unmodified html. 55 ''' 56 self.elements.append(name)
57
58 - def p(self,text):
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
70 - def asText(self):
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
93 - def start_hidden(self):
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
109 - def end_hidden(self):
110 self.elements.append('''</div>''')
111
112 - def image(self,im,format='jpg'):
113 f = StringIO.StringIO() 114 im.asAnnotated().save(f,format) 115 #f.flush() 116 #print "Saving Image",len(f.getvalue()) 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 #rpt.line() 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 #rpt.line() 147 print rpt.asText() 148 rpt.save("/Users/bolme/test_report.html",show=True) 149