From 08523ce7eb69e6ea140c04340cd907d35213892d Mon Sep 17 00:00:00 2001 From: ytl0623 Date: Wed, 7 Aug 2024 15:42:38 +0800 Subject: [PATCH 1/2] Print what package should be installed when suitable writer is missing Fixes #7980 Signed-off-by: ytl0623 --- monai/utils/module.py | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/monai/utils/module.py b/monai/utils/module.py index 4d28f8d986..c63efce0a4 100644 --- a/monai/utils/module.py +++ b/monai/utils/module.py @@ -26,7 +26,7 @@ from pydoc import locate from re import match from types import FunctionType, ModuleType -from typing import Any, Iterable, cast +from typing import Any, Iterable, cast, Dict, List import torch @@ -60,6 +60,16 @@ "pytorch_after", ] +WRITER_PACKAGE_MAP: Dict[str, List[str]] = { + "png": ["pillow"], + "jpg": ["pillow"], + "jpeg": ["pillow"], + "nii": ["nibabel"], + "nii.gz": ["nibabel"], + "dcm": ["pydicom"], + # Add more mappings as needed +} + def look_up_option( opt_str: Hashable, @@ -334,6 +344,20 @@ class OptionalImportError(ImportError): """ Could not import APIs from an optional dependency. """ + + def __init__(self, msg: str = "") -> None: + super().__init__(msg) + self.msg = msg + + def __str__(self) -> str: + original_msg = super().__str__() + if "ImageWriter" in original_msg and "backend found for" in original_msg: + ext = original_msg.split("for ")[-1].strip(".") + suggested_packages = WRITER_PACKAGE_MAP.get(ext, []) + if suggested_packages: + package_list = ", ".join(suggested_packages) + return f"{original_msg} Please install one of the following packages: {package_list}" + return original_msg def optional_import( From 37d85a3c1267fdc73a37795dfd0ca8bfbbfc66a7 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Wed, 7 Aug 2024 07:44:15 +0000 Subject: [PATCH 2/2] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- monai/utils/module.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/monai/utils/module.py b/monai/utils/module.py index c63efce0a4..5cf90acf30 100644 --- a/monai/utils/module.py +++ b/monai/utils/module.py @@ -26,7 +26,7 @@ from pydoc import locate from re import match from types import FunctionType, ModuleType -from typing import Any, Iterable, cast, Dict, List +from typing import Any, Iterable, cast import torch @@ -60,7 +60,7 @@ "pytorch_after", ] -WRITER_PACKAGE_MAP: Dict[str, List[str]] = { +WRITER_PACKAGE_MAP: dict[str, list[str]] = { "png": ["pillow"], "jpg": ["pillow"], "jpeg": ["pillow"], @@ -344,7 +344,7 @@ class OptionalImportError(ImportError): """ Could not import APIs from an optional dependency. """ - + def __init__(self, msg: str = "") -> None: super().__init__(msg) self.msg = msg