exceptionEater.py (1277B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\eveexceptions\exceptionEater.py 2 import logging 3 4 class ExceptionEater(object): 5 6 def __init__(self, message = '', channel = None): 7 self.message = message 8 self.channel = channel 9 10 def __enter__(self): 11 pass 12 13 def __exit__(self, eType, eVal, tb): 14 if eType is not None: 15 if not issubclass(eType, Exception): 16 return False 17 logger = None 18 if self.channel: 19 logger = logging.getLogger(self.channel) 20 else: 21 logger = logging.getLogger(__name__) 22 logger.exception(self.message) 23 return True 24 25 26 class EatsExceptions(object): 27 28 def __init__(self, message = None, channel = None): 29 self.message = message 30 self.channel = channel 31 32 def __call__(self, func, *args, **kwargs): 33 34 def wrapper(*args, **kwargs): 35 if self.message is None: 36 message = 'Exception eaten in %s::%s' % (func.__module__, func.__name__) 37 else: 38 message = self.message 39 with ExceptionEater(message=message, channel=self.channel): 40 return func(*args, **kwargs) 41 42 return wrapper