annotate Sphinx/source/plugins/python/received-instance-callback.py @ 948:20a369cc2823

security: non privilege user
author Alain Mazy <am@osimis.io>
date Fri, 02 Jun 2023 15:21:48 +0200
parents a67ceccebf02
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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)