0001from lxml import etree
0002
0003class DummyLog(object):
0004 def debug(self, msg, *args):
0005 pass
0006 info = warn = warning = error = debug
0007
0008class AbstractLog(object):
0009
0010 def _make_method(level):
0011 def msg(self, msg, *args):
0012 self.message(level, msg, *args)
0013 return msg
0014 debug = _make_method('debug')
0015 info = _make_method('info')
0016 warn = warning = _make_method('warn')
0017 error = _make_method('error')
0018 fatal = _make_method('fatal')
0019 del _make_method
0020
0021class FileLog(AbstractLog):
0022 def __init__(self, file):
0023 self.file = file
0024 def message(self, level, msg, *args):
0025 if args:
0026 msg = msg % args
0027 self.file.write('%s: %s\n' % (level, msg))
0028
0029class InlineLog(AbstractLog):
0030
0031 def __init__(self):
0032 self._messages = []
0033
0034 def message(self, level, msg, *args):
0035 if args:
0036 msg = msg % args
0037 self._messages.append((level, msg))
0038
0039 def add_to_page(self, page):
0040 body = page.html.find('body')
0041 text = ''.join([
0042 '%s: %s\n' % (level, msg)
0043 for level, msg in self._messages])
0044 pre = etree.Element('pre')
0045 pre.attrib['class'] = 'over-log'
0046 pre.text = text
0047 body.append(pre)