eric6/PluginManager/PluginManager.py

changeset 8396
437fb6ba91bd
parent 8306
2bfd53096b5f
child 8400
b3eefd7e58d1
equal deleted inserted replaced
8395:0ea234b2f6e9 8396:437fb6ba91bd
11 import sys 11 import sys
12 import zipfile 12 import zipfile
13 import types 13 import types
14 import importlib 14 import importlib
15 import contextlib 15 import contextlib
16 import logging
16 17
17 from PyQt5.QtCore import ( 18 from PyQt5.QtCore import (
18 pyqtSignal, QObject, QDate, QFile, QFileInfo, QUrl, QIODevice 19 pyqtSignal, QObject, QDate, QFile, QFileInfo, QUrl, QIODevice
19 ) 20 )
20 from PyQt5.QtGui import QPixmap 21 from PyQt5.QtGui import QPixmap
407 sys.modules[module.__name__] = module 408 sys.modules[module.__name__] = module
408 spec.loader.exec_module(module) 409 spec.loader.exec_module(module)
409 if not hasattr(module, "autoactivate"): 410 if not hasattr(module, "autoactivate"):
410 module.error = self.tr( 411 module.error = self.tr(
411 "Module is missing the 'autoactivate' attribute.") 412 "Module is missing the 'autoactivate' attribute.")
413 logging.debug(
414 "{0}: Module is missing the 'autoactivate' attribute."
415 .format(name)
416 )
412 self.__failedModules[name] = module 417 self.__failedModules[name] = module
413 raise PluginLoadError(name) 418 raise PluginLoadError(name)
414 if getattr(module, "autoactivate", False): 419 if getattr(module, "autoactivate", False):
415 self.__inactiveModules[name] = module 420 self.__inactiveModules[name] = module
416 else: 421 else:
419 not hasattr(module, "pluginTypename") 424 not hasattr(module, "pluginTypename")
420 ): 425 ):
421 module.error = self.tr( 426 module.error = self.tr(
422 "Module is missing the 'pluginType' " 427 "Module is missing the 'pluginType' "
423 "and/or 'pluginTypename' attributes." 428 "and/or 'pluginTypename' attributes."
429 )
430 logging.debug(
431 "{0}: Module is missing the 'pluginType' "
432 "and/or 'pluginTypename' attributes."
433 .format(name)
424 ) 434 )
425 self.__failedModules[name] = module 435 self.__failedModules[name] = module
426 raise PluginLoadError(name) 436 raise PluginLoadError(name)
427 else: 437 else:
428 self.__onDemandInactiveModules[name] = module 438 self.__onDemandInactiveModules[name] = module
443 print("Error loading plug-in module:", name) 453 print("Error loading plug-in module:", name)
444 except Exception as err: 454 except Exception as err:
445 module = types.ModuleType(name) 455 module = types.ModuleType(name)
446 module.error = self.tr( 456 module.error = self.tr(
447 "Module failed to load. Error: {0}").format(str(err)) 457 "Module failed to load. Error: {0}").format(str(err))
458 logging.debug(
459 "{0}: Module failed to load. Error: {1}"
460 .format(name, str(err))
461 )
448 self.__failedModules[name] = module 462 self.__failedModules[name] = module
449 print("Error loading plug-in module:", name) 463 print("Error loading plug-in module:", name)
450 print(str(err)) 464 print(str(err))
451 465
452 def unloadPlugin(self, name): 466 def unloadPlugin(self, name):
620 try: 634 try:
621 obj, ok = pluginObject.activate() 635 obj, ok = pluginObject.activate()
622 except TypeError: 636 except TypeError:
623 module.error = self.tr( 637 module.error = self.tr(
624 "Incompatible plugin activation method.") 638 "Incompatible plugin activation method.")
639 logging.debug(
640 "{0}: Incompatible plugin activation method."
641 .format(name)
642 )
625 obj = None 643 obj = None
626 ok = True 644 ok = True
627 except Exception as err: 645 except Exception as err:
628 module.error = str(err) 646 module.error = str(err)
647 logging.debug("{0}: {1}".format(name, str(err)))
629 obj = None 648 obj = None
630 ok = False 649 ok = False
631 if not ok: 650 if not ok:
632 return None 651 return None
633 652

eric ide

mercurial