From 0a30a2046e1511c4426e5e78083e4c4f5d9c7e6c Mon Sep 17 00:00:00 2001 From: Stefan van der Walt Date: Sun, 24 Jun 2012 17:14:38 -0700 Subject: [PATCH] ENH: Allow resetting the plugin state. --- skimage/io/__init__.py | 8 ++++++-- skimage/io/_plugins/plugin.py | 21 +++++++++++++++------ skimage/io/tests/test_fits.py | 5 +++++ skimage/io/tests/test_freeimage.py | 4 ++++ skimage/io/tests/test_pil.py | 6 +++++- skimage/io/tests/test_plugin.py | 5 +---- skimage/io/tests/test_tifffile.py | 4 +--- 7 files changed, 37 insertions(+), 16 deletions(-) diff --git a/skimage/io/__init__.py b/skimage/io/__init__.py index dc629be6..c5dd0b77 100644 --- a/skimage/io/__init__.py +++ b/skimage/io/__init__.py @@ -8,6 +8,7 @@ from ._plugins import use as use_plugin from ._plugins import available as plugins from ._plugins import info as plugin_info from ._plugins import configuration as plugin_order +from ._plugins import reset_plugins as _reset_plugins from .sift import * from .collection import * @@ -40,8 +41,9 @@ def _load_preferred_plugins(): except ImportError: pass -_load_preferred_plugins() - +def reset_plugins(): + _reset_plugins() + _load_preferred_plugins() def _update_doc(doc): """Add a list of plugins to the module docstring, formatted as @@ -72,3 +74,5 @@ def _update_doc(doc): return doc __doc__ = _update_doc(__doc__) + +reset_plugins() diff --git a/skimage/io/_plugins/plugin.py b/skimage/io/_plugins/plugin.py index 5ee04f1e..66ac3911 100644 --- a/skimage/io/_plugins/plugin.py +++ b/skimage/io/_plugins/plugin.py @@ -2,23 +2,32 @@ """ -__all__ = ['use', 'available', 'call', 'info', 'configuration'] +__all__ = ['use', 'available', 'call', 'info', 'configuration', 'reset_plugins'] import warnings from ConfigParser import ConfigParser import os.path from glob import glob -plugin_store = {'imread': [], - 'imsave': [], - 'imshow': [], - 'imread_collection': [], - '_app_show': []} +plugin_store = None plugin_provides = {} plugin_module_name = {} plugin_meta_data = {} +def reset_plugins(): + """Clear the plugin state to the default, i.e., where no plugins are loaded. + + """ + global plugin_store + plugin_store = {'imread': [], + 'imsave': [], + 'imshow': [], + 'imread_collection': [], + '_app_show': []} + +reset_plugins() + def _scan_plugins(): """Scan the plugins directory for .ini files and parse them to gather plugin meta-data. diff --git a/skimage/io/tests/test_fits.py b/skimage/io/tests/test_fits.py index 7972dd9d..bf918882 100644 --- a/skimage/io/tests/test_fits.py +++ b/skimage/io/tests/test_fits.py @@ -26,6 +26,11 @@ def test_fits_plugin_import(): else: assert pyfits_available == True + +def teardown(): + io.reset_plugins() + + @skipif(not pyfits_available) def test_imread_MEF(): io.use_plugin('fits') diff --git a/skimage/io/tests/test_freeimage.py b/skimage/io/tests/test_freeimage.py index 0f598fe6..3d8d16f4 100644 --- a/skimage/io/tests/test_freeimage.py +++ b/skimage/io/tests/test_freeimage.py @@ -27,6 +27,10 @@ def setup_module(self): pass +def teardown(): + sio.reset_plugins() + + @skipif(not FI_available) def test_imread(): img = sio.imread(os.path.join(si.data_dir, 'color.png')) diff --git a/skimage/io/tests/test_pil.py b/skimage/io/tests/test_pil.py index 68a21cf0..9f83fcf2 100644 --- a/skimage/io/tests/test_pil.py +++ b/skimage/io/tests/test_pil.py @@ -6,7 +6,7 @@ from numpy.testing.decorators import skipif from tempfile import NamedTemporaryFile from skimage import data_dir -from skimage.io import imread, imsave, use_plugin +from skimage.io import imread, imsave, use_plugin, reset_plugins try: from PIL import Image @@ -18,6 +18,10 @@ else: PIL_available = True +def teardown(): + reset_plugins() + + def setup_module(self): """The effect of the `plugin.use` call may be overridden by later imports. Call `use_plugin` directly before the tests to ensure that PIL is used. diff --git a/skimage/io/tests/test_plugin.py b/skimage/io/tests/test_plugin.py index f801db1e..6480c922 100644 --- a/skimage/io/tests/test_plugin.py +++ b/skimage/io/tests/test_plugin.py @@ -4,8 +4,6 @@ from skimage import io from skimage.io._plugins import plugin from numpy.testing.decorators import skipif -from copy import deepcopy - try: io.use_plugin('pil') PIL_available = True @@ -22,11 +20,10 @@ except OSError: def setup_module(self): - self.backup_plugin_store = deepcopy(plugin.plugin_store) plugin.use('test') # see ../_plugins/test_plugin.py def teardown_module(self): - plugin.plugin_store = self.backup_plugin_store + io.reset_plugins() class TestPlugin: def test_read(self): diff --git a/skimage/io/tests/test_tifffile.py b/skimage/io/tests/test_tifffile.py index fd03804b..0f128bf1 100644 --- a/skimage/io/tests/test_tifffile.py +++ b/skimage/io/tests/test_tifffile.py @@ -17,9 +17,7 @@ except ImportError: def teardown(): - if TF_available: - for k, v in _plugins.items(): - sio.use_plugin(v[0], k) + sio.reset_plugins() @skipif(not TF_available)