Throw a useful error in the log when FileBrowser fails to load because of missing pywin32
This is a quick hack so that anyone else who runs this from source doesn't have to spend the time I spent tracking down why directory.list failed silently. There are two options that are much cleaner that come to mind: - Subclass ImportException so as to differentiate missing requirements from parse errors etc. - Provide a method for plugins to list their requirements, so that the loader can be the one to use imp.find_module(). Using imp.find_module() seems wise, either way.
This commit is contained in:
@@ -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()))
|
||||
|
||||
|
||||
@@ -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):
|
||||
|
||||
|
||||
Reference in New Issue
Block a user