Skip to content

Commit 95fe9ca

Browse files
author
hackermd
committed
Fix parsing of includefield query parameters
There can be more than one ``includefield`` key-value pair in the query string.
1 parent 2809ea2 commit 95fe9ca

File tree

2 files changed

+19
-1
lines changed

2 files changed

+19
-1
lines changed

src/dicomweb_client/api.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -256,10 +256,11 @@ def _parse_query_parameters(self, fuzzymatching, limit, offset,
256256
else:
257257
params['fuzzymatching'] = 'false'
258258
if fields is not None:
259+
params['includefield'] = list()
259260
for field in set(fields):
260261
if not(isinstance(field, str)):
261262
raise TypeError('Elements of "fields" must be a string.')
262-
params['includefield'] = field
263+
params['includefield'].append(field)
263264
for field, criterion in search_filters.items():
264265
if not(isinstance(field, str)):
265266
raise TypeError('Keys of "search_filters" must be strings.')

src/dicomweb_client/tests/test_api.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,23 @@ def test_search_instances_limit_offset(httpserver, client, cache_dir):
9999
assert request.accept_mimetypes == [('application/dicom+json', 1)]
100100

101101

102+
def test_search_instances_includefields(httpserver, client, cache_dir):
103+
headers = {'content-type': 'application/dicom+json'}
104+
httpserver.serve_content(content='', code=200, headers=headers)
105+
f1 = 'StudyInstanceUID'
106+
f2 = 'SeriesInstanceUID'
107+
client.search_instances(fields={f1, f2})
108+
request = httpserver.requests[0]
109+
query_string_opt_1 = 'includefield={}&includefield={}'.format(f1, f2)
110+
query_string_opt_2 = 'includefield={}&includefield={}'.format(f2, f1)
111+
assert (
112+
request.query_string.decode() == query_string_opt_1 or
113+
request.query_string.decode() == query_string_opt_2
114+
)
115+
assert request.path == '/instances'
116+
assert request.accept_mimetypes == [('application/dicom+json', 1)]
117+
118+
102119
def test_retrieve_instance_metadata(httpserver, client, cache_dir):
103120
cache_filename = os.path.join(cache_dir, 'retrieve_instance_metadata.json')
104121
with open(cache_filename, 'r') as f:

0 commit comments

Comments
 (0)