21 from eric7.EricWidgets import EricMessageBox |
21 from eric7.EricWidgets import EricMessageBox |
22 from eric7.EricWidgets.EricApplication import ericApp |
22 from eric7.EricWidgets.EricApplication import ericApp |
23 from eric7.EricWidgets.EricMainWindow import EricMainWindow |
23 from eric7.EricWidgets.EricMainWindow import EricMainWindow |
24 |
24 |
25 from .PluginManager import PluginManager |
25 from .PluginManager import PluginManager |
|
26 from .PluginUtilities import getPluginHeaderEntry, hasPluginHeaderEntry |
26 from .Ui_PluginUninstallDialog import Ui_PluginUninstallDialog |
27 from .Ui_PluginUninstallDialog import Ui_PluginUninstallDialog |
27 |
28 |
28 |
29 |
29 class PluginUninstallWidget(QWidget, Ui_PluginUninstallDialog): |
30 class PluginUninstallWidget(QWidget, Ui_PluginUninstallDialog): |
30 """ |
31 """ |
148 if pluginDirectory not in sys.path: |
149 if pluginDirectory not in sys.path: |
149 sys.path.insert(2, pluginDirectory) |
150 sys.path.insert(2, pluginDirectory) |
150 spec = importlib.util.spec_from_file_location(pluginName, pluginFile) |
151 spec = importlib.util.spec_from_file_location(pluginName, pluginFile) |
151 module = importlib.util.module_from_spec(spec) |
152 module = importlib.util.module_from_spec(spec) |
152 spec.loader.exec_module(module) |
153 spec.loader.exec_module(module) |
153 if not hasattr(module, "packageName"): |
154 if not hasPluginHeaderEntry(module, "packageName"): |
154 EricMessageBox.critical( |
155 EricMessageBox.critical( |
155 self, |
156 self, |
156 self.tr("Plugin Uninstallation"), |
157 self.tr("Plugin Uninstallation"), |
157 self.tr( |
158 self.tr( |
158 """<p>The plugin <b>{0}</b> has no 'packageName'""" |
159 """<p>The plugin <b>{0}</b> has no 'packageName'""" |
159 """ attribute. Aborting...</p>""" |
160 """ attribute. Aborting...</p>""" |
160 ).format(pluginName), |
161 ).format(pluginName), |
161 ) |
162 ) |
162 return False |
163 return False |
163 |
164 |
164 package = getattr(module, "packageName", None) |
165 package = getPluginHeaderEntry(module, "packageName", None) |
165 if package is None: |
166 if package is None: |
166 package = "None" |
167 package = "None" |
167 packageDir = "" |
168 packageDir = "" |
168 else: |
169 else: |
169 packageDir = os.path.join(pluginDirectory, package) |
170 packageDir = os.path.join(pluginDirectory, package) |
171 hasattr(module, "prepareUninstall") |
172 hasattr(module, "prepareUninstall") |
172 and not self.keepConfigurationCheckBox.isChecked() |
173 and not self.keepConfigurationCheckBox.isChecked() |
173 ): |
174 ): |
174 module.prepareUninstall() |
175 module.prepareUninstall() |
175 internalPackages = [] |
176 internalPackages = [] |
176 if hasattr(module, "internalPackages"): |
177 if hasPluginHeaderEntry(module, "internalPackages"): |
177 # it is a comma separated string |
178 # it is a comma separated string |
178 internalPackages = [p.strip() for p in module.internalPackages.split(",")] |
179 internalPackages = [ |
|
180 p.strip() |
|
181 for p in getPluginHeaderEntry(module, "internalPackages", "").split(",") |
|
182 ] |
179 del module |
183 del module |
180 |
184 |
181 # clean sys.modules |
185 # clean sys.modules |
182 self.__pluginManager.removePluginFromSysModules( |
186 self.__pluginManager.removePluginFromSysModules( |
183 pluginName, package, internalPackages |
187 pluginName, package, internalPackages |