From 0f88bed41d94717ebe8cdaec355e1aef55424c6d Mon Sep 17 00:00:00 2001 From: Tony S Yu Date: Fri, 6 Dec 2013 22:26:20 -0600 Subject: [PATCH] Remove inherited config and file-type-specific code. This functionality needs to fleshed out a bit more. This commit can be reverted after the initial refactor PR. --- skimage/io/_io.py | 10 +- skimage/io/inherited_config.py | 127 ---------------------- skimage/io/manage_plugins.py | 13 +-- skimage/io/tests/test_inherited_config.py | 47 -------- 4 files changed, 6 insertions(+), 191 deletions(-) delete mode 100644 skimage/io/inherited_config.py delete mode 100644 skimage/io/tests/test_inherited_config.py diff --git a/skimage/io/_io.py b/skimage/io/_io.py index d38e7ac0..97f8718e 100644 --- a/skimage/io/_io.py +++ b/skimage/io/_io.py @@ -1,4 +1,3 @@ -import os from io import BytesIO import numpy as np @@ -95,14 +94,7 @@ def imread(fname, as_grey=False, plugin=None, flatten=None, as_grey = flatten with file_or_url_context(fname) as fname: - function = 'imread' - # TODO: This should probably use imghdr to get the image format. - try: - _, extension = os.path.splitext(fname) - function = function + extension.lower() - except AttributeError: # Buffers don't work with splitext - pass - img = call_plugin(function, fname, plugin=plugin, **plugin_args) + img = call_plugin('imread', fname, plugin=plugin, **plugin_args) if as_grey and getattr(img, 'ndim', 0) >= 3: img = rgb2grey(img) diff --git a/skimage/io/inherited_config.py b/skimage/io/inherited_config.py deleted file mode 100644 index 9cbc7857..00000000 --- a/skimage/io/inherited_config.py +++ /dev/null @@ -1,127 +0,0 @@ -class InheritedConfig(dict): - """Configuration dictionary where non-existent keys can inherit values. - - This class allows you to define parameter names that can match exactly, but - if it doesn't, parameter names will be searched based on key inheritance. - For example, the key 'size.text' will default to 'size'. - - Note that indexing into the dictionary will raise an error if it doesn't - match exactly, while `InheritedConfig.get` will look up values based on - inheritance. - - Parameters - ---------- - config_values : dict or list of (key, value) pairs - Default values for a configuration, where keys are the parameter names - and values are the associated value. - cascade_map : dict - Dictionary defining cascading defaults. If a parameter name is not - found, indexing `cascade_map` with the parameter name will return - the parameter to look for. - kwargs : dict - Keyword arguments for initializing dict. - """ - - _separator = '.' - - def __init__(self, config_values=None, **kwargs): - assert 'config_values' not in kwargs - - if config_values is None: - config_values = {} - - super(InheritedConfig, self).__init__(config_values, **kwargs) - - def __getitem__(self, key): - return self.get(key, _raise=True) - - def get(self, key, default=None, _raise=False): - """Return best matching config value for `key`. - - Get value from configuration. The search for `key` is in the following - order: - - - `self` (Value in global configuration) - - `default` - - Alternate key specified by `self.cascade_map` - - This method supports the pattern commonly used for optional keyword - arguments to a function. For example:: - - >>> def print_value(key, **kwargs): - ... print kwargs.get(key, 0) - >>> print_value('size') - 0 - >>> print_value('size', size=1) - 1 - - Instead, you would create a config class and write:: - - >>> config = InheritedConfig(size=0) - >>> def print_value(key, **kwargs): - ... print kwargs.get(key, config.get(key)) - >>> print_value('size') - 0 - >>> print_value('size', size=1) - 1 - >>> print_value('non-existent') - None - >>> print_value('size.text') - 0 - - See examples below for a demonstration of the cascading of - configuration names. - - Parameters - ---------- - key : str - Name of config value you want. - default : object - Default value if `key` doesn't exist in instance. - - Examples - -------- - >>> config = InheritedConfig(size=0) - >>> config.get('size') - 0 - >>> top_choice={'size': 1} - >>> top_choice.get('size', config.get('size')) - 1 - >>> config.get('non-existent', 'unknown') - 'unknown' - >>> config.get('size.text') - 0 - >>> config.get('size.text', 2) - 2 - >>> top_choice.get('size', config.get('size.text')) - 1 - """ - if key in self.keys(): - return super(InheritedConfig, self).__getitem__(key) - elif default is not None: - return default - elif self._separator in key: - return self.get(self._parent(key)) - elif _raise: - raise KeyError('%r not in %s' % (key, self.__class__.__name__)) - else: - return None - - def _parent(self, key): - """Return parent key.""" - parts = key.split(self._separator) - return self._separator.join(parts[:-1]) - - def __contains__(self, key): - if key in self.keys(): - return True - elif self._separator in key: - return self.__contains__(self._parent(key)) - else: - return False - - -if __name__ == '__main__': - import doctest - - doctest.testmod() diff --git a/skimage/io/manage_plugins.py b/skimage/io/manage_plugins.py index ebc55b6a..e68594a2 100644 --- a/skimage/io/manage_plugins.py +++ b/skimage/io/manage_plugins.py @@ -10,8 +10,6 @@ except ImportError: import os.path from glob import glob -from skimage.io.inherited_config import InheritedConfig - __all__ = ['use_plugin', 'call_plugin', 'plugin_info', 'plugin_order', 'reset_plugins', 'find_available_plugins', 'available_plugins'] @@ -31,7 +29,6 @@ preferred_plugins = { # Use PIL as the default imread plugin, since matplotlib (1.2.x) # is buggy (flips PNGs around, returns bytes as floats, etc.) 'imread': ['pil'], - 'imread.tiff': ['tifffile'], } @@ -40,11 +37,11 @@ def _clear_plugins(): """ global plugin_store - plugin_store = InheritedConfig({'imread': [], - 'imsave': [], - 'imshow': [], - 'imread_collection': [], - '_app_show': []}) + plugin_store = {'imread': [], + 'imsave': [], + 'imshow': [], + 'imread_collection': [], + '_app_show': []} _clear_plugins() diff --git a/skimage/io/tests/test_inherited_config.py b/skimage/io/tests/test_inherited_config.py deleted file mode 100644 index 207d3cf1..00000000 --- a/skimage/io/tests/test_inherited_config.py +++ /dev/null @@ -1,47 +0,0 @@ -from skimage.io.inherited_config import InheritedConfig - - -def test_get_non_existent(): - config = InheritedConfig() - assert config.get('size') is None - - -def test_get_simple(): - config = InheritedConfig({'imread': 'matplotlib'}) - assert config.get('imread') == 'matplotlib' - - -def test_get_default(): - config = InheritedConfig() - assert config.get('size', 10) == 10 - - -def test_get_best(): - config = InheritedConfig({'size': 0, 'size.text': 1}) - assert config.get('size.text') == 1 - - -def test_get_multi_level(): - config = InheritedConfig({'size': 0}) - assert config.get('size.text.title') == 0 - config['size.text'] = 1 - assert config.get('size.text.title') == 1 - config['size.text.title'] = 2 - assert config.get('size.text.title') == 2 - - -def test_contains(): - config = InheritedConfig({'imread': 'matplotlib'}) - assert 'imread' in config - assert 'imread.jpg' in config - - -def test_getitem(): - config = InheritedConfig({'imread': 'a'}) - assert config['imread'] == 'a' - assert config['imread.png'] == 'a' - - -if __name__ == '__main__': - from numpy import testing - testing.run_module_suite()