eric6/PluginManager/PluginManager.py

changeset 7400
e5d62581d002
parent 7360
9190402e4505
child 7785
9978016560ec
equal deleted inserted replaced
7399:7088860e4a00 7400:e5d62581d002
7 Module implementing the Plugin Manager. 7 Module implementing the Plugin Manager.
8 """ 8 """
9 9
10 import os 10 import os
11 import sys 11 import sys
12 import imp
13 import zipfile 12 import zipfile
13 import types
14 import importlib
14 15
15 from PyQt5.QtCore import ( 16 from PyQt5.QtCore import (
16 pyqtSignal, QObject, QDate, QFile, QFileInfo, QUrl, QIODevice 17 pyqtSignal, QObject, QDate, QFile, QFileInfo, QUrl, QIODevice
17 ) 18 )
18 from PyQt5.QtGui import QPixmap 19 from PyQt5.QtGui import QPixmap
398 @exception PluginLoadError raised to indicate an issue loading 399 @exception PluginLoadError raised to indicate an issue loading
399 the plug-in 400 the plug-in
400 """ 401 """
401 try: 402 try:
402 fname = "{0}.py".format(os.path.join(directory, name)) 403 fname = "{0}.py".format(os.path.join(directory, name))
403 module = imp.load_source(name, fname) 404 spec = importlib.util.spec_from_file_location(name, fname)
405 module = importlib.util.module_from_spec(spec)
406 sys.modules[module.__name__] = module
407 spec.loader.exec_module(module)
404 if not hasattr(module, "autoactivate"): 408 if not hasattr(module, "autoactivate"):
405 module.error = self.tr( 409 module.error = self.tr(
406 "Module is missing the 'autoactivate' attribute.") 410 "Module is missing the 'autoactivate' attribute.")
407 self.__failedModules[name] = module 411 self.__failedModules[name] = module
408 raise PluginLoadError(name) 412 raise PluginLoadError(name)
423 self.__onDemandInactiveModules[name] = module 427 self.__onDemandInactiveModules[name] = module
424 module.eric6PluginModuleName = name 428 module.eric6PluginModuleName = name
425 module.eric6PluginModuleFilename = fname 429 module.eric6PluginModuleFilename = fname
426 self.__modulesCount += 1 430 self.__modulesCount += 1
427 if reload_: 431 if reload_:
428 imp.reload(module) 432 importlib.reload(module)
429 self.initOnDemandPlugin(name) 433 self.initOnDemandPlugin(name)
430 try: 434 try:
431 pluginObject = self.__onDemandInactivePlugins[name] 435 pluginObject = self.__onDemandInactivePlugins[name]
432 pluginObject.initToolbar( 436 pluginObject.initToolbar(
433 self.__ui, e5App().getObject("ToolbarManager")) 437 self.__ui, e5App().getObject("ToolbarManager"))
434 except (KeyError, AttributeError): 438 except (KeyError, AttributeError):
435 pass 439 pass
436 except PluginLoadError: 440 except PluginLoadError:
437 print("Error loading plug-in module:", name) 441 print("Error loading plug-in module:", name)
438 except Exception as err: 442 except Exception as err:
439 module = imp.new_module(name) 443 module = types.ModuleType(name)
440 module.error = self.tr( 444 module.error = self.tr(
441 "Module failed to load. Error: {0}").format(str(err)) 445 "Module failed to load. Error: {0}").format(str(err))
442 self.__failedModules[name] = module 446 self.__failedModules[name] = module
443 print("Error loading plug-in module:", name) 447 print("Error loading plug-in module:", name)
444 print(str(err)) 448 print(str(err))

eric ide

mercurial