diff --git a/default.py b/default.py index eae867f6..0116b498 100644 --- a/default.py +++ b/default.py @@ -24,6 +24,7 @@ import loghandler from utils import window, dialog, language as lang from ga_client import GoogleAnalytics import database +import internal_exceptions ################################################################################################# @@ -161,10 +162,14 @@ if __name__ == "__main__": try: Main() + except internal_exceptions.ExceptionWrapper as error: + log.exception(error) + raise except Exception as error: ga = GoogleAnalytics() errStrings = ga.formatException() ga.sendEventData("Exception", errStrings[0], errStrings[1]) log.exception(error) + raise log.info("plugin.video.emby stopped") diff --git a/resources/lib/downloadutils.py b/resources/lib/downloadutils.py index fdd000e2..b9d55961 100644 --- a/resources/lib/downloadutils.py +++ b/resources/lib/downloadutils.py @@ -11,6 +11,7 @@ import xbmcgui import clientinfo import connect.connectionmanager as connectionmanager from utils import window, settings, language as lang +import internal_exceptions ################################################################################################## @@ -267,18 +268,18 @@ class DownloadUtils(object): except requests.exceptions.SSLError as error: log.error("invalid SSL certificate for: %s", url) - raise + raise internal_exceptions.ExceptionWrapper(error) except requests.exceptions.ConnectTimeout as error: log.error("Server timeout at: %s", url) - raise + raise internal_exceptions.ExceptionWrapper(error) except requests.exceptions.ConnectionError as error: # Make the addon aware of status if window('emby_online') != "false": log.error("Server unreachable at: %s", url) window('emby_online', value="false") - raise + raise internal_exceptions.ExceptionWrapper(error) except requests.exceptions.HTTPError as error: @@ -300,12 +301,12 @@ class DownloadUtils(object): icon=xbmcgui.NOTIFICATION_ERROR, time=5000) window('emby_serverStatus', value="restricted") - raise Warning('restricted') + raise internal_exceptions.ExceptionWrapper("restricted: " + str(error)) elif (response.headers['X-Application-Error-Code'] == "UnauthorizedAccessException"): # User tried to do something his emby account doesn't allow - raise Warning('UnauthorizedAccessException') + raise internal_exceptions.ExceptionWrapper("UnauthorizedAccessException: " + str(error)) elif status not in ("401", "Auth"): # Tell userclient token has been revoked. @@ -314,7 +315,7 @@ class DownloadUtils(object): xbmcgui.Dialog().notification(heading="Error connecting", message="Unauthorized.", icon=xbmcgui.NOTIFICATION_ERROR) - raise Warning('401:' + str(error)) + raise internal_exceptions.ExceptionWrapper("401: " + str(error)) except requests.exceptions.RequestException as error: log.error("unknown error connecting to: %s", url) diff --git a/resources/lib/ga_client.py b/resources/lib/ga_client.py index 6c5bfb6a..b0a6a8c4 100644 --- a/resources/lib/ga_client.py +++ b/resources/lib/ga_client.py @@ -8,6 +8,7 @@ import hashlib import xbmc import time from utils import window, settings, language as lang +import internal_exceptions log = logging.getLogger("EMBY."+__name__) @@ -22,6 +23,11 @@ def log_error(errors=(Exception, )): def wrapper(*args, **kwargs): try: return func(*args, **kwargs) + except internal_exceptions.ExceptionWrapper as error: + log.exception(error) + log.error("log_error: %s \n args: %s \n kwargs: %s", + func.__name__, args, kwargs) + raise except errors as error: ga = GoogleAnalytics() errStrings = ga.formatException() diff --git a/resources/lib/internal_exceptions.py b/resources/lib/internal_exceptions.py new file mode 100644 index 00000000..9401b1dd --- /dev/null +++ b/resources/lib/internal_exceptions.py @@ -0,0 +1,5 @@ + +# this is an internal exception wrapper that is used to raise exceptions +# when you dont want them logged ot the metric logging system +class ExceptionWrapper(Exception): + pass diff --git a/resources/lib/librarysync.py b/resources/lib/librarysync.py index 3a6962cc..f1cf56c6 100644 --- a/resources/lib/librarysync.py +++ b/resources/lib/librarysync.py @@ -24,6 +24,7 @@ import views from objects import Movies, MusicVideos, TVShows, Music from utils import window, settings, language as lang, should_stop from ga_client import GoogleAnalytics +import internal_exceptions ################################################################################################## @@ -618,7 +619,8 @@ class LibrarySync(threading.Thread): except Exception as e: ga = GoogleAnalytics() errStrings = ga.formatException() - ga.sendEventData("Exception", errStrings[0], errStrings[1]) + if type(e) != internal_exceptions.ExceptionWrapper: + ga.sendEventData("Exception", errStrings[0], errStrings[1]) window('emby_dbScan', clear=True) log.exception(e) xbmcgui.Dialog().ok( diff --git a/resources/lib/objects/_common.py b/resources/lib/objects/_common.py index 754f594a..c68b9b8b 100644 --- a/resources/lib/objects/_common.py +++ b/resources/lib/objects/_common.py @@ -15,6 +15,7 @@ import downloadutils import read_embyserver as embyserver from ga_client import GoogleAnalytics from utils import window, settings, dialog, language as lang, should_stop +import internal_exceptions ################################################################################################## @@ -29,6 +30,9 @@ def catch_except(errors=(Exception, ), default_value=False): def wrapper(*args, **kwargs): try: return func(*args, **kwargs) + except internal_exceptions.ExceptionWrapper as error: + log.exception(error) + raise except sqlite3.Error as error: raise except errors as error: diff --git a/service.py b/service.py index 41a477dc..868c5147 100644 --- a/service.py +++ b/service.py @@ -22,6 +22,7 @@ import loghandler from service_entry import Service from utils import settings from ga_client import GoogleAnalytics +import internal_exceptions ################################################################################################# @@ -41,6 +42,10 @@ if __name__ == "__main__": raise RuntimeError("Abort event while waiting to start Emby for kodi") # Start the service service.service_entry_point() + except internal_exceptions.ExceptionWrapper as error: + log.exception(error) + log.info("Forcing shutdown") + service.shutdown() except Exception as error: ga = GoogleAnalytics() errStrings = ga.formatException()