Decorator CatchExceptions

This commit is contained in:
tomkat83 2016-07-22 16:41:02 +02:00
parent 5eac547633
commit 898f2e6379
2 changed files with 27 additions and 0 deletions

View file

@ -61,6 +61,7 @@ class KodiMonitor(xbmc.Monitor):
self.logMsg("New log level: %s" % currentLog, 1) self.logMsg("New log level: %s" % currentLog, 1)
utils.window('plex_logLevel', value=currentLog) utils.window('plex_logLevel', value=currentLog)
@utils.CatchExceptions(warnuser=False)
def onNotification(self, sender, method, data): def onNotification(self, sender, method, data):
if data: if data:

View file

@ -111,6 +111,32 @@ def IfExists(path):
return answer return answer
def CatchExceptions(warnuser=False):
"""
Decorator for methods to catch exceptions and log them. Useful for e.g.
librarysync threads using itemtypes.py, because otherwise we would not
get informed of crashes
warnuser=True: sets the window flag 'plex_scancrashed' to true
which will trigger a Kodi infobox to inform user
"""
def decorate(func):
@wraps(func)
def wrapper(*args, **kwargs):
try:
return func(*args, **kwargs)
except Exception as e:
logMsg(addonName, '%s has crashed' % func.__name__, -1)
logMsg(addonName, e, -1)
import traceback
logMsg(addonName, "Traceback:\n%s"
% traceback.format_exc(), -1)
if warnuser:
window('plex_scancrashed', value='true')
return wrapper
return decorate
def LogTime(func): def LogTime(func):
""" """
Decorator for functions and methods to log the time it took to run the code Decorator for functions and methods to log the time it took to run the code