From 91f3c3dda525cc150939f0c99751d7428190f3da Mon Sep 17 00:00:00 2001 From: James Butler Date: Wed, 12 Nov 2025 21:04:08 -0500 Subject: [PATCH 1/2] ENH: Replace pydicom deprecated usage of get_frame_offsets --- src/dicomweb_client/file.py | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/src/dicomweb_client/file.py b/src/dicomweb_client/file.py index 612c1f1..7ef54e3 100644 --- a/src/dicomweb_client/file.py +++ b/src/dicomweb_client/file.py @@ -32,7 +32,15 @@ from pydicom.datadict import dictionary_VR, keyword_for_tag, tag_for_keyword from pydicom.dataelem import DataElement from pydicom.dataset import Dataset, FileMetaDataset -from pydicom.encaps import encapsulate, get_frame_offsets +from pydicom.encaps import encapsulate +try: + # pydicom >= 3.0 - parse_basic_offsets replaces get_frame_offsets + from pydicom.encaps import parse_basic_offsets + _use_parse_basic_offsets = True +except ImportError: + # pydicom < 3.0 - use deprecated get_frame_offsets + from pydicom.encaps import get_frame_offsets + _use_parse_basic_offsets = False from pydicom.errors import InvalidDicomError from pydicom.filebase import DicomFileLike from pydicom.filereader import data_element_offset_to_value, dcmread @@ -350,7 +358,13 @@ def _read_bot(fp: DicomFileLike) -> np.ndarray: fp.is_implicit_VR, 'OB' ) fp.seek(pixel_data_element_value_offset - 4, 1) - is_empty, offsets = get_frame_offsets(fp) + + # Use parse_basic_offsets for pydicom >= 3.0, get_frame_offsets for < 3.0 + if _use_parse_basic_offsets: + offsets = parse_basic_offsets(fp) + else: + is_empty, offsets = get_frame_offsets(fp) + return np.array(offsets, dtype=np.uint32) From b4af343483a319a7abb59c57825ebe8616726b4f Mon Sep 17 00:00:00 2001 From: James Butler Date: Thu, 13 Nov 2025 10:48:06 -0500 Subject: [PATCH 2/2] ENH: Support compatibility with pydicom 3 and newer --- pyproject.toml | 2 +- src/dicomweb_client/file.py | 18 ++---------------- 2 files changed, 3 insertions(+), 17 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 09993c3..b035876 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -32,7 +32,7 @@ dependencies = [ "requests>=2.18", "retrying>=1.3.3", "Pillow>=8.3", - "pydicom>=2.2", + "pydicom>=3.0.0", "typing-extensions>=4.0; python_version < '3.8.0'", ] diff --git a/src/dicomweb_client/file.py b/src/dicomweb_client/file.py index 7ef54e3..5dcf6c8 100644 --- a/src/dicomweb_client/file.py +++ b/src/dicomweb_client/file.py @@ -32,15 +32,7 @@ from pydicom.datadict import dictionary_VR, keyword_for_tag, tag_for_keyword from pydicom.dataelem import DataElement from pydicom.dataset import Dataset, FileMetaDataset -from pydicom.encaps import encapsulate -try: - # pydicom >= 3.0 - parse_basic_offsets replaces get_frame_offsets - from pydicom.encaps import parse_basic_offsets - _use_parse_basic_offsets = True -except ImportError: - # pydicom < 3.0 - use deprecated get_frame_offsets - from pydicom.encaps import get_frame_offsets - _use_parse_basic_offsets = False +from pydicom.encaps import encapsulate, parse_basic_offsets from pydicom.errors import InvalidDicomError from pydicom.filebase import DicomFileLike from pydicom.filereader import data_element_offset_to_value, dcmread @@ -358,13 +350,7 @@ def _read_bot(fp: DicomFileLike) -> np.ndarray: fp.is_implicit_VR, 'OB' ) fp.seek(pixel_data_element_value_offset - 4, 1) - - # Use parse_basic_offsets for pydicom >= 3.0, get_frame_offsets for < 3.0 - if _use_parse_basic_offsets: - offsets = parse_basic_offsets(fp) - else: - is_empty, offsets = get_frame_offsets(fp) - + offsets = parse_basic_offsets(fp) return np.array(offsets, dtype=np.uint32)