diff options
Diffstat (limited to 'bin/reportlab/lib/logger.py')
| -rwxr-xr-x | bin/reportlab/lib/logger.py | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/bin/reportlab/lib/logger.py b/bin/reportlab/lib/logger.py new file mode 100755 index 00000000000..501596e62e1 --- /dev/null +++ b/bin/reportlab/lib/logger.py @@ -0,0 +1,61 @@ +#! /usr/bin/python2.3 +#Copyright ReportLab Europe Ltd. 2000-2004 +#see license.txt for license details +#history http://www.reportlab.co.uk/cgi-bin/viewcvs.cgi/public/reportlab/trunk/reportlab/lib/logger.py +__version__=''' $Id$ ''' + +from sys import stderr +class Logger: + ''' + An extended file type thing initially equivalent to sys.stderr + You can add/remove file type things; it has a write method + ''' + def __init__(self): + self._fps = [stderr] + self._fns = {} + + def add(self,fp): + '''add the file/string fp to the destinations''' + if type(fp) is StringType: + if fp in self._fns: return + fp = open(fn,'wb') + self._fns[fn] = fp + self._fps.append(fp) + + def remove(self,fp): + '''remove the file/string fp from the destinations''' + if type(fp) is StringType: + if fp not in self._fns: return + fn = fp + fp = self._fns[fn] + del self.fns[fn] + if fp in self._fps: + del self._fps[self._fps.index(fp)] + + def write(self,text): + '''write text to all the destinations''' + if text[-1]!='\n': text=text+'\n' + map(lambda fp,t=text: fp.write(t),self._fps) + + def __call__(self,text): + self.write(text) + +logger=Logger() + +class WarnOnce: + + def __init__(self,kind='Warn'): + self.uttered = {} + self.pfx = '%s: '%kind + self.enabled = 1 + + def once(self,warning): + if not self.uttered.has_key(warning): + if self.enabled: logger.write(self.pfx + warning) + self.uttered[warning] = 1 + + def __call__(self,warning): + self.once(warning) + +warnOnce=WarnOnce() +infoOnce=WarnOnce('Info')
\ No newline at end of file |
