comparison Tests/Tests.py @ 715:c11496bd7eaa find-refactoring tip

tools/find: Metadata, ResponseContent
author Alain Mazy <am@orthanc.team>
date Mon, 07 Oct 2024 18:20:59 +0200
parents 812ad50c5564
children
comparison
equal deleted inserted replaced
714:812ad50c5564 715:c11496bd7eaa
11097 }) 11097 })
11098 11098
11099 self.assertEqual(6, len(a)) 11099 self.assertEqual(6, len(a))
11100 11100
11101 11101
11102 def test_extended_filter_metadata(self): 11102 def test_extended_find_filter_metadata(self):
11103 if IsOrthancVersionAbove(_REMOTE, 1, 12, 5) and HasExtendedFind(_REMOTE): # TODO: remove HasExtendedFind once find-refactoring branch has been merged 11103 if IsOrthancVersionAbove(_REMOTE, 1, 12, 5) and HasExtendedFind(_REMOTE): # TODO: remove HasExtendedFind once find-refactoring branch has been merged
11104 pass 11104
11105 # TODO: 11105 # Upload 12 instances
11106 # filter on metadata value 11106 for i in range(3):
11107 # ... 11107 UploadInstance(_REMOTE, 'Brainix/Flair/IM-0001-000%d.dcm' % (i + 1))
11108 UploadInstance(_REMOTE, 'Brainix/Epi/IM-0001-000%d.dcm' % (i + 1))
11109 UploadInstance(_REMOTE, 'Knee/T1/IM-0001-000%d.dcm' % (i + 1))
11110 UploadInstance(_REMOTE, 'Knee/T2/IM-0001-000%d.dcm' % (i + 1))
11111
11112 kneeT2SeriesId = 'bbf7a453-0d34251a-03663b55-46bb31b9-ffd74c59'
11113 kneeT1SeriesId = '6de73705-c4e65c1b-9d9ea1b5-cabcd8e7-f15e4285'
11114 brainixFlairSeriesId = '1e2c125c-411b8e86-3f4fe68e-a7584dd3-c6da78f0'
11115 brainixEpiSeriesId = '2ac1316d-3e432022-62eabff2-c59f5475-9b1ac3f8'
11116 DoPut(_REMOTE, '/series/%s/metadata/my-metadata' % kneeT2SeriesId, 'kneeT2')
11117 DoPut(_REMOTE, '/series/%s/metadata/my-metadata' % kneeT1SeriesId, 'kneeT1')
11118 DoPut(_REMOTE, '/series/%s/metadata/my-metadata' % brainixFlairSeriesId, 'brainixFlair')
11119 DoPut(_REMOTE, '/series/%s/metadata/my-metadata' % brainixEpiSeriesId, 'brainixEpi')
11120
11121 # filter on metadata
11122 a = DoPost(_REMOTE, '/tools/find', { 'Level' : 'Series',
11123 'Query' : {
11124 'SeriesDescription' : 'T*'
11125 },
11126 'QueryMetadata' : {
11127 'my-metadata': '*2*'
11128 }
11129 })
11130
11131 self.assertEqual(1, len(a))
11132 self.assertEqual(kneeT2SeriesId, a[0])
11133
11134 def test_extended_find_expand(self):
11135 if IsOrthancVersionAbove(_REMOTE, 1, 12, 5) and HasExtendedFind(_REMOTE): # TODO: remove HasExtendedFind once find-refactoring branch has been merged
11136 UploadInstance(_REMOTE, 'Knee/T2/IM-0001-0001.dcm')
11137
11138 a = DoPost(_REMOTE, '/tools/find', { 'Level' : 'Series',
11139 'Query' : {
11140 'SeriesDescription' : 'T*'
11141 },
11142 'Expand': True,
11143 'RequestedTags': ['StudyDate']
11144 })
11145
11146 # backward compat for Expand = True
11147 self.assertIn('ExpectedNumberOfInstances', a[0])
11148 self.assertIn('ID', a[0])
11149 self.assertIn('Instances', a[0])
11150 self.assertIn('Labels', a[0])
11151 self.assertIn('LastUpdate', a[0])
11152 self.assertIn('MainDicomTags', a[0])
11153 self.assertIn('ParentStudy', a[0])
11154 self.assertIn('RequestedTags', a[0])
11155 self.assertIn('Status', a[0])
11156 self.assertIn('Type', a[0])
11157 self.assertIn('IsStable', a[0])
11158 self.assertNotIn('Attachments', a[0])
11159 self.assertNotIn('Metadata', a[0])
11160
11161
11162 a = DoPost(_REMOTE, '/tools/find', { 'Level' : 'Series',
11163 'Query' : {
11164 'SeriesDescription' : 'T*'
11165 },
11166 'ResponseContent': ["MainDicomTags"],
11167 'RequestedTags': ['StudyDate']
11168 })
11169
11170 self.assertIn('ID', a[0]) # the ID is always in the response
11171 self.assertIn('Type', a[0]) # the Type is always in the response
11172 self.assertIn('RequestedTags', a[0]) # the RequestedTags are always in the response as soon as you have requested them
11173 self.assertIn('MainDicomTags', a[0])
11174 self.assertNotIn('ExpectedNumberOfInstances', a[0])
11175 self.assertNotIn('Instances', a[0])
11176 self.assertNotIn('Labels', a[0])
11177 self.assertNotIn('LastUpdate', a[0])
11178 self.assertNotIn('ParentStudy', a[0])
11179 self.assertNotIn('Status', a[0])
11180 self.assertNotIn('IsStable', a[0])
11181 self.assertNotIn('Attachments', a[0])
11182 self.assertNotIn('Metadata', a[0])
11183
11184
11185 a = DoPost(_REMOTE, '/tools/find', { 'Level' : 'Series',
11186 'Query' : {
11187 'SeriesDescription' : 'T*'
11188 },
11189 'ResponseContent': ["MainDicomTags", "Children", "Parent", "IsStable", "Status", "Labels", "Metadata"],
11190 'RequestedTags': ['StudyDate']
11191 })
11192
11193 self.assertIn('ID', a[0]) # the ID is always in the response
11194 self.assertIn('Type', a[0]) # the Type is always in the response
11195 self.assertIn('RequestedTags', a[0]) # the RequestedTags are always in the response as soon as you have requested them
11196 self.assertIn('MainDicomTags', a[0])
11197 self.assertIn('Metadata', a[0])
11198 self.assertIn('LastUpdate', a[0]['Metadata'])
11199 self.assertIn('Instances', a[0])
11200 self.assertIn('Labels', a[0])
11201 self.assertIn('ParentStudy', a[0])
11202 self.assertIn('Status', a[0])
11203 self.assertIn('IsStable', a[0])
11204 self.assertNotIn('Attachments', a[0])
11205
11206
11207 a = DoPost(_REMOTE, '/tools/find', { 'Level' : 'Instances',
11208 'Query' : {
11209 'SeriesDescription' : 'T*'
11210 },
11211 'Expand': True,
11212 'RequestedTags': ['StudyDate']
11213 })
11214
11215 # backward compat for Expand = True at instance level
11216 self.assertIn('ID', a[0]) # the ID is always in the response
11217 self.assertIn('Type', a[0]) # the Type is always in the response
11218 self.assertIn('RequestedTags', a[0]) # the RequestedTags are always in the response as soon as you have requested them
11219 self.assertIn('FileSize', a[0])
11220 self.assertIn('FileUuid', a[0])
11221 self.assertIn('IndexInSeries', a[0])
11222 self.assertIn('ParentSeries', a[0])
11223 self.assertIn('Labels', a[0])
11224 self.assertNotIn('Attachments', a[0])
11225 self.assertNotIn('Metadata', a[0])
11226
11227 a = DoPost(_REMOTE, '/tools/find', { 'Level' : 'Instances',
11228 'Query' : {
11229 'SeriesDescription' : 'T*'
11230 },
11231 'ResponseContent' : ['Attachments'],
11232 'RequestedTags': ['StudyDate']
11233 })
11234
11235 # backward compat for Expand = True at instance level
11236 self.assertIn('ID', a[0]) # the ID is always in the response
11237 self.assertIn('Type', a[0]) # the Type is always in the response
11238 self.assertIn('RequestedTags', a[0]) # the RequestedTags are always in the response as soon as you have requested them
11239 self.assertIn('Attachments', a[0])
11240 self.assertIn('Uuid', a[0]['Attachments'][0])
11241 self.assertIn('UncompressedSize', a[0]['Attachments'][0])
11242
11243
11244 def test_extended_find_full(self):
11245 if IsOrthancVersionAbove(_REMOTE, 1, 12, 5) and HasExtendedFind(_REMOTE): # TODO: remove HasExtendedFind once find-refactoring branch has been merged
11246
11247 # Upload 12 instances
11248 for i in range(3):
11249 UploadInstance(_REMOTE, 'Brainix/Flair/IM-0001-000%d.dcm' % (i + 1))
11250 UploadInstance(_REMOTE, 'Brainix/Epi/IM-0001-000%d.dcm' % (i + 1))
11251 UploadInstance(_REMOTE, 'Knee/T1/IM-0001-000%d.dcm' % (i + 1))
11252 UploadInstance(_REMOTE, 'Knee/T2/IM-0001-000%d.dcm' % (i + 1))
11253
11254 kneeT2SeriesId = 'bbf7a453-0d34251a-03663b55-46bb31b9-ffd74c59'
11255 kneeT1SeriesId = '6de73705-c4e65c1b-9d9ea1b5-cabcd8e7-f15e4285'
11256 brainixFlairSeriesId = '1e2c125c-411b8e86-3f4fe68e-a7584dd3-c6da78f0'
11257 brainixEpiSeriesId = '2ac1316d-3e432022-62eabff2-c59f5475-9b1ac3f8'
11258 kneeStudyId = '0a9b3153-2512774b-2d9580de-1fc3dcf6-3bd83918'
11259 kneePatientId = 'ca29faea-b6a0e17f-067743a1-8b778011-a48b2a17'
11260 DoPut(_REMOTE, '/series/%s/metadata/my-metadata' % kneeT2SeriesId, 'kneeT2')
11261 DoPut(_REMOTE, '/series/%s/metadata/my-metadata' % kneeT1SeriesId, 'kneeT1')
11262 DoPut(_REMOTE, '/series/%s/metadata/my-metadata' % brainixFlairSeriesId, 'brainixFlair')
11263 DoPut(_REMOTE, '/series/%s/metadata/my-metadata' % brainixEpiSeriesId, 'brainixEpi')
11264
11265 a = DoPost(_REMOTE, '/tools/find', { 'Level' : 'Series',
11266 'Query' : {
11267 'PatientName' : '*'
11268 },
11269 'RequestedTags': ['StudyDate'],
11270 'QueryMetadata' : {
11271 'my-metadata': "*nee*"
11272 },
11273 'OrderBy' : [
11274 {
11275 'Type': 'DicomTag',
11276 'Key': 'SeriesDescription',
11277 'Direction': 'ASC'
11278 },
11279 {
11280 'Type': 'Metadata',
11281 'Key': 'my-metadata',
11282 'Direction': 'DESC'
11283 }
11284 ],
11285 'ParentPatient': kneePatientId,
11286 'ResponseContent' : ['Parent', 'Children', 'MainDicomTags', 'Metadata']
11287 })
11288
11289 self.assertEqual(2, len(a))
11290 self.assertEqual(kneeT1SeriesId, a[0]['ID'])
11291 self.assertEqual(kneeT2SeriesId, a[1]['ID'])
11292 self.assertEqual(kneeStudyId, a[0]['ParentStudy'])
11293 self.assertEqual(3, len(a[0]['Instances']))
11294 self.assertEqual('', a[0]['Metadata']['RemoteAET'])