--- a/src/eric7/PluginManager/PluginManager.py Wed May 24 10:31:09 2023 +0200 +++ b/src/eric7/PluginManager/PluginManager.py Wed May 24 10:45:11 2023 +0200 @@ -47,6 +47,7 @@ PluginModulesError, PluginPathError, ) +from .PluginUtilities import getPluginHeaderEntry, hasPluginHeaderEntry class PluginManager(QObject): @@ -418,18 +419,18 @@ module = importlib.util.module_from_spec(spec) sys.modules[module.__name__] = module spec.loader.exec_module(module) - if not hasattr(module, "autoactivate"): + if not hasPluginHeaderEntry(module, "autoactivate"): module.error = self.tr( "Module is missing the 'autoactivate' attribute." ) self.__failedModules[name] = module raise PluginLoadError(name) - if getattr(module, "autoactivate", False): + if getPluginHeaderEntry(module, "autoactivate", False): self.__inactiveModules[name] = module else: - if not hasattr(module, "pluginType") or not hasattr( - module, "pluginTypename" - ): + if not hasPluginHeaderEntry( + module, "pluginType" + ) or not hasPluginHeaderEntry(module, "pluginTypename"): module.error = self.tr( "Module is missing the 'pluginType' " "and/or 'pluginTypename' attributes." @@ -546,8 +547,8 @@ if not self.__canActivatePlugin(module): raise PluginActivationError(module.eric7PluginModuleName) - version = getattr(module, "version", "0.0.0") - className = getattr(module, "className", "") + version = getPluginHeaderEntry(module, "version", "0.0.0") + className = getPluginHeaderEntry(module, "className", "") pluginClass = getattr(module, className) pluginObject = None if name not in self.__onDemandInactivePlugins: @@ -619,8 +620,8 @@ if not self.__canActivatePlugin(module): raise PluginActivationError(module.eric7PluginModuleName) - version = getattr(module, "version", "0.0.0") - className = getattr(module, "className", "") + version = getPluginHeaderEntry(module, "version", "0.0.0") + className = getPluginHeaderEntry(module, "className", "") pluginClass = getattr(module, className) pluginObject = None if onDemand and name in self.__onDemandInactivePlugins: @@ -677,11 +678,11 @@ plug-in class format """ try: - if not hasattr(module, "version"): + if not hasPluginHeaderEntry(module, "version"): raise PluginModuleFormatError(module.eric7PluginModuleName, "version") - if not hasattr(module, "className"): + if not hasPluginHeaderEntry(module, "className"): raise PluginModuleFormatError(module.eric7PluginModuleName, "className") - className = getattr(module, "className", "") + className = getPluginHeaderEntry(module, "className", "") if not className or not hasattr(module, className): raise PluginModuleFormatError(module.eric7PluginModuleName, className) pluginClass = getattr(module, className) @@ -753,7 +754,7 @@ @return flag indicating, if the module satisfies all requirements for being deactivated (boolean) """ - return getattr(module, "deactivateable", True) + return getPluginHeaderEntry(module, "deactivateable", True) def getPluginObject(self, type_, typename, maybeActive=False): """ @@ -772,16 +773,16 @@ """ for name, module in list(self.__onDemandInactiveModules.items()): if ( - getattr(module, "pluginType", "") == type_ - and getattr(module, "pluginTypename", "") == typename + getPluginHeaderEntry(module, "pluginType", "") == type_ + and getPluginHeaderEntry(module, "pluginTypename", "") == typename ): return self.activatePlugin(name, onDemand=True) if maybeActive: for name, module in list(self.__onDemandActiveModules.items()): if ( - getattr(module, "pluginType", "") == type_ - and getattr(module, "pluginTypename", "") == typename + getPluginHeaderEntry(module, "pluginType", "") == type_ + and getPluginHeaderEntry(module, "pluginTypename", "") == typename ): self.deactivatePlugin(name, onDemand=True) return self.activatePlugin(name, onDemand=True) @@ -872,10 +873,10 @@ "error": bool) """ return { - "plugin_name": getattr(module, "name", ""), - "version": getattr(module, "version", ""), - "short_desc": getattr(module, "shortDescription", ""), - "error": bool(getattr(module, "error", "")), + "plugin_name": getPluginHeaderEntry(module, "name", ""), + "version": getPluginHeaderEntry(module, "version", ""), + "short_desc": getPluginHeaderEntry(module, "shortDescription", ""), + "error": bool(getPluginHeaderEntry(module, "error", "")), } def getPluginDetails(self, name): @@ -914,14 +915,16 @@ return None details["moduleName"] = name - details["moduleFileName"] = getattr(module, "eric7PluginModuleFilename", "") - details["pluginName"] = getattr(module, "name", "") - details["version"] = getattr(module, "version", "") - details["author"] = getattr(module, "author", "") - details["description"] = getattr(module, "longDescription", "") + details["moduleFileName"] = getPluginHeaderEntry( + module, "eric7PluginModuleFilename", "" + ) + details["pluginName"] = getPluginHeaderEntry(module, "name", "") + details["version"] = getPluginHeaderEntry(module, "version", "") + details["author"] = getPluginHeaderEntry(module, "author", "") + details["description"] = getPluginHeaderEntry(module, "longDescription", "") details["autoactivate"] = autoactivate details["active"] = active - details["error"] = getattr(module, "error", "") + details["error"] = getPluginHeaderEntry(module, "error", "") return details @@ -951,16 +954,16 @@ self.__onDemandInactiveModules.values() ): if ( - getattr(module, "pluginType", "") == type_ - and getattr(module, "error", "") == "" + getPluginHeaderEntry(module, "pluginType", "") == type_ + and getPluginHeaderEntry(module, "error", "") == "" ): - plugin_name = getattr(module, "pluginTypename", "") + plugin_name = getPluginHeaderEntry(module, "pluginTypename", "") if plugin_name: if hasattr(module, "displayString"): try: disp = module.displayString() except TypeError: - disp = getattr(module, "displayString", "") + disp = getPluginHeaderEntry(module, "displayString", "") if disp != "": pluginDict[plugin_name] = disp else: @@ -980,8 +983,8 @@ self.__onDemandInactiveModules.values() ): if ( - getattr(module, "pluginType", "") == type_ - and getattr(module, "pluginTypename", "") == name + getPluginHeaderEntry(module, "pluginType", "") == type_ + and getPluginHeaderEntry(module, "pluginTypename", "") == name ): if hasattr(module, "previewPix"): return module.previewPix() @@ -1171,9 +1174,9 @@ for module in list(self.__onDemandActiveModules.values()) + list( self.__onDemandInactiveModules.values() ): - if getattr(module, "pluginType", "") == "version_control" and hasattr( - module, "getVcsSystemIndicator" - ): + if getPluginHeaderEntry( + module, "pluginType", "" + ) == "version_control" and hasattr(module, "getVcsSystemIndicator"): res = module.getVcsSystemIndicator() for indicator, vcsData in list(res.items()): if indicator in vcsDict: @@ -1188,7 +1191,7 @@ Public method to deactivated all activated VCS plugins. """ for name, module in list(self.__onDemandActiveModules.items()): - if getattr(module, "pluginType", "") == "version_control": + if getPluginHeaderEntry(module, "pluginType", "") == "version_control": self.deactivatePlugin(name, True) ######################################################################## @@ -1435,7 +1438,7 @@ + list(self.__activeModules.values()) + list(self.__inactiveModules.values()) ): - if getattr(module, "pluginType", "") == type_ and hasattr( + if getPluginHeaderEntry(module, "pluginType", "") == type_ and hasattr( module, "clearPrivateData" ): module.clearPrivateData()