From 0741279545b2e6f487d62baa13d0a703f1f985e0 Mon Sep 17 00:00:00 2001 From: Ryan Clary <9618975+mrclary@users.noreply.github.com> Date: Fri, 27 Sep 2024 08:39:55 -0700 Subject: [PATCH 1/6] pydicom >= 3.0 has breaking change: dicomio.read_file -> dicomio.dcmread --- requirements/tests.txt | 2 +- setup.py | 2 +- spyder_kernels/utils/iofuncs.py | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/requirements/tests.txt b/requirements/tests.txt index 42ef0167..c5198370 100644 --- a/requirements/tests.txt +++ b/requirements/tests.txt @@ -12,4 +12,4 @@ xarray pillow django h5py -pydicom +pydicom>=3.0 diff --git a/setup.py b/setup.py index 79689b46..78908930 100644 --- a/setup.py +++ b/setup.py @@ -61,7 +61,7 @@ def get_version(module='spyder_kernels'): 'pillow', 'django', 'h5py', - 'pydicom' + 'pydicom>=3.0' ] setup( diff --git a/spyder_kernels/utils/iofuncs.py b/spyder_kernels/utils/iofuncs.py index 7da2828f..37fccc7f 100644 --- a/spyder_kernels/utils/iofuncs.py +++ b/spyder_kernels/utils/iofuncs.py @@ -506,9 +506,9 @@ def load_dicom(filename): name = osp.splitext(osp.basename(filename))[0] try: - data = dicomio.read_file(filename, force=True) + data = dicomio.dcmread(filename, force=True) except TypeError: - data = dicomio.read_file(filename) + data = dicomio.dcmread(filename) arr = data.pixel_array return {name: arr}, None except Exception as error: From bfbf58b6fee1f16314561dc34546a3cdc8043aa7 Mon Sep 17 00:00:00 2001 From: Ryan Clary <9618975+mrclary@users.noreply.github.com> Date: Fri, 27 Sep 2024 09:12:14 -0700 Subject: [PATCH 2/6] Revert "pydicom >= 3.0 has breaking change: dicomio.read_file -> dicomio.dcmread" pydicom >= 3.0 does not appear to be compatible with Python < 3.10. "TypeError: unsupported operand type(s) for |: 'type' and 'type'" upon import of pydicom.dicomio --- requirements/tests.txt | 2 +- setup.py | 2 +- spyder_kernels/utils/iofuncs.py | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/requirements/tests.txt b/requirements/tests.txt index c5198370..42ef0167 100644 --- a/requirements/tests.txt +++ b/requirements/tests.txt @@ -12,4 +12,4 @@ xarray pillow django h5py -pydicom>=3.0 +pydicom diff --git a/setup.py b/setup.py index 78908930..79689b46 100644 --- a/setup.py +++ b/setup.py @@ -61,7 +61,7 @@ def get_version(module='spyder_kernels'): 'pillow', 'django', 'h5py', - 'pydicom>=3.0' + 'pydicom' ] setup( diff --git a/spyder_kernels/utils/iofuncs.py b/spyder_kernels/utils/iofuncs.py index 37fccc7f..7da2828f 100644 --- a/spyder_kernels/utils/iofuncs.py +++ b/spyder_kernels/utils/iofuncs.py @@ -506,9 +506,9 @@ def load_dicom(filename): name = osp.splitext(osp.basename(filename))[0] try: - data = dicomio.dcmread(filename, force=True) + data = dicomio.read_file(filename, force=True) except TypeError: - data = dicomio.dcmread(filename) + data = dicomio.read_file(filename) arr = data.pixel_array return {name: arr}, None except Exception as error: From d5a4ff012127020a277bd42307f5fcf95cc77961 Mon Sep 17 00:00:00 2001 From: Ryan Clary <9618975+mrclary@users.noreply.github.com> Date: Fri, 27 Sep 2024 09:15:39 -0700 Subject: [PATCH 3/6] pydicom must be pinned to <3.0 --- requirements/tests.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements/tests.txt b/requirements/tests.txt index 42ef0167..a4c0ea37 100644 --- a/requirements/tests.txt +++ b/requirements/tests.txt @@ -12,4 +12,4 @@ xarray pillow django h5py -pydicom +pydicom<3.0 From 899c3ea6a1b654357ca8a7f9d1e32292c2ef0fe8 Mon Sep 17 00:00:00 2001 From: Ryan Clary <9618975+mrclary@users.noreply.github.com> Date: Fri, 27 Sep 2024 10:23:47 -0700 Subject: [PATCH 4/6] Revert "pydicom must be pinned to <3.0" This reverts commit d5a4ff012127020a277bd42307f5fcf95cc77961. --- requirements/tests.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements/tests.txt b/requirements/tests.txt index a4c0ea37..42ef0167 100644 --- a/requirements/tests.txt +++ b/requirements/tests.txt @@ -12,4 +12,4 @@ xarray pillow django h5py -pydicom<3.0 +pydicom From 372a774821b067a0c82c39f60af843d304dce266 Mon Sep 17 00:00:00 2001 From: Ryan Clary <9618975+mrclary@users.noreply.github.com> Date: Fri, 27 Sep 2024 10:25:27 -0700 Subject: [PATCH 5/6] Update load_dicom to accommodate pydicom>=3.0/python>=3.10 --- spyder_kernels/utils/iofuncs.py | 11 +++++++++-- spyder_kernels/utils/tests/test_iofuncs.py | 7 ++++++- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/spyder_kernels/utils/iofuncs.py b/spyder_kernels/utils/iofuncs.py index 7da2828f..5102d4a4 100644 --- a/spyder_kernels/utils/iofuncs.py +++ b/spyder_kernels/utils/iofuncs.py @@ -506,9 +506,16 @@ def load_dicom(filename): name = osp.splitext(osp.basename(filename))[0] try: - data = dicomio.read_file(filename, force=True) + # For Pydicom 3/Python 3.10+ + data = dicomio.dcmread(filename, force=True) except TypeError: - data = dicomio.read_file(filename) + data = dicomio.dcmread(filename) + except AttributeError: + # For Pydicom 2/Python 3.9- + try: + data = dicomio.read_file(filename, force=True) + except TypeError: + data = dicomio.read_file(filename) arr = data.pixel_array return {name: arr}, None except Exception as error: diff --git a/spyder_kernels/utils/tests/test_iofuncs.py b/spyder_kernels/utils/tests/test_iofuncs.py index d88b2e10..71cccb20 100644 --- a/spyder_kernels/utils/tests/test_iofuncs.py +++ b/spyder_kernels/utils/tests/test_iofuncs.py @@ -11,9 +11,10 @@ """ # Standard library imports +import copy import io import os -import copy +import sys # Third party imports from PIL import ImageFile @@ -350,6 +351,10 @@ def test_save_load_hdf5_files(tmp_path): assert repr(iofuncs.load_hdf5(h5_file)) == repr(expected) +@pytest.mark.skipif( + sys.version_info < (3, 10, 0), + reason="pydicom 3.0 is incompatible with Python < 3.10" +) def test_load_dicom_files(): """Check that we can load DICOM files.""" # This test pass locally but we need to set the variable below for it to From d00caf1e07683f929260316ffe71650b6ec858f2 Mon Sep 17 00:00:00 2001 From: Ryan Clary <9618975+mrclary@users.noreply.github.com> Date: Sun, 29 Sep 2024 14:18:49 -0700 Subject: [PATCH 6/6] Apply suggestions from code review Co-authored-by: Carlos Cordoba --- spyder_kernels/utils/tests/test_iofuncs.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/spyder_kernels/utils/tests/test_iofuncs.py b/spyder_kernels/utils/tests/test_iofuncs.py index 71cccb20..ee8c1b1b 100644 --- a/spyder_kernels/utils/tests/test_iofuncs.py +++ b/spyder_kernels/utils/tests/test_iofuncs.py @@ -14,7 +14,6 @@ import copy import io import os -import sys # Third party imports from PIL import ImageFile @@ -352,8 +351,8 @@ def test_save_load_hdf5_files(tmp_path): @pytest.mark.skipif( - sys.version_info < (3, 10, 0), - reason="pydicom 3.0 is incompatible with Python < 3.10" + os.environ.get("USE_CONDA") == "true", + reason="Pydicom is not installed correctly in Conda envs" ) def test_load_dicom_files(): """Check that we can load DICOM files."""