Skip to content
Open
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions monai/transforms/io/array.py
Original file line number Diff line number Diff line change
Expand Up @@ -210,10 +210,10 @@ def __init__(
the_reader = look_up_option(_r.lower(), SUPPORTED_READERS)
try:
self.register(the_reader(*args, **kwargs))
except OptionalImportError:
warnings.warn(
except OptionalImportError as e:
raise OptionalImportError(
f"required package for reader {_r} is not installed, or the version doesn't match requirement."
)
) from e
except TypeError: # the reader doesn't have the corresponding args/kwargs
warnings.warn(f"{_r} is not supported with the given parameters {args} {kwargs}.")
self.register(the_reader())
Expand Down
10 changes: 8 additions & 2 deletions tests/data/test_init_reader.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@

from monai.data import ITKReader, NibabelReader, NrrdReader, NumpyReader, PILReader, PydicomReader
from monai.transforms import LoadImage, LoadImaged
from monai.utils import OptionalImportError
from tests.test_utils import SkipIfNoModule


Expand All @@ -26,8 +27,13 @@ def test_load_image(self):
self.assertIsInstance(instance2, LoadImage)

for r in ["NibabelReader", "PILReader", "ITKReader", "NumpyReader", "NrrdReader", "PydicomReader", None]:
inst = LoadImaged("image", reader=r)
self.assertIsInstance(inst, LoadImaged)
with self.subTest(reader=r):
try:
inst = LoadImaged("image", reader=r)
self.assertIsInstance(inst, LoadImaged)
except OptionalImportError:
if r is None:
self.fail("LoadImaged(reader=None) should not raise OptionalImportError.")

@SkipIfNoModule("nibabel")
@SkipIfNoModule("cupy")
Expand Down
19 changes: 19 additions & 0 deletions tests/transforms/test_load_image.py
Original file line number Diff line number Diff line change
Expand Up @@ -498,5 +498,24 @@ def test_correct(self, input_param, expected_shape, track_meta):
self.assertFalse(hasattr(r, "affine"))


class TestLoadImageReaderNotInstalled(unittest.TestCase):
"""Tests that LoadImage raises when a user-specified reader's package is not installed."""

def test_raises_when_user_specified_reader_not_installed(self):
"""Test LoadImage raises OptionalImportError for a missing user-specified reader.

Raises:
OptionalImportError: when the package required by the specified reader is not installed.
"""
from unittest.mock import patch

from monai.utils import OptionalImportError

# Patch ITKReader.__init__ to simulate the package not being installed
with patch("monai.data.image_reader.ITKReader.__init__", side_effect=OptionalImportError("itk not installed")):
with self.assertRaisesRegex(OptionalImportError, "itk not installed|required package for reader ITKReader"):
LoadImage(reader="ITKReader")


if __name__ == "__main__":
unittest.main()
Loading