Skip to content

Commit eca1680

Browse files
noerogkurtisvg
authored andcommitted
Add DICOMweb search study by tags sample (#2466)
1 parent 2a185e3 commit eca1680

File tree

2 files changed

+60
-2
lines changed

2 files changed

+60
-2
lines changed

healthcare/api-client/dicom/dicomweb.py

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,41 @@ def dicomweb_retrieve_study(
152152
# [END healthcare_dicomweb_retrieve_study]
153153

154154

155+
# [START healthcare_dicomweb_search_studies]
156+
def dicomweb_search_studies(
157+
service_account_json,
158+
base_url,
159+
project_id,
160+
cloud_region,
161+
dataset_id,
162+
dicom_store_id):
163+
"""Handles the GET requests specified in the DICOMweb standard."""
164+
url = '{}/projects/{}/locations/{}'.format(base_url,
165+
project_id, cloud_region)
166+
167+
dicomweb_path = '{}/datasets/{}/dicomStores/{}/dicomWeb/studies'.format(
168+
url, dataset_id, dicom_store_id)
169+
170+
# Refine your search by appending DICOM tags to the
171+
# request in the form of query parameters. This sample
172+
# searches for studies containing a patient's name.
173+
params = {'PatientName': 'Sally Zhang'}
174+
175+
session = get_session(service_account_json)
176+
177+
response = session.get(dicomweb_path, params=params)
178+
179+
response.raise_for_status()
180+
181+
patients = response.json()
182+
183+
print('Patients found matching query:')
184+
print(json.dumps(patients, indent=2))
185+
186+
return patients
187+
# [END healthcare_dicomweb_search_studies]
188+
189+
155190
# [START healthcare_dicomweb_retrieve_instance]
156191
def dicomweb_retrieve_instance(
157192
service_account_json,
@@ -342,6 +377,9 @@ def parse_command_line_args():
342377
command.add_parser(
343378
'dicomweb-retrieve-study',
344379
help=dicomweb_retrieve_study.__doc__)
380+
command.add_parser(
381+
'dicomweb-search-studies',
382+
help=dicomweb_search_studies.__doc__)
345383
command.add_parser(
346384
'dicomweb-retrieve-instance',
347385
help=dicomweb_retrieve_instance.__doc__)
@@ -403,6 +441,15 @@ def run_command(args):
403441
args.series_uid,
404442
args.instance_uid)
405443

444+
elif args.command == 'dicomweb-search-studies':
445+
dicomweb_search_studies(
446+
args.service_account_json,
447+
args.base_url,
448+
args.project_id,
449+
args.cloud_region,
450+
args.dataset_id,
451+
args.dicom_store_id)
452+
406453
elif args.command == 'dicomweb-retrieve-rendered':
407454
dicomweb_retrieve_rendered(
408455
args.service_account_json,

healthcare/api-client/dicom/dicomweb_test.py

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,8 @@ def test_dicomweb_store_instance(test_dataset, test_dicom_store, capsys):
106106
study_uid)
107107

108108

109-
def test_dicomweb_search_instance(test_dataset, test_dicom_store, capsys):
109+
def test_dicomweb_search_instance_studies(
110+
test_dataset, test_dicom_store, capsys):
110111
dicomweb.dicomweb_store_instance(
111112
service_account_json,
112113
base_url,
@@ -124,10 +125,20 @@ def test_dicomweb_search_instance(test_dataset, test_dicom_store, capsys):
124125
dataset_id,
125126
dicom_store_id)
126127

128+
dicomweb.dicomweb_search_studies(
129+
service_account_json,
130+
base_url,
131+
project_id,
132+
cloud_region,
133+
dataset_id,
134+
dicom_store_id)
135+
127136
out, _ = capsys.readouterr()
128137

129-
# Check that store instance worked
138+
# Check that search instance worked
130139
assert 'Instances:' in out
140+
# Check that search studies worked
141+
assert 'Patients found matching query' in out
131142

132143
dicomweb.dicomweb_delete_study(
133144
service_account_json,

0 commit comments

Comments
 (0)