Mercurial > hg > orthanc-tests
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']) |