Mercurial > hg > orthanc-book
annotate Sphinx/source/plugins/python/received-instance-callback.py @ 985:ab706fe809ba
minimal quality message
author | Alain Mazy <am@osimis.io> |
---|---|
date | Thu, 28 Sep 2023 16:43:56 +0200 |
parents | a67ceccebf02 |
children |
rev | line source |
---|---|
799
ecf431e1bd44
python sample for ReceivedInstanceCallback
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
1 from io import BytesIO |
ecf431e1bd44
python sample for ReceivedInstanceCallback
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
2 |
ecf431e1bd44
python sample for ReceivedInstanceCallback
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
3 from pydicom import dcmread, dcmwrite |
ecf431e1bd44
python sample for ReceivedInstanceCallback
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
4 from pydicom.filebase import DicomFileLike |
ecf431e1bd44
python sample for ReceivedInstanceCallback
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
5 |
814
b14dbbb8eda9
fix sample of ReceivedInstanceCallback for Python
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
799
diff
changeset
|
6 import orthanc |
799
ecf431e1bd44
python sample for ReceivedInstanceCallback
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
7 |
ecf431e1bd44
python sample for ReceivedInstanceCallback
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
8 # from https://pydicom.github.io/pydicom/stable/auto_examples/memory_dataset.html |
ecf431e1bd44
python sample for ReceivedInstanceCallback
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
9 def write_dataset_to_bytes(dataset): |
ecf431e1bd44
python sample for ReceivedInstanceCallback
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
10 with BytesIO() as buffer: |
ecf431e1bd44
python sample for ReceivedInstanceCallback
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
11 memory_dataset = DicomFileLike(buffer) |
ecf431e1bd44
python sample for ReceivedInstanceCallback
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
12 dcmwrite(memory_dataset, dataset) |
ecf431e1bd44
python sample for ReceivedInstanceCallback
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
13 memory_dataset.seek(0) |
ecf431e1bd44
python sample for ReceivedInstanceCallback
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
14 return memory_dataset.read() |
ecf431e1bd44
python sample for ReceivedInstanceCallback
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
15 |
815
a56c4128c9a2
ReceivedInstanceCallback in Python: added origin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
814
diff
changeset
|
16 def ReceivedInstanceCallback(receivedDicom, origin): |
a56c4128c9a2
ReceivedInstanceCallback in Python: added origin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
814
diff
changeset
|
17 if origin == orthanc.InstanceOrigin.REST_API: |
a56c4128c9a2
ReceivedInstanceCallback in Python: added origin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
814
diff
changeset
|
18 orthanc.LogWarning('DICOM instance received from the REST API') |
a56c4128c9a2
ReceivedInstanceCallback in Python: added origin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
814
diff
changeset
|
19 elif origin == orthanc.InstanceOrigin.DICOM_PROTOCOL: |
a56c4128c9a2
ReceivedInstanceCallback in Python: added origin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
814
diff
changeset
|
20 orthanc.LogWarning('DICOM instance received from the DICOM protocol') |
a56c4128c9a2
ReceivedInstanceCallback in Python: added origin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
814
diff
changeset
|
21 |
799
ecf431e1bd44
python sample for ReceivedInstanceCallback
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
22 dataset = dcmread(BytesIO(receivedDicom)) |
ecf431e1bd44
python sample for ReceivedInstanceCallback
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
23 |
ecf431e1bd44
python sample for ReceivedInstanceCallback
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
24 if dataset.PatientID.startswith('001-'): |
814
b14dbbb8eda9
fix sample of ReceivedInstanceCallback for Python
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
799
diff
changeset
|
25 orthanc.LogWarning('Discard instance') |
819
a67ceccebf02
releasing Python plugin 4.0
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
816
diff
changeset
|
26 return orthanc.ReceivedInstanceAction.DISCARD, None |
799
ecf431e1bd44
python sample for ReceivedInstanceCallback
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
27 |
814
b14dbbb8eda9
fix sample of ReceivedInstanceCallback for Python
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
799
diff
changeset
|
28 elif dataset.PatientID.startswith('002-'): |
b14dbbb8eda9
fix sample of ReceivedInstanceCallback for Python
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
799
diff
changeset
|
29 orthanc.LogWarning('Store source instance as it is') |
819
a67ceccebf02
releasing Python plugin 4.0
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
816
diff
changeset
|
30 return orthanc.ReceivedInstanceAction.KEEP_AS_IS, None |
799
ecf431e1bd44
python sample for ReceivedInstanceCallback
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
31 |
814
b14dbbb8eda9
fix sample of ReceivedInstanceCallback for Python
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
799
diff
changeset
|
32 else: |
b14dbbb8eda9
fix sample of ReceivedInstanceCallback for Python
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
799
diff
changeset
|
33 orthanc.LogWarning('Modify the source instance') |
b14dbbb8eda9
fix sample of ReceivedInstanceCallback for Python
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
799
diff
changeset
|
34 dataset.PatientName = str(dataset.PatientName).upper() |
b14dbbb8eda9
fix sample of ReceivedInstanceCallback for Python
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
799
diff
changeset
|
35 dataset.PatientID = '002-' + dataset.PatientID |
b14dbbb8eda9
fix sample of ReceivedInstanceCallback for Python
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
799
diff
changeset
|
36 dataset.InstitutionName = "MY INSTITUTION" |
819
a67ceccebf02
releasing Python plugin 4.0
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
816
diff
changeset
|
37 return orthanc.ReceivedInstanceAction.MODIFY, write_dataset_to_bytes(dataset) |
799
ecf431e1bd44
python sample for ReceivedInstanceCallback
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
38 |
ecf431e1bd44
python sample for ReceivedInstanceCallback
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
39 orthanc.RegisterReceivedInstanceCallback(ReceivedInstanceCallback) |