diff --git a/CouchPotato.py b/CouchPotato.py index 3bc7916f..57f6461c 100755 --- a/CouchPotato.py +++ b/CouchPotato.py @@ -4,6 +4,7 @@ from os.path import dirname import logging import os import signal +import socket import subprocess import sys import traceback @@ -121,9 +122,20 @@ if __name__ == '__main__': pass except SystemExit: raise - except Exception as (nr, msg): + except socket.error as (nr, msg): + # log when socket receives SIGINT, but continue. + # previous code would have skipped over other types of IO errors too. if nr != 4: try: l.log.critical(traceback.format_exc()) except: print traceback.format_exc() + raise + except: + try: + # if this fails we will have two tracebacks + # one for failing to log, and one for the exception that got us here. + l.log.critical(traceback.format_exc()) + except: + print traceback.format_exc() + raise \ No newline at end of file diff --git a/couchpotato/core/loader.py b/couchpotato/core/loader.py index a5816cc2..ee7afcb1 100644 --- a/couchpotato/core/loader.py +++ b/couchpotato/core/loader.py @@ -51,8 +51,13 @@ class Loader(object): did_save += self.loadSettings(m, module_name, save = False) self.loadPlugins(m, plugin.get('name')) - except ImportError: - log.debug('Import error, remove the empty folder: %s' % plugin.get('module')) + except ImportError as e: + # todo:: subclass ImportError for missing requirements. + if (e.message.lower().startswith("missing")): + log.error(e.message) + pass + # todo:: this needs to be more descriptive. + log.error('Import error, remove the empty folder: %s' % plugin.get('module')) except: log.error('Can\'t import %s: %s' % (module_name, traceback.format_exc())) diff --git a/couchpotato/core/plugins/browser/main.py b/couchpotato/core/plugins/browser/main.py index 21d3b4b7..887edc30 100644 --- a/couchpotato/core/plugins/browser/main.py +++ b/couchpotato/core/plugins/browser/main.py @@ -6,7 +6,15 @@ import os import string if os.name == 'nt': - import win32file + import imp + try: + imp.find_module('win32file') + except: + # todo:: subclass ImportError for missing dependencies, vs. broken plugins? + raise ImportError("Missing the win32file module, which is a part of the prerequisite \ + pywin32 package. You can get it from http://sourceforge.net/projects/pywin32/files/pywin32/"); + else: + import win32file class FileBrowser(Plugin):