# HG changeset patch # User Sebastien Jodogne # Date 1455272065 -3600 # Node ID 7db4b909bec3ebd77c1678922c8f6bfcfd598998 # Parent 5bcf721bde4fada619c5d059abc880cfae1ea70b ManualModification sample diff -r 5bcf721bde4f -r 7db4b909bec3 Resources/Samples/Python/ManualModification.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Resources/Samples/Python/ManualModification.py Fri Feb 12 11:14:25 2016 +0100 @@ -0,0 +1,67 @@ +#!/usr/bin/python + +# Orthanc - A Lightweight, RESTful DICOM Store +# Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics +# Department, University Hospital of Liege, Belgium +# +# This program is free software: you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + + + +# This sample shows how to carry on a manual modification of DICOM +# tags spread accross various levels (Patient/Study/Series/Instance) +# that would normally forbidden as such by the REST API of Orthanc to +# avoid breaking the DICOM hierarchy. This sample can be useful for +# more complex anonymization/modification scenarios, or for optimizing +# the disk usage (the original and the modified instances never +# coexist). + +from RestToolbox import * + +URL = 'http://localhost:8042' +STUDY = '27f7126f-4f66fb14-03f4081b-f9341db2-53925988' + +identifiers = {} + +for instance in DoGet('%s/studies/%s/instances' % (URL, STUDY)): + # Setup the parameters of the modification + replace = { + "PatientID" : "Hello", + "PatientName" : "Modified", + "StationName" : "TEST", + } + + # Get the original UIDs of the instance + seriesUID = DoGet('%s/instances/%s/content/SeriesInstanceUID' % (URL, instance['ID'])) + if seriesUID in identifiers: + replace['SeriesInstanceUID'] = identifiers[seriesUID] + + studyUID = DoGet('%s/instances/%s/content/StudyInstanceUID' % (URL, instance['ID'])) + if studyUID in identifiers: + replace['StudyInstanceUID'] = identifiers[studyUID] + + # Manually modify the instance + print('Modifying instance %s' % instance['ID']) + modified = DoPost('%s/instances/%s/modify' % (URL, instance['ID']), + { "Replace" : replace }) + + # Remove the original instance + DoDelete('%s/instances/%s' % (URL, instance['ID'])) + + # Add the modified instance + modifiedId = DoPost('%s/instances' % URL, modified)['ID'] + + # Register the modified UIDs + identifiers[seriesUID] = DoGet('%s/instances/%s/content/SeriesInstanceUID' % (URL, modifiedId)) + identifiers[studyUID] = DoGet('%s/instances/%s/content/StudyInstanceUID' % (URL, modifiedId))