def load_plugins(splash=None): # Search for plugins installed via entry_points. Basically, any package can # define plugins for glue, and needs to define an entry point using the # following format: # # entry_points = """ # [glue.plugins] # webcam_importer=glue_exp.importers.webcam:setup # vizier_importer=glue_exp.importers.vizier:setup # dataverse_importer=glue_exp.importers.dataverse:setup # """ # # where ``setup`` is a function that does whatever is needed to set up the # plugin, such as add items to various registries. import setuptools logger.info("Loading external plugins using " "setuptools=={0}".format(setuptools.__version__)) from glue._plugin_helpers import iter_plugin_entry_points, PluginConfig config = PluginConfig.load() n_plugins = len(list(iter_plugin_entry_points())) for iplugin, item in enumerate(iter_plugin_entry_points()): if item.module_name not in _installed_plugins: _installed_plugins.add(item.name) if item.module_name in _loaded_plugins: logger.info("Plugin {0} already loaded".format(item.name)) continue if not config.plugins[item.name]: continue try: function = item.load() function() except Exception as exc: logger.info("Loading plugin {0} failed " "(Exception: {1})".format(item.name, exc)) else: logger.info("Loading plugin {0} succeeded".format(item.name)) _loaded_plugins.add(item.module_name) if splash is not None: splash.set_progress(100. * iplugin / float(n_plugins)) try: config.save() except Exception as e: logger.warn("Failed to load plugin configuration") # Reload the settings now that we have loaded plugins, since some plugins # may have added some settings. Note that this will not re-read settings # that were previously read. from glue._settings_helpers import load_settings load_settings()
def load_plugins(): # Search for plugins installed via entry_points. Basically, any package can # define plugins for glue, and needs to define an entry point using the # following format: # # entry_points = """ # [glue.plugins] # webcam_importer=glue_exp.importers.webcam:setup # vizier_importer=glue_exp.importers.vizier:setup # dataverse_importer=glue_exp.importers.dataverse:setup # """ # # where ``setup`` is a function that does whatever is needed to set up the # plugin, such as add items to various registries. import setuptools logger.info("Loading external plugins using setuptools=={0}".format( setuptools.__version__)) from glue._plugin_helpers import iter_plugin_entry_points, PluginConfig config = PluginConfig.load() for item in iter_plugin_entry_points(): if not item.module_name in _installed_plugins: _installed_plugins.add(item.name) if item.module_name in _loaded_plugins: logger.info("Plugin {0} already loaded".format(item.name)) continue if not config.plugins[item.name]: continue try: function = item.load() function() except Exception as exc: logger.info("Loading plugin {0} failed (Exception: {1})".format( item.name, exc)) else: logger.info("Loading plugin {0} succeeded".format(item.name)) _loaded_plugins.add(item.module_name) try: config.save() except Exception as e: logger.warn("Failed to load plugin configuration")
def load_plugins(): # Search for plugins installed via entry_points. Basically, any package can # define plugins for glue, and needs to define an entry point using the # following format: # # entry_points = """ # [glue.plugins] # webcam_importer=glue_exp.importers.webcam:setup # vizier_importer=glue_exp.importers.vizier:setup # dataverse_importer=glue_exp.importers.dataverse:setup # """ # # where ``setup`` is a function that does whatever is needed to set up the # plugin, such as add items to various registries. import setuptools logger.info("Loading external plugins using setuptools=={0}".format(setuptools.__version__)) from glue._plugin_helpers import iter_plugin_entry_points, PluginConfig config = PluginConfig.load() for item in iter_plugin_entry_points(): if not item.module_name in _installed_plugins: _installed_plugins.add(item.name) if item.module_name in _loaded_plugins: logger.info("Plugin {0} already loaded".format(item.name)) continue if not config.plugins[item.name]: continue try: function = item.load() function() except Exception as exc: logger.info("Loading plugin {0} failed (Exception: {1})".format(item.name, exc)) else: logger.info("Loading plugin {0} succeeded".format(item.name)) _loaded_plugins.add(item.module_name) try: config.save() except Exception as e: logger.warn("Failed to load plugin configuration")
def update_list(self, installed=None): self.clear() config = PluginConfig.load() if installed is not None: config.filter(installed) for plugin in sorted(config.plugins): check = QtWidgets.QTreeWidgetItem(self.ui.tree.invisibleRootItem(), ["", plugin]) check.setFlags(check.flags() | Qt.ItemIsUserCheckable) if config.plugins[plugin]: check.setCheckState(0, Qt.Checked) else: check.setCheckState(0, Qt.Unchecked) self._checkboxes[plugin] = check self.ui.tree.resizeColumnToContents(0) self.ui.tree.resizeColumnToContents(1)
def finalize(self): config = PluginConfig.load() for name in self._checkboxes: config.plugins[name] = self._checkboxes[name].checkState(0) > 0 try: config.save() except Exception: import traceback detail = str(traceback.format_exc()) message = QtWidgets.QMessageBox( QtWidgets.QMessageBox.Critical, "Error", "Could not save plugin configuration") message.setDetailedText(detail) message.exec_() return self.ui.accept()
def finalize(self): config = PluginConfig.load() for name in self._checkboxes: config.plugins[name] = self._checkboxes[name].checkState(0) > 0 try: config.save() except Exception: import traceback detail = str(traceback.format_exc()) from glue.utils.qt import QMessageBoxPatched as QMessageBox message = QMessageBox(QMessageBox.Critical, "Error", "Could not save plugin configuration") message.setDetailedText(detail) message.exec_() return self.ui.accept()
def load_plugins(splash=None, require_qt_plugins=False): # Search for plugins installed via entry_points. Basically, any package can # define plugins for glue, and needs to define an entry point using the # following format: # # entry_points = """ # [glue.plugins] # webcam_importer=glue_exp.importers.webcam:setup # vizier_importer=glue_exp.importers.vizier:setup # dataverse_importer=glue_exp.importers.dataverse:setup # """ # # where ``setup`` is a function that does whatever is needed to set up the # plugin, such as add items to various registries. import setuptools logger.info("Loading external plugins using " "setuptools=={0}".format(setuptools.__version__)) from glue._plugin_helpers import iter_plugin_entry_points, PluginConfig config = PluginConfig.load() n_plugins = len(list(iter_plugin_entry_points())) for iplugin, item in enumerate(iter_plugin_entry_points()): if item.module_name not in _installed_plugins: _installed_plugins.add(item.name) if item.module_name in _loaded_plugins: logger.info("Plugin {0} already loaded".format(item.name)) continue if not config.plugins[item.name]: continue # We don't use item.load() because that then checks requirements of all # the imported packages, which can lead to errors like this one that # don't really matter: # # Exception: (pytest 2.6.0 (/Users/tom/miniconda3/envs/py27/lib/python2.7/site-packages), # Requirement.parse('pytest>=2.8'), set(['astropy'])) # # Just to be clear, this kind of error does indicate that there is an # old version of a package in the environment, but this can confuse # users as importing astropy directly would work (as setuptools then # doesn't do a stringent test of dependency versions). Often this kind # of error can occur if there is a conda version of a package and and # older pip version. try: module = import_module(item.module_name) function = getattr(module, item.attrs[0]) function() except Exception as exc: # Here we check that some of the 'core' plugins load well and # raise an actual exception if not. if item.module_name in REQUIRED_PLUGINS: raise elif item.module_name in REQUIRED_PLUGINS_QT and require_qt_plugins: raise else: logger.info("Loading plugin {0} failed " "(Exception: {1})".format(item.name, exc)) else: logger.info("Loading plugin {0} succeeded".format(item.name)) _loaded_plugins.add(item.module_name) if splash is not None: splash.set_progress(100. * iplugin / float(n_plugins)) try: config.save() except Exception as e: logger.warn("Failed to load plugin configuration") # Reload the settings now that we have loaded plugins, since some plugins # may have added some settings. Note that this will not re-read settings # that were previously read. from glue._settings_helpers import load_settings load_settings()
def load_plugins(splash=None): # Search for plugins installed via entry_points. Basically, any package can # define plugins for glue, and needs to define an entry point using the # following format: # # entry_points = """ # [glue.plugins] # webcam_importer=glue_exp.importers.webcam:setup # vizier_importer=glue_exp.importers.vizier:setup # dataverse_importer=glue_exp.importers.dataverse:setup # """ # # where ``setup`` is a function that does whatever is needed to set up the # plugin, such as add items to various registries. import setuptools logger.info("Loading external plugins using " "setuptools=={0}".format(setuptools.__version__)) from glue._plugin_helpers import iter_plugin_entry_points, PluginConfig config = PluginConfig.load() n_plugins = len(list(iter_plugin_entry_points())) for iplugin, item in enumerate(iter_plugin_entry_points()): if item.module_name not in _installed_plugins: _installed_plugins.add(item.name) if item.module_name in _loaded_plugins: logger.info("Plugin {0} already loaded".format(item.name)) continue if not config.plugins[item.name]: continue # We don't use item.load() because that then checks requirements of all # the imported packages, which can lead to errors like this one that # don't really matter: # # Exception: (pytest 2.6.0 (/Users/tom/miniconda3/envs/py27/lib/python2.7/site-packages), # Requirement.parse('pytest>=2.8'), set(['astropy'])) # # Just to be clear, this kind of error does indicate that there is an # old version of a package in the environment, but this can confuse # users as importing astropy directly would work (as setuptools then # doesn't do a stringent test of dependency versions). Often this kind # of error can occur if there is a conda version of a package and and # older pip version. try: module = import_module(item.module_name) function = getattr(module, item.attrs[0]) function() except Exception as exc: # Here we check that some of the 'core' plugins load well and # raise an actual exception if not. if item.module_name in REQUIRED_PLUGINS: raise else: logger.info("Loading plugin {0} failed " "(Exception: {1})".format(item.name, exc)) else: logger.info("Loading plugin {0} succeeded".format(item.name)) _loaded_plugins.add(item.module_name) if splash is not None: splash.set_progress(100. * iplugin / float(n_plugins)) try: config.save() except Exception as e: logger.warn("Failed to load plugin configuration") # Reload the settings now that we have loaded plugins, since some plugins # may have added some settings. Note that this will not re-read settings # that were previously read. from glue._settings_helpers import load_settings load_settings()