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