94 lines
2.9 KiB
Python
94 lines
2.9 KiB
Python
from contextlib import contextmanager
|
|
import numpy as np
|
|
import pytest
|
|
|
|
from skimage._shared._dependency_checks import has_mpl
|
|
from skimage import io
|
|
from skimage.io import manage_plugins
|
|
from skimage._shared.testing import fetch, assert_stacklevel
|
|
|
|
|
|
priority_plugin = 'pil'
|
|
|
|
|
|
@pytest.fixture(autouse=True)
|
|
def _use_pil_plugin():
|
|
io.use_plugin('pil')
|
|
yield
|
|
io.reset_plugins()
|
|
|
|
|
|
@contextmanager
|
|
def protect_preferred_plugins():
|
|
"""Contexts where `preferred_plugins` can be modified w/o side-effects."""
|
|
preferred_plugins = manage_plugins.preferred_plugins.copy()
|
|
try:
|
|
yield
|
|
finally:
|
|
manage_plugins.preferred_plugins = preferred_plugins
|
|
|
|
|
|
def test_failed_use():
|
|
with pytest.raises(ValueError):
|
|
manage_plugins.use_plugin('asd')
|
|
|
|
|
|
@pytest.mark.skipif(not has_mpl, reason="matplotlib not installed")
|
|
def test_use_priority():
|
|
manage_plugins.use_plugin(priority_plugin)
|
|
plug, func = manage_plugins.plugin_store['imread'][0]
|
|
np.testing.assert_equal(plug, priority_plugin)
|
|
|
|
manage_plugins.use_plugin('matplotlib')
|
|
plug, func = manage_plugins.plugin_store['imread'][0]
|
|
np.testing.assert_equal(plug, 'matplotlib')
|
|
|
|
|
|
@pytest.mark.skipif(not has_mpl, reason="matplotlib not installed")
|
|
def test_load_preferred_plugins_all():
|
|
from skimage.io._plugins import pil_plugin, matplotlib_plugin
|
|
|
|
with protect_preferred_plugins():
|
|
manage_plugins.preferred_plugins = {'all': ['pil'], 'imshow': ['matplotlib']}
|
|
manage_plugins.reset_plugins()
|
|
|
|
for plugin_type in ('imread', 'imsave'):
|
|
plug, func = manage_plugins.plugin_store[plugin_type][0]
|
|
assert func == getattr(pil_plugin, plugin_type)
|
|
plug, func = manage_plugins.plugin_store['imshow'][0]
|
|
assert func == getattr(matplotlib_plugin, 'imshow')
|
|
|
|
|
|
@pytest.mark.skipif(not has_mpl, reason="matplotlib not installed")
|
|
def test_load_preferred_plugins_imread():
|
|
from skimage.io._plugins import pil_plugin, matplotlib_plugin
|
|
|
|
with protect_preferred_plugins():
|
|
manage_plugins.preferred_plugins['imread'] = ['pil']
|
|
manage_plugins.reset_plugins()
|
|
|
|
plug, func = manage_plugins.plugin_store['imread'][0]
|
|
assert func == pil_plugin.imread
|
|
plug, func = manage_plugins.plugin_store['imshow'][0]
|
|
assert func == matplotlib_plugin.imshow, func.__module__
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
("func", "args"),
|
|
[
|
|
(io.use_plugin, ["imageio"]),
|
|
(io.call_plugin, ["imread", fetch("data/camera.png")]),
|
|
(io.plugin_info, ["imageio"]),
|
|
(io.plugin_order, tuple()),
|
|
(io.reset_plugins, tuple()),
|
|
(io.find_available_plugins, tuple()),
|
|
(getattr, [io, "available_plugins"]),
|
|
],
|
|
)
|
|
def test_deprecation_warnings_on_plugin_funcs(func, args):
|
|
regex = ".*use `imageio` or other I/O packages directly.*"
|
|
with pytest.warns(FutureWarning, match=regex) as record:
|
|
func(*args)
|
|
assert len(record) == 1
|
|
assert_stacklevel(record, offset=-2)
|