Skip to content
Open
Show file tree
Hide file tree
Changes from all 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