def test_roundtrip(tmpdir): settings = SettingRegistry() settings.add('STRING', 'green', str) settings.add('INT', 3, int) settings.add('FLOAT', 5.5, float) settings.add('LIST', [1, 2, 3], list) with patch('glue.config.settings', settings): with patch('glue.config.CFG_DIR', tmpdir.strpath): settings.STRING = 'blue' settings.INT = 4 settings.FLOAT = 3.5 settings.LIST = ['A', 'BB', 'CCC'] save_settings() assert os.path.exists(os.path.join(tmpdir.strpath, 'settings.cfg')) settings.STRING = 'red' settings.INT = 3 settings.FLOAT = 4.5 settings.LIST = ['DDD', 'EE', 'F'] load_settings() assert settings.STRING == 'blue' assert settings.INT == 4 assert settings.FLOAT == 3.5 assert settings.LIST == ['A', 'BB', 'CCC']
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 test_roundtrip(tmpdir): settings = SettingRegistry() settings.add('STRING', 'green', str) settings.add('INT', 3, int) settings.add('FLOAT', 5.5, float) settings.add('LIST', [1,2,3], list) with patch('glue.config.settings', settings): with patch('glue.config.CFG_DIR', tmpdir.strpath): settings.STRING = 'blue' settings.INT = 4 settings.FLOAT = 3.5 settings.LIST = ['A', 'BB', 'CCC'] save_settings() assert os.path.exists(os.path.join(tmpdir.strpath, 'settings.cfg')) settings.STRING = 'red' settings.INT = 3 settings.FLOAT = 4.5 settings.LIST = ['DDD', 'EE', 'F'] load_settings() assert settings.STRING == 'blue' assert settings.INT == 4 assert settings.FLOAT == 3.5 assert settings.LIST == ['A', 'BB', 'CCC']
def test_roundtrip(tmpdir): settings = SettingRegistry() settings.add('STRING', 'green', str) settings.add('INT', 3, int) settings.add('FLOAT', 5.5, float) settings.add('LIST', [1,2,3], list) with patch('glue.config.settings', settings): with patch('glue.config.CFG_DIR', tmpdir.strpath): settings.STRING = 'blue' settings.INT = 4 settings.FLOAT = 3.5 settings.LIST = ['A', 'BB', 'CCC'] settings.reset_defaults() assert settings.STRING == 'green' assert settings.INT == 3 assert settings.FLOAT == 5.5 assert settings.LIST == [1, 2, 3] settings.STRING = 'blue' settings.INT = 4 settings.FLOAT = 3.5 settings.LIST = ['A', 'BB', 'CCC'] save_settings() assert os.path.exists(os.path.join(tmpdir.strpath, 'settings.cfg')) settings.reset_defaults() settings.STRING = 'red' settings.INT = 5 # Loading settings will only change settings that have not been # changed from the defaults... load_settings() assert settings.STRING == 'red' assert settings.INT == 5 assert settings.FLOAT == 3.5 assert settings.LIST == ['A', 'BB', 'CCC'] # ... unless the ``force=True`` option is passed load_settings(force=True) assert settings.STRING == 'blue' assert settings.INT == 4 assert settings.FLOAT == 3.5 assert settings.LIST == ['A', 'BB', 'CCC']
def test_roundtrip(tmpdir): settings = SettingRegistry() settings.add('STRING', 'green', str) settings.add('INT', 3, int) settings.add('FLOAT', 5.5, float) settings.add('LIST', [1, 2, 3], list) with patch('glue.config.settings', settings): with patch('glue.config.CFG_DIR', tmpdir.strpath): settings.STRING = 'blue' settings.INT = 4 settings.FLOAT = 3.5 settings.LIST = ['A', 'BB', 'CCC'] settings.reset_defaults() assert settings.STRING == 'green' assert settings.INT == 3 assert settings.FLOAT == 5.5 assert settings.LIST == [1, 2, 3] settings.STRING = 'blue' settings.INT = 4 settings.FLOAT = 3.5 settings.LIST = ['A', 'BB', 'CCC'] save_settings() assert os.path.exists(os.path.join(tmpdir.strpath, 'settings.cfg')) settings.reset_defaults() settings.STRING = 'red' settings.INT = 5 # Loading settings will only change settings that have not been # changed from the defaults... load_settings() assert settings.STRING == 'red' assert settings.INT == 5 assert settings.FLOAT == 3.5 assert settings.LIST == ['A', 'BB', 'CCC'] # ... unless the ``force=True`` option is passed load_settings(force=True) assert settings.STRING == 'blue' assert settings.INT == 4 assert settings.FLOAT == 3.5 assert settings.LIST == ['A', 'BB', 'CCC']
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()
from .qglue import qglue from .version import __version__ from .main import load_plugins def test(no_optional_skip=False): from pytest import main root = os.path.abspath(os.path.dirname(__file__)) args = [root, '-x'] if no_optional_skip: args.append('--no-optional-skip') return main(args=args) from glue._settings_helpers import load_settings load_settings() # In PyQt 5.5+, PyQt overrides the default exception catching and fatally # crashes the Qt application without printing out any details about the error. # Below we revert the exception hook to the original Python one. Note that we # can't just do sys.excepthook = sys.__excepthook__ otherwise PyQt will detect # the default excepthook is in place and override it. def handle_exception(exc_type, exc_value, exc_traceback): sys.__excepthook__(exc_type, exc_value, exc_traceback) sys.excepthook = handle_exception
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()
from .version import __version__ # noqa from .main import load_plugins # noqa def test(no_optional_skip=False): from pytest import main root = os.path.abspath(os.path.dirname(__file__)) args = [root, '-x'] if no_optional_skip: args.append('--no-optional-skip') return main(args=args) from glue._settings_helpers import load_settings load_settings() # In PyQt 5.5+, PyQt overrides the default exception catching and fatally # crashes the Qt application without printing out any details about the error. # Below we revert the exception hook to the original Python one. Note that we # can't just do sys.excepthook = sys.__excepthook__ otherwise PyQt will detect # the default excepthook is in place and override it. def handle_exception(exc_type, exc_value, exc_traceback): sys.__excepthook__(exc_type, exc_value, exc_traceback) sys.excepthook = handle_exception