Package cssutils :: Module errorhandler
[hide private]
[frames] | no frames]

Source Code for Module cssutils.errorhandler

  1  #!/usr/bin/env python 
  2  """cssutils ErrorHandler 
  3   
  4  ErrorHandler 
  5      used as log with usual levels (debug, info, warn, error) 
  6   
  7      if instanciated with ``raiseExceptions=True`` raises exeptions instead 
  8      of logging 
  9   
 10  log 
 11      defaults to instance of ErrorHandler for any kind of log message from 
 12      lexerm, parser etc. 
 13   
 14      - raiseExceptions = [False, True] 
 15      - setloglevel(loglevel) 
 16  """ 
 17  __all__ = ['ErrorHandler'] 
 18  __docformat__ = 'restructuredtext' 
 19  __version__ = '$Id: errorhandler.py 1157 2008-03-19 20:21:49Z cthedot $' 
 20   
 21  import logging 
 22  import urllib2 
 23  import xml.dom 
 24   
25 -class _ErrorHandler(object):
26 """ 27 handles all errors and log messages 28 """
29 - def __init__(self, log, 30 defaultloglevel=logging.DEBUG, raiseExceptions=False):
31 """ 32 inits log if none given 33 34 log 35 for parse messages, default logs to sys.stderr 36 defaultloglevel 37 if none give this is logging.DEBUG 38 raiseExceptions 39 - True: Errors will be reported to the calling app, 40 e.g. during building 41 - False: Errors will be written to the log, this is the 42 default behaviour when parsing 43 """ 44 if log: 45 self._log = log 46 else: 47 import sys 48 self._log = logging.getLogger('CSSUTILS') 49 hdlr = logging.StreamHandler(sys.stderr) 50 formatter = logging.Formatter('%(levelname)s\t%(message)s') 51 hdlr.setFormatter(formatter) 52 self._log.addHandler(hdlr) 53 self._log.setLevel(defaultloglevel) 54 55 self.raiseExceptions = raiseExceptions
56
57 - def __getattr__(self, name):
58 # here if new log has been set 59 _logcalls = { 60 u'debug': self._log.debug, 61 u'info': self._log.info, 62 u'warn': self._log.warn, 63 u'critical': self._log.critical, 64 u'fatal': self._log.fatal, 65 u'error': self._log.error 66 } 67 68 if name in _logcalls.keys(): 69 self._logcall = _logcalls[name] 70 return self.__handle 71 else: 72 raise AttributeError( 73 '(errorhandler) No Attribute "%s" found' % name)
74
75 - def setlog(self, log):
76 """set log of errorhandler's log""" 77 self._log = log
78
79 - def setloglevel(self, level):
80 """set level of errorhandler's log""" 81 self._log.setLevel(level)
82
83 - def __handle(self, msg=u'', token=None, error=xml.dom.SyntaxErr, 84 neverraise=False, args=None):
85 """ 86 handles all calls 87 logs or raises exception 88 """ 89 if token: 90 if isinstance(token, tuple): 91 msg = u'%s [%s:%s: %s]' % ( 92 msg, token[2], token[3], token[1]) 93 else: 94 msg = u'%s [%s:%s: %s]' % ( 95 msg, token.line, token.col, token.value) 96 97 if error and self.raiseExceptions and not neverraise: 98 if isinstance(error, urllib2.HTTPError) or isinstance(error, urllib2.URLError): 99 # done in util._readURL 100 raise error 101 else: 102 raise error(msg) 103 else: 104 self._logcall(msg)
105 106
107 -class ErrorHandler(_ErrorHandler):
108 "Singleton, see _ErrorHandler" 109 instance = None 110
111 - def __init__(self, 112 log=None, defaultloglevel=logging.INFO, raiseExceptions=True):
113 114 if ErrorHandler.instance is None: 115 ErrorHandler.instance = _ErrorHandler(log=log, 116 defaultloglevel=defaultloglevel, 117 raiseExceptions=raiseExceptions) 118 self.__dict__ = ErrorHandler.instance.__dict__
119