2121 Union ,
2222 Tuple ,
2323)
24- from urllib .parse import urlparse
24+ from urllib .parse import urlencode , urlparse
2525from warnings import warn
2626from xml .etree .ElementTree import (
2727 Element ,
@@ -1659,7 +1659,7 @@ def search_for_studies(
16591659 Study representations
16601660 (see `Study Result Attributes <http://dicom.nema.org/medical/dicom/current/output/chtml/part18/sect_6.7.html#table_6.7.1-2>`_)
16611661
1662- Notes
1662+ Note
16631663 ----
16641664 - The server may only return a subset of search results. In this case,
16651665 a warning will notify the client that there are remaining results.
@@ -2013,6 +2013,7 @@ def retrieve_study(
20132013 self ,
20142014 study_instance_uid : str ,
20152015 media_types : Optional [Tuple [Union [str , Tuple [str , str ]], ...]] = None ,
2016+ additional_params : Optional [Dict [str , Any ]] = None
20162017 ) -> List [pydicom .dataset .Dataset ]:
20172018 """Retrieve all instances of a study.
20182019
@@ -2023,6 +2024,8 @@ def retrieve_study(
20232024 media_types: Union[Tuple[Union[str, Tuple[str, str]], ...], None], optional
20242025 Acceptable media types and optionally the UIDs of the
20252026 acceptable transfer syntaxes
2027+ additional_params: Union[Dict[str, Any], None], optional
2028+ Additional HTTP GET query parameters
20262029
20272030 Returns
20282031 -------
@@ -2044,14 +2047,16 @@ def retrieve_study(
20442047 self ._get_study (
20452048 study_instance_uid = study_instance_uid ,
20462049 media_types = media_types ,
2047- stream = False
2050+ stream = False ,
2051+ additional_params = additional_params
20482052 )
20492053 )
20502054
20512055 def iter_study (
20522056 self ,
20532057 study_instance_uid : str ,
20542058 media_types : Optional [Tuple [Union [str , Tuple [str , str ]], ...]] = None ,
2059+ additional_params : Optional [Dict [str , Any ]] = None
20552060 ) -> Iterator [pydicom .dataset .Dataset ]:
20562061 """Iterate over all instances of a study.
20572062
@@ -2062,6 +2067,8 @@ def iter_study(
20622067 media_types: Union[Tuple[Union[str, Tuple[str, str]], ...], None], optional
20632068 Acceptable media types and optionally the UIDs of the
20642069 acceptable transfer syntaxes
2070+ additional_params: Union[Dict[str, Any], None], optional
2071+ Additional HTTP GET query parameters
20652072
20662073 Returns
20672074 -------
@@ -2086,7 +2093,8 @@ def iter_study(
20862093 return self ._get_study (
20872094 study_instance_uid = study_instance_uid ,
20882095 media_types = media_types ,
2089- stream = True
2096+ stream = True ,
2097+ additional_params = additional_params
20902098 )
20912099
20922100 def retrieve_study_metadata (
@@ -2118,13 +2126,19 @@ def retrieve_study_metadata(
21182126 url += '/metadata'
21192127 return self ._http_get_application_json (url , params = additional_params )
21202128
2121- def delete_study (self , study_instance_uid : str ) -> None :
2129+ def delete_study (
2130+ self ,
2131+ study_instance_uid : str ,
2132+ additional_params : Optional [Dict [str , Any ]] = None
2133+ ) -> None :
21222134 """Delete all instances of a study.
21232135
21242136 Parameters
21252137 ----------
21262138 study_instance_uid: str
21272139 Study Instance UID
2140+ additional_params: Union[Dict[str, Any], None], optional
2141+ Additional HTTP DELETE query parameters
21282142
21292143 Note
21302144 ----
@@ -2141,6 +2155,12 @@ def delete_study(self, study_instance_uid: str) -> None:
21412155 'Study Instance UID is required for deletion of a study.'
21422156 )
21432157 url = self ._get_studies_url (_Transaction .DELETE , study_instance_uid )
2158+ # Append query string if additional_params is provided
2159+ if additional_params :
2160+ additional_params_query_string = urlencode (
2161+ additional_params , doseq = True
2162+ )
2163+ url += f'?{ additional_params_query_string } '
21442164 self ._http_delete (url )
21452165
21462166 def _assert_uid_format (self , uid : str ) -> None :
@@ -2207,7 +2227,7 @@ def search_for_series(
22072227 Series representations
22082228 (see `Series Result Attributes <http://dicom.nema.org/medical/dicom/current/output/chtml/part18/sect_6.7.html#table_6.7.1-2a>`_)
22092229
2210- Notes
2230+ Note
22112231 ----
22122232 - The server may only return a subset of search results. In this case,
22132233 a warning will notify the client that there are remaining results.
@@ -2317,7 +2337,8 @@ def retrieve_series(
23172337 self ,
23182338 study_instance_uid : str ,
23192339 series_instance_uid : str ,
2320- media_types : Optional [Tuple [Union [str , Tuple [str , str ]], ...]] = None
2340+ media_types : Optional [Tuple [Union [str , Tuple [str , str ]], ...]] = None ,
2341+ additional_params : Optional [Dict [str , Any ]] = None
23212342 ) -> List [pydicom .dataset .Dataset ]:
23222343 """Retrieve all instances of a series.
23232344
@@ -2330,6 +2351,8 @@ def retrieve_series(
23302351 media_types: Union[Tuple[Union[str, Tuple[str, str]], ...], None], optional
23312352 Acceptable media types and optionally the UIDs of the
23322353 acceptable transfer syntaxes
2354+ additional_params: Union[Dict[str, Any], None], optional
2355+ Additional HTTP GET query parameters
23332356
23342357 Returns
23352358 -------
@@ -2352,15 +2375,17 @@ def retrieve_series(
23522375 study_instance_uid = study_instance_uid ,
23532376 series_instance_uid = series_instance_uid ,
23542377 media_types = media_types ,
2355- stream = False
2378+ stream = False ,
2379+ additional_params = additional_params
23562380 )
23572381 )
23582382
23592383 def iter_series (
23602384 self ,
23612385 study_instance_uid : str ,
23622386 series_instance_uid : str ,
2363- media_types : Optional [Tuple [Union [str , Tuple [str , str ]], ...]] = None
2387+ media_types : Optional [Tuple [Union [str , Tuple [str , str ]], ...]] = None ,
2388+ additional_params : Optional [Dict [str , Any ]] = None
23642389 ) -> Iterator [pydicom .dataset .Dataset ]:
23652390 """Iterate over all instances of a series.
23662391
@@ -2373,6 +2398,8 @@ def iter_series(
23732398 media_types: Union[Tuple[Union[str, Tuple[str, str]], ...], None], optional
23742399 Acceptable media types and optionally the UIDs of the
23752400 acceptable transfer syntaxes
2401+ additional_params: Union[Dict[str, Any], None], optional
2402+ Additional HTTP GET query parameters
23762403
23772404 Returns
23782405 -------
@@ -2398,7 +2425,8 @@ def iter_series(
23982425 study_instance_uid = study_instance_uid ,
23992426 series_instance_uid = series_instance_uid ,
24002427 media_types = media_types ,
2401- stream = True
2428+ stream = True ,
2429+ additional_params = additional_params
24022430 )
24032431
24042432 def retrieve_series_metadata (
@@ -2525,7 +2553,8 @@ def retrieve_series_rendered(
25252553 def delete_series (
25262554 self ,
25272555 study_instance_uid : str ,
2528- series_instance_uid : str
2556+ series_instance_uid : str ,
2557+ additional_params : Optional [Dict [str , Any ]] = None
25292558 ) -> None :
25302559 """Delete all instances of a series.
25312560
@@ -2535,6 +2564,8 @@ def delete_series(
25352564 Study Instance UID
25362565 series_instance_uid: str
25372566 Series Instance UID
2567+ additional_params: Union[Dict[str, Any], None], optional
2568+ Additional HTTP DELETE query parameters
25382569
25392570 Note
25402571 ----
@@ -2563,6 +2594,12 @@ def delete_series(
25632594 study_instance_uid ,
25642595 series_instance_uid
25652596 )
2597+ # Append query string if additional_params is provided
2598+ if additional_params :
2599+ additional_params_query_string = urlencode (
2600+ additional_params , doseq = True
2601+ )
2602+ url += f'?{ additional_params_query_string } '
25662603 self ._http_delete (url )
25672604
25682605 def search_for_instances (
@@ -2741,7 +2778,8 @@ def retrieve_instance(
27412778 def store_instances (
27422779 self ,
27432780 datasets : Sequence [pydicom .dataset .Dataset ],
2744- study_instance_uid : Optional [str ] = None
2781+ study_instance_uid : Optional [str ] = None ,
2782+ additional_params : Optional [Dict [str , Any ]] = None
27452783 ) -> pydicom .dataset .Dataset :
27462784 """Store instances.
27472785
@@ -2751,6 +2789,8 @@ def store_instances(
27512789 Instances that should be stored
27522790 study_instance_uid: Union[str, None], optional
27532791 Study Instance UID
2792+ additional_params: Union[Dict[str, Any], None], optional
2793+ Additional HTTP POST query parameters
27542794
27552795 Returns
27562796 -------
@@ -2770,6 +2810,12 @@ def _iter_encoded_datasets(datasets):
27702810 message += f' of study "{ study_instance_uid } "'
27712811 logger .info (message )
27722812 url = self ._get_studies_url (_Transaction .STORE , study_instance_uid )
2813+ # Append query string if additional_params is provided
2814+ if additional_params :
2815+ additional_params_query_string = urlencode (
2816+ additional_params , doseq = True
2817+ )
2818+ url += f'?{ additional_params_query_string } '
27732819 encoded_datasets = _iter_encoded_datasets (datasets )
27742820 return self ._http_post_multipart_application_dicom (
27752821 url ,
@@ -2780,7 +2826,8 @@ def delete_instance(
27802826 self ,
27812827 study_instance_uid : str ,
27822828 series_instance_uid : str ,
2783- sop_instance_uid : str
2829+ sop_instance_uid : str ,
2830+ additional_params : Optional [Dict [str , Any ]] = None
27842831 ) -> None :
27852832 """Delete specified instance.
27862833
@@ -2792,6 +2839,8 @@ def delete_instance(
27922839 Series Instance UID
27932840 sop_instance_uid: str
27942841 SOP Instance UID
2842+ additional_params: Union[Dict[str, Any], None], optional
2843+ Additional HTTP DELETE query parameters
27952844
27962845 Note
27972846 ----
@@ -2821,6 +2870,12 @@ def delete_instance(
28212870 series_instance_uid ,
28222871 sop_instance_uid
28232872 )
2873+ # Append query string if additional_params is provided
2874+ if additional_params :
2875+ additional_params_query_string = urlencode (
2876+ additional_params , doseq = True
2877+ )
2878+ url += f'?{ additional_params_query_string } '
28242879 self ._http_delete (url )
28252880
28262881 def retrieve_instance_metadata (
0 commit comments