import os class DisplayHTMLBlock(object): def __init__(self, title=''): self.title = title def build(self, f): pass class DisplayHTMLRawBlock(DisplayHTMLBlock): def __init__(self, title=''): super(DisplayHTMLRawBlock, self).__init__(title) self.html = '' def setRawHTML(self, html): self.html = html def build(self, f): f.write(self.html) class DisplayHTMLBlockTable(DisplayHTMLBlock): def __init__(self, title, cols): super(DisplayHTMLBlockTable, self).__init__(title) self.cols = cols self.rows = [] def appendRow(self, row): self.rows.append(listToStr(row)) def build(self, f): f.write('') f.write('') for title in self.cols: f.write('' % (title)) f.write('') for row in self.rows: f.write('') for v in row: f.write('' % (v)) f.write('') f.write('
%s
%s
') class DisplayHTMLPage(object): def __init__(self, title, filename): self.title = title self.filename = filename self.blocks = [] def getFilename(self): return self.filename; def appendBlock(self, block): self.blocks.append(block) def build(self, root): filename = root + self.filename base = os.path.dirname(filename) if not os.path.exists(base): os.makedirs(base) f = open(filename, 'w') f.write('%s' % (self.title)) for block in self.blocks: block.build(f) f.write('') f.close() class DisplayHTMLBuild(object): def __init__(self): self.pages = [] def getPage(self, filename): for page in self.pages: if page.getFilename() == filename: return page return None def addPage(self, page): self.pages.append(page) def build(self, root): for page in self.pages: page.build(root) def bytesToStr(bytes): suffixes = ['', ' kB', ' MB', ' GB', ' TB'] for i in range(0, len(suffixes)): if bytes < 1024: break bytes /= 1024.0 if i: return '%.02f%s' % (bytes, suffixes[i]) else: return '%d%s' % (bytes, suffixes[i]) def _toStr(v): if type(v) != str: return str(v) else: return v def listToStr(l): return map(lambda(v) : _toStr(v), l)