annotate Sphinx/source/plugins/python/worklist.py @ 1093:ad86e352fce1

cont
author Sebastien Jodogne <s.jodogne@gmail.com>
date Fri, 12 Jul 2024 09:40:07 +0200
parents 1316bc62b5d5
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
700
56a06ca9ec20 Handling worklist SCP requests in Python
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1 import json
56a06ca9ec20 Handling worklist SCP requests in Python
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2 import orthanc
56a06ca9ec20 Handling worklist SCP requests in Python
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
3 import os
56a06ca9ec20 Handling worklist SCP requests in Python
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
4
56a06ca9ec20 Handling worklist SCP requests in Python
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
5 # Path to the directory containing the DICOM worklists
991
1316bc62b5d5 migration to UCLouvain servers
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 842
diff changeset
6 # https://orthanc.uclouvain.be/hg/orthanc/file/Orthanc-1.11.0/OrthancServer/Plugins/Samples/ModalityWorklists/WorklistsDatabase
700
56a06ca9ec20 Handling worklist SCP requests in Python
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
7 WORKLIST_DIR = '/tmp/WorklistsDatabase'
56a06ca9ec20 Handling worklist SCP requests in Python
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
8
56a06ca9ec20 Handling worklist SCP requests in Python
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
9 def OnWorklist(answers, query, issuerAet, calledAet):
56a06ca9ec20 Handling worklist SCP requests in Python
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
10 print('Received incoming C-FIND worklist request from %s:' % issuerAet)
56a06ca9ec20 Handling worklist SCP requests in Python
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
11
56a06ca9ec20 Handling worklist SCP requests in Python
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
12 # Get a memory buffer containing the DICOM instance
56a06ca9ec20 Handling worklist SCP requests in Python
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
13 dicom = query.WorklistGetDicomQuery()
56a06ca9ec20 Handling worklist SCP requests in Python
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
14
56a06ca9ec20 Handling worklist SCP requests in Python
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
15 # Get the DICOM tags in the JSON format from the binary buffer
56a06ca9ec20 Handling worklist SCP requests in Python
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
16 jsonTags = json.loads(orthanc.DicomBufferToJson(
56a06ca9ec20 Handling worklist SCP requests in Python
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
17 dicom, orthanc.DicomToJsonFormat.SHORT, orthanc.DicomToJsonFlags.NONE, 0))
56a06ca9ec20 Handling worklist SCP requests in Python
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
18
56a06ca9ec20 Handling worklist SCP requests in Python
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
19 orthanc.LogWarning('C-FIND worklist request to be handled in Python: %s' %
56a06ca9ec20 Handling worklist SCP requests in Python
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
20 json.dumps(jsonTags, indent = 4, sort_keys = True))
56a06ca9ec20 Handling worklist SCP requests in Python
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
21
56a06ca9ec20 Handling worklist SCP requests in Python
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
22 # Loop over the available DICOM worklists
56a06ca9ec20 Handling worklist SCP requests in Python
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
23 for path in os.listdir(WORKLIST_DIR):
56a06ca9ec20 Handling worklist SCP requests in Python
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
24 if os.path.splitext(path) [1] == '.wl':
56a06ca9ec20 Handling worklist SCP requests in Python
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
25 with open(os.path.join(WORKLIST_DIR, path), 'rb') as f:
56a06ca9ec20 Handling worklist SCP requests in Python
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
26 content = f.read()
56a06ca9ec20 Handling worklist SCP requests in Python
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
27
56a06ca9ec20 Handling worklist SCP requests in Python
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
28 # Test whether the query matches the current worklist
56a06ca9ec20 Handling worklist SCP requests in Python
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
29 if query.WorklistIsMatch(content):
56a06ca9ec20 Handling worklist SCP requests in Python
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
30 orthanc.LogWarning('Matching worklist: %s' % path)
56a06ca9ec20 Handling worklist SCP requests in Python
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
31 answers.WorklistAddAnswer(query, content)
56a06ca9ec20 Handling worklist SCP requests in Python
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
32
56a06ca9ec20 Handling worklist SCP requests in Python
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
33 orthanc.RegisterWorklistCallback(OnWorklist)