From b038677e70c5d65cb4d98ce308c30952b78103ec Mon Sep 17 00:00:00 2001 From: Tony S Yu Date: Thu, 31 May 2012 00:27:15 -0400 Subject: [PATCH 1/2] Fix: check all io functions when loading of default plugins. Previously, the first available plugin was loaded and the plugin search quit---even if that plugin didn't provide all io functions. Loop over functions instead to ensure all io funcs have a plugin (if available). --- skimage/io/__init__.py | 41 +++++++++++++++++++++++++---------------- 1 file changed, 25 insertions(+), 16 deletions(-) diff --git a/skimage/io/__init__.py b/skimage/io/__init__.py index 8e47076f..e079533e 100644 --- a/skimage/io/__init__.py +++ b/skimage/io/__init__.py @@ -8,22 +8,6 @@ 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 -available_plugins = plugins() - -for preferred_plugin in ['matplotlib', 'pil', 'qt', 'freeimage', 'null']: - if preferred_plugin in available_plugins: - try: - use_plugin(preferred_plugin) - break - except ImportError: - pass - -# Use PIL as the default imread plugin, since matplotlib (1.2.x) -# is buggy (flips PNGs around, returns bytes as floats, etc.) -try: - use_plugin('pil', 'imread') -except ImportError: - pass from .sift import * from .collection import * @@ -32,6 +16,31 @@ from ._io import * from .video import * +available_plugins = plugins() + + +def _load_preferred_plugins(): + # Load preferred plugin for each io function. + # ('imread' must be last because the list gets modified on last iteration.) + io_funcs = ['imsave', 'imshow', 'imread_collection', 'imread'] + preferred_plugins = ['matplotlib', 'pil', 'qt', 'freeimage', 'null'] + for func in io_funcs: + if func == 'imread': + # Use PIL as the default imread plugin, since matplotlib (1.2.x) + # is buggy (flips PNGs around, returns bytes as floats, etc.) + preferred_plugins.remove('pil') + preferred_plugins.insert(0, 'pil') + for plugin in preferred_plugins: + if plugin not in available_plugins: + continue + try: + use_plugin(plugin, kind=func) + break + except (ImportError, RuntimeError): + pass +_load_preferred_plugins() + + def _update_doc(doc): """Add a list of plugins to the module docstring, formatted as a ReStructuredText table. From 2ec05f3271c0b03facbfd7e7f5a9841387633f72 Mon Sep 17 00:00:00 2001 From: Tony S Yu Date: Sun, 24 Jun 2012 19:38:01 -0400 Subject: [PATCH 2/2] Refactor how PIL is set as default for imread. --- skimage/io/__init__.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/skimage/io/__init__.py b/skimage/io/__init__.py index e079533e..4df5de34 100644 --- a/skimage/io/__init__.py +++ b/skimage/io/__init__.py @@ -21,15 +21,9 @@ available_plugins = plugins() def _load_preferred_plugins(): # Load preferred plugin for each io function. - # ('imread' must be last because the list gets modified on last iteration.) io_funcs = ['imsave', 'imshow', 'imread_collection', 'imread'] preferred_plugins = ['matplotlib', 'pil', 'qt', 'freeimage', 'null'] for func in io_funcs: - if func == 'imread': - # Use PIL as the default imread plugin, since matplotlib (1.2.x) - # is buggy (flips PNGs around, returns bytes as floats, etc.) - preferred_plugins.remove('pil') - preferred_plugins.insert(0, 'pil') for plugin in preferred_plugins: if plugin not in available_plugins: continue @@ -38,6 +32,12 @@ def _load_preferred_plugins(): break except (ImportError, RuntimeError): pass +# Use PIL as the default imread plugin, since matplotlib (1.2.x) +# is buggy (flips PNGs around, returns bytes as floats, etc.) +try: + use_plugin('pil', 'imread') +except ImportError: + pass _load_preferred_plugins()