Skip to content

Commit 3d55233

Browse files
committed
Added tests and additional params to more methods
1 parent 01f7d08 commit 3d55233

File tree

2 files changed

+208
-32
lines changed

2 files changed

+208
-32
lines changed

src/dicomweb_client/web.py

Lines changed: 85 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1802,6 +1802,7 @@ def _get_bulkdata(
18021802
media_types: Optional[Tuple[Union[str, Tuple[str, str]], ...]] = None,
18031803
byte_range: Optional[Tuple[int, int]] = None,
18041804
stream: bool = False,
1805+
additional_params: Optional[Dict[str, Any]] = None
18051806
) -> Iterator[bytes]:
18061807
"""Get bulk data items at a given location.
18071808
@@ -1817,6 +1818,8 @@ def _get_bulkdata(
18171818
stream: bool, optional
18181819
Whether data should be streamed (i.e., requested using chunked
18191820
transfer encoding)
1821+
additional_params: Union[Dict[str, Any], None], optional
1822+
Additional HTTP GET query parameters
18201823
18211824
Returns
18221825
-------
@@ -1826,26 +1829,45 @@ def _get_bulkdata(
18261829
""" # noqa: E501
18271830
if media_types is None:
18281831
return self._http_get_multipart(
1829-
url, media_types, byte_range=byte_range, stream=stream
1832+
url,
1833+
media_types,
1834+
byte_range=byte_range,
1835+
params=additional_params,
1836+
stream=stream,
18301837
)
18311838
common_media_types = self._get_common_media_types(media_types)
18321839
if len(common_media_types) > 1:
18331840
return self._http_get_multipart(
1834-
url, media_types, byte_range=byte_range, stream=stream
1841+
url, media_types,
1842+
byte_range=byte_range,
1843+
params=additional_params,
1844+
stream=stream,
18351845
)
18361846
else:
18371847
common_media_type = common_media_types[0]
18381848
if common_media_type == 'application/octet-stream':
18391849
return self._http_get_multipart_application_octet_stream(
1840-
url, media_types, byte_range=byte_range, stream=stream
1850+
url,
1851+
media_types,
1852+
byte_range=byte_range,
1853+
params=additional_params,
1854+
stream=stream
18411855
)
18421856
elif common_media_type.startswith('image'):
18431857
return self._http_get_multipart_image(
1844-
url, media_types, byte_range=byte_range, stream=stream
1858+
url,
1859+
media_types,
1860+
byte_range=byte_range,
1861+
params=additional_params,
1862+
stream=stream
18451863
)
18461864
elif common_media_type.startswith('video'):
18471865
return self._http_get_multipart_video(
1848-
url, media_types, byte_range=byte_range, stream=stream
1866+
url,
1867+
media_types,
1868+
byte_range=byte_range,
1869+
params=additional_params,
1870+
stream=stream
18491871
)
18501872
else:
18511873
raise ValueError(
@@ -1857,7 +1879,8 @@ def retrieve_bulkdata(
18571879
self,
18581880
url: str,
18591881
media_types: Optional[Tuple[Union[str, Tuple[str, str]], ...]] = None,
1860-
byte_range: Optional[Tuple[int, int]] = None
1882+
byte_range: Optional[Tuple[int, int]] = None,
1883+
additional_params: Optional[Dict[str, Any]] = None,
18611884
) -> List[bytes]:
18621885
"""Retrieve bulk data at a given location.
18631886
@@ -1870,6 +1893,8 @@ def retrieve_bulkdata(
18701893
corresponding transfer syntaxes
18711894
byte_range: Union[Tuple[int, int], None], optional
18721895
Start and end of byte range
1896+
additional_params: Union[Dict[str, Any], None], optional
1897+
Additional HTTP GET query parameters
18731898
18741899
Returns
18751900
-------
@@ -1882,15 +1907,17 @@ def retrieve_bulkdata(
18821907
url=url,
18831908
media_types=media_types,
18841909
byte_range=byte_range,
1885-
stream=False
1910+
stream=False,
1911+
additional_params=additional_params,
18861912
)
18871913
)
18881914

18891915
def iter_bulkdata(
18901916
self,
18911917
url: str,
18921918
media_types: Optional[Tuple[Union[str, Tuple[str, str]], ...]] = None,
1893-
byte_range: Optional[Tuple[int, int]] = None
1919+
byte_range: Optional[Tuple[int, int]] = None,
1920+
additional_params: Optional[Dict[str, Any]] = None,
18941921
) -> Iterator[bytes]:
18951922
"""Iterate over bulk data items at a given location.
18961923
@@ -1903,6 +1930,8 @@ def iter_bulkdata(
19031930
corresponding transfer syntaxes
19041931
byte_range: Union[Tuple[int, int], None], optional
19051932
Start and end of byte range
1933+
additional_params: Union[Dict[str, Any], None], optional
1934+
Additional HTTP GET query parameters
19061935
19071936
Returns
19081937
-------
@@ -1918,15 +1947,16 @@ def iter_bulkdata(
19181947
url=url,
19191948
media_types=media_types,
19201949
byte_range=byte_range,
1921-
stream=True
1950+
stream=True,
1951+
additional_params=additional_params,
19221952
)
19231953

19241954
def _get_study(
19251955
self,
19261956
study_instance_uid: str,
19271957
media_types: Optional[Tuple[Union[str, Tuple[str, str]], ...]] = None,
19281958
stream: bool = False,
1929-
params: Optional[Dict[str, Any]] = None
1959+
additional_params: Optional[Dict[str, Any]] = None
19301960
) -> Iterator[pydicom.dataset.Dataset]:
19311961
"""Get all instances of a study.
19321962
@@ -1940,7 +1970,7 @@ def _get_study(
19401970
stream: bool, optional
19411971
Whether data should be streamed (i.e., requested using chunked
19421972
transfer encoding)
1943-
params: Union[Dict[str, Any], None], optional
1973+
additional_params: Union[Dict[str, Any], None], optional
19441974
Additional HTTP GET query parameters
19451975
19461976
Returns
@@ -1957,7 +1987,7 @@ def _get_study(
19571987
if media_types is None:
19581988
return self._http_get_multipart_application_dicom(
19591989
url,
1960-
params=params,
1990+
params=additional_params,
19611991
stream=stream
19621992
)
19631993
common_media_types = self._get_common_media_types(media_types)
@@ -1975,7 +2005,7 @@ def _get_study(
19752005
return self._http_get_multipart_application_dicom(
19762006
url,
19772007
media_types=media_types,
1978-
params=params,
2008+
params=additional_params,
19792009
stream=stream
19802010
)
19812011

@@ -2061,14 +2091,17 @@ def iter_study(
20612091

20622092
def retrieve_study_metadata(
20632093
self,
2064-
study_instance_uid: str
2094+
study_instance_uid: str,
2095+
additional_params: Optional[Dict[str, Any]] = None
20652096
) -> List[Dict[str, dict]]:
20662097
"""Retrieve metadata of all instances of a study.
20672098
20682099
Parameters
20692100
----------
20702101
study_instance_uid: str
20712102
Study Instance UID
2103+
additional_params: Union[Dict[str, Any], None], optional
2104+
Additional HTTP GET query parameters
20722105
20732106
Returns
20742107
-------
@@ -2083,7 +2116,7 @@ def retrieve_study_metadata(
20832116
)
20842117
url = self._get_studies_url(_Transaction.RETRIEVE, study_instance_uid)
20852118
url += '/metadata'
2086-
return self._http_get_application_json(url)
2119+
return self._http_get_application_json(url, params=additional_params)
20872120

20882121
def delete_study(self, study_instance_uid: str) -> None:
20892122
"""Delete all instances of a study.
@@ -2211,7 +2244,7 @@ def _get_series(
22112244
series_instance_uid: str,
22122245
media_types: Optional[Tuple[Union[str, Tuple[str, str]], ...]] = None,
22132246
stream: bool = False,
2214-
params: Optional[Dict[str, Any]] = None
2247+
additional_params: Optional[Dict[str, Any]] = None
22152248
) -> Iterator[pydicom.dataset.Dataset]:
22162249
"""Get instances of a series.
22172250
@@ -2227,7 +2260,7 @@ def _get_series(
22272260
stream: bool, optional
22282261
Whether data should be streamed (i.e., requested using chunked
22292262
transfer encoding)
2230-
params: Union[Dict[str, Any], None], optional
2263+
additional_params: Union[Dict[str, Any], None], optional
22312264
Additional HTTP GET query parameters
22322265
22332266
Returns
@@ -2258,7 +2291,7 @@ def _get_series(
22582291
if media_types is None:
22592292
return self._http_get_multipart_application_dicom(
22602293
url,
2261-
params=params,
2294+
params=additional_params,
22622295
stream=stream
22632296
)
22642297
common_media_types = self._get_common_media_types(media_types)
@@ -2276,7 +2309,7 @@ def _get_series(
22762309
return self._http_get_multipart_application_dicom(
22772310
url,
22782311
media_types=media_types,
2279-
params=params,
2312+
params=additional_params,
22802313
stream=stream
22812314
)
22822315

@@ -2372,6 +2405,7 @@ def retrieve_series_metadata(
23722405
self,
23732406
study_instance_uid: str,
23742407
series_instance_uid: str,
2408+
additional_params: Optional[Dict[str, Any]] = None
23752409
) -> List[Dict[str, dict]]:
23762410
"""Retrieve metadata for all instances of a series.
23772411
@@ -2381,6 +2415,8 @@ def retrieve_series_metadata(
23812415
Study Instance UID
23822416
series_instance_uid: str
23832417
Series Instance UID
2418+
additional_params: Union[Dict[str, Any], None], optional
2419+
Additional HTTP GET query parameters
23842420
23852421
Returns
23862422
-------
@@ -2410,7 +2446,7 @@ def retrieve_series_metadata(
24102446
series_instance_uid
24112447
)
24122448
url += '/metadata'
2413-
return self._http_get_application_json(url)
2449+
return self._http_get_application_json(url, params=additional_params)
24142450

24152451
def retrieve_series_rendered(
24162452
self, study_instance_uid,
@@ -2602,6 +2638,8 @@ def search_for_instances(
26022638
fields=fields,
26032639
search_filters=search_filters
26042640
)
2641+
if additional_params:
2642+
params.update(additional_params)
26052643
return self._http_get_application_json(
26062644
url,
26072645
params=params,
@@ -2614,7 +2652,7 @@ def retrieve_instance(
26142652
series_instance_uid: str,
26152653
sop_instance_uid: str,
26162654
media_types: Optional[Tuple[Union[str, Tuple[str, str]], ...]] = None,
2617-
params: Optional[Dict[str, Any]] = None
2655+
additional_params: Optional[Dict[str, Any]] = None
26182656
) -> pydicom.dataset.Dataset:
26192657
"""Retrieve an individual instance.
26202658
@@ -2629,7 +2667,7 @@ def retrieve_instance(
26292667
media_types: Union[Tuple[Union[str, Tuple[str, str]], ...], None], optional
26302668
Acceptable media types and optionally the UIDs of the
26312669
acceptable transfer syntaxes
2632-
params: Union[Dict[str, Any], None], optional
2670+
additional_params: Union[Dict[str, Any], None], optional
26332671
Additional HTTP GET query parameters
26342672
26352673
Returns
@@ -2692,7 +2730,7 @@ def retrieve_instance(
26922730
iterator = self._http_get_multipart_application_dicom(
26932731
url,
26942732
media_types=media_types,
2695-
params=params
2733+
params=additional_params
26962734
)
26972735
instances = list(iterator)
26982736
if len(instances) > 1:
@@ -2789,7 +2827,8 @@ def retrieve_instance_metadata(
27892827
self,
27902828
study_instance_uid: str,
27912829
series_instance_uid: str,
2792-
sop_instance_uid: str
2830+
sop_instance_uid: str,
2831+
additional_params: Optional[Dict[str, Any]] = None
27932832
) -> Dict[str, dict]:
27942833
"""Retrieve metadata of an individual instance.
27952834
@@ -2801,6 +2840,8 @@ def retrieve_instance_metadata(
28012840
Series Instance UID
28022841
sop_instance_uid: str
28032842
SOP Instance UID
2843+
additional_params: Union[Dict[str, Any], None], optional
2844+
Additional HTTP GET query parameters
28042845
28052846
Returns
28062847
-------
@@ -2830,7 +2871,7 @@ def retrieve_instance_metadata(
28302871
sop_instance_uid
28312872
)
28322873
url += '/metadata'
2833-
return self._http_get_application_json(url)[0]
2874+
return self._http_get_application_json(url, params=additional_params)[0]
28342875

28352876
def retrieve_instance_rendered(
28362877
self,
@@ -2920,7 +2961,8 @@ def _get_instance_frames(
29202961
sop_instance_uid: str,
29212962
frame_numbers: Sequence[int],
29222963
media_types: Optional[Tuple[Union[str, Tuple[str, str]], ...]] = None,
2923-
stream: bool = False
2964+
stream: bool = False,
2965+
additional_params: Optional[Dict[str, Any]] = None
29242966
) -> Iterator[bytes]:
29252967
"""Get frames of an instance.
29262968
@@ -2940,6 +2982,8 @@ def _get_instance_frames(
29402982
stream: bool, optional
29412983
Whether data should be streamed (i.e., requested using chunked
29422984
transfer encoding)
2985+
additional_params: Union[Dict[str, Any], None], optional
2986+
Additional HTTP GET query parameters
29432987
29442988
Returns
29452989
-------
@@ -2968,40 +3012,49 @@ def _get_instance_frames(
29683012
frame_list = ','.join([str(n) for n in frame_numbers])
29693013
url += f'/frames/{frame_list}'
29703014
if media_types is None:
2971-
return self._http_get_multipart(url, stream=stream)
3015+
return self._http_get_multipart(
3016+
url,
3017+
stream=stream,
3018+
params=additional_params
3019+
)
29723020

29733021
common_media_types = self._get_common_media_types(media_types)
29743022
if len(common_media_types) > 1:
29753023
return self._http_get_multipart(
29763024
url,
29773025
media_types=media_types,
2978-
stream=stream
3026+
stream=stream,
3027+
params=additional_params
29793028
)
29803029

29813030
common_media_type = common_media_types[0]
29823031
if common_media_type == 'application/octet-stream':
29833032
return self._http_get_multipart_application_octet_stream(
29843033
url,
29853034
media_types=media_types,
2986-
stream=stream
3035+
stream=stream,
3036+
params=additional_params
29873037
)
29883038
elif common_media_type.startswith('image'):
29893039
return self._http_get_multipart_image(
29903040
url,
29913041
media_types=media_types,
2992-
stream=stream
3042+
stream=stream,
3043+
params=additional_params
29933044
)
29943045
elif common_media_type.startswith('video'):
29953046
return self._http_get_multipart_video(
29963047
url,
29973048
media_types=media_types,
2998-
stream=stream
3049+
stream=stream,
3050+
params=additional_params
29993051
)
30003052
elif common_media_type.startswith('*'):
30013053
return self._http_get_multipart(
30023054
url,
30033055
media_types=media_types,
3004-
stream=stream
3056+
stream=stream,
3057+
params=additional_params
30053058
)
30063059
else:
30073060
raise ValueError(

0 commit comments

Comments
 (0)