3232import requests
3333import retrying
3434
35- from dicomweb_client .uri import build_query_string , parse_query_parameters
35+ from dicomweb_client .uri import build_query_string , parse_query_parameters , _validate_uid
3636
3737
3838logger = logging .getLogger (__name__ )
3939
40- # For DICOM Standard spec validation of UID components in `DICOMwebClient`.
41- _REGEX_UID = re .compile (r'[0-9]+([.][0-9]+)*' )
42- _REGEX_PERMISSIVE_UID = re .compile (r'[^/@]+' )
43-
4440
4541def _load_xml_dataset (dataset : Element ) -> pydicom .dataset .Dataset :
4642 """Load DICOM Data Set in DICOM XML format.
@@ -205,7 +201,7 @@ def __init__(
205201 headers : Optional [Dict [str , str ]] = None ,
206202 callback : Optional [Callable ] = None ,
207203 chunk_size : int = 10 ** 6 ,
208- permissive : bool = False
204+ permissive_uid : bool = False
209205 ) -> None :
210206 """Instatiate client.
211207
@@ -327,7 +323,7 @@ def __init__(
327323 if callback is not None :
328324 self ._session .hooks = {'response' : [callback , ]}
329325 self ._chunk_size = chunk_size
330- self ._permissive = permissive
326+ self ._permissive_uid = permissive_uid
331327 self .set_http_retry_params ()
332328
333329 def _get_transaction_url (self , transaction : _Transaction ) -> str :
@@ -2177,31 +2173,6 @@ def delete_study(
21772173 url += f'?{ additional_params_query_string } '
21782174 self ._http_delete (url )
21792175
2180- def _assert_uid_format (self , uid : str ) -> None :
2181- """Check whether a DICOM UID has the correct format.
2182-
2183- Parameters
2184- ----------
2185- uid: str
2186- DICOM UID
2187-
2188- Raises
2189- ------
2190- TypeError
2191- When `uid` is not a string
2192- ValueError
2193- When `uid` doesn't match the regular expression pattern for
2194- DICOM UIDs (strict or permissive regex)
2195-
2196- """
2197- if not isinstance (uid , str ):
2198- raise TypeError ('DICOM UID must be a string.' )
2199- if not self ._permissive and _REGEX_UID .fullmatch (uid ) is None :
2200- raise ValueError (f'UID { uid !r} must match regex { _REGEX_UID !r} in '
2201- 'conformance with the DICOM Standard.' )
2202- elif self ._permissive and _REGEX_PERMISSIVE_UID .fullmatch (uid ) is None :
2203- raise ValueError (f'Permissive mode is enabled. UID { uid !r} must match '
2204- f'regex { _REGEX_PERMISSIVE_UID !r} .' )
22052176
22062177 def search_for_series (
22072178 self ,
@@ -2255,7 +2226,7 @@ def search_for_series(
22552226
22562227 """ # noqa: E501
22572228 if study_instance_uid is not None :
2258- self . _assert_uid_format (study_instance_uid )
2229+ _validate_uid (study_instance_uid , self . _permissive_uid )
22592230 logger .info (f'search for series of study "{ study_instance_uid } "' )
22602231 else :
22612232 logger .info ('search for series' )
@@ -2314,12 +2285,12 @@ def _get_series(
23142285 f'retrieve series "{ series_instance_uid } " '
23152286 f'of study "{ study_instance_uid } "'
23162287 )
2317- self . _assert_uid_format (study_instance_uid )
2288+ _validate_uid (study_instance_uid , self . _permissive_uid )
23182289 if series_instance_uid is None :
23192290 raise ValueError (
23202291 'Series Instance UID is required for retrieval of series.'
23212292 )
2322- self . _assert_uid_format (series_instance_uid )
2293+ _validate_uid (series_instance_uid , self . _permissive_uid )
23232294 url = self ._get_series_url (
23242295 _Transaction .RETRIEVE ,
23252296 study_instance_uid ,
@@ -2474,7 +2445,7 @@ def retrieve_series_metadata(
24742445 'Study Instance UID is required for retrieval of '
24752446 'series metadata.'
24762447 )
2477- self . _assert_uid_format (study_instance_uid )
2448+ _validate_uid (study_instance_uid , self . _permissive_uid )
24782449 if series_instance_uid is None :
24792450 raise ValueError (
24802451 'Series Instance UID is required for retrieval of '
@@ -2484,7 +2455,7 @@ def retrieve_series_metadata(
24842455 f'retrieve metadata of series "{ series_instance_uid } " '
24852456 f'of study "{ study_instance_uid } "'
24862457 )
2487- self . _assert_uid_format (series_instance_uid )
2458+ _validate_uid (series_instance_uid , self . _permissive_uid )
24882459 url = self ._get_series_url (
24892460 _Transaction .RETRIEVE ,
24902461 study_instance_uid ,
@@ -2677,7 +2648,7 @@ def search_for_instances(
26772648 if series_instance_uid is not None :
26782649 message += f' of series "{ series_instance_uid } "'
26792650 if study_instance_uid is not None :
2680- self . _assert_uid_format (study_instance_uid )
2651+ _validate_uid (study_instance_uid , self . _permissive_uid )
26812652 message += f' of study "{ study_instance_uid } "'
26822653 logger .info (message )
26832654 url = self ._get_instances_url (
@@ -2744,12 +2715,12 @@ def retrieve_instance(
27442715 raise ValueError (
27452716 'Study Instance UID is required for retrieval of instance.'
27462717 )
2747- self . _assert_uid_format (study_instance_uid )
2718+ _validate_uid (study_instance_uid , self . _permissive_uid )
27482719 if series_instance_uid is None :
27492720 raise ValueError (
27502721 'Series Instance UID is required for retrieval of instance.'
27512722 )
2752- self . _assert_uid_format (series_instance_uid )
2723+ _validate_uid (series_instance_uid , self . _permissive_uid )
27532724 if sop_instance_uid is None :
27542725 raise ValueError (
27552726 'SOP Instance UID is required for retrieval of instance.'
@@ -2759,7 +2730,7 @@ def retrieve_instance(
27592730 f'of series "{ series_instance_uid } " '
27602731 f'of study "{ study_instance_uid } "'
27612732 )
2762- self . _assert_uid_format (sop_instance_uid )
2733+ _validate_uid (sop_instance_uid , self . _permissive_uid )
27632734 url = self ._get_instances_url (
27642735 _Transaction .RETRIEVE ,
27652736 study_instance_uid ,
0 commit comments