Mercurial > hg > orthanc-tests
annotate Plugins/Worklists/Run.py @ 734:70757a14b42e default tip
fix
author | Alain Mazy <am@orthanc.team> |
---|---|
date | Tue, 22 Oct 2024 09:57:49 +0200 |
parents | 5d7b6e43ab7d |
children |
rev | line source |
---|---|
609
a8e49d30f634
compatibility of Plugins/Worklists/Run.py with python 3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
536
diff
changeset
|
1 #!/usr/bin/python3 |
94
09afe3616660
Orthanc.test_encodings for worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
93
diff
changeset
|
2 # -*- coding: utf-8 -*- |
09afe3616660
Orthanc.test_encodings for worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
93
diff
changeset
|
3 |
90
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
4 |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
5 # Orthanc - A Lightweight, RESTful DICOM Store |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
6 # Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
7 # Department, University Hospital of Liege, Belgium |
649
5d7b6e43ab7d
updated copyright, as Orthanc Team now replaces Osimis
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
640
diff
changeset
|
8 # Copyright (C) 2017-2023 Osimis S.A., Belgium |
5d7b6e43ab7d
updated copyright, as Orthanc Team now replaces Osimis
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
640
diff
changeset
|
9 # Copyright (C) 2024-2024 Orthanc Team SRL, Belgium |
640
9f8276ac1cdd
update year to 2024
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
639
diff
changeset
|
10 # Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium |
90
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
11 # |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
12 # This program is free software: you can redistribute it and/or |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
13 # modify it under the terms of the GNU General Public License as |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
14 # published by the Free Software Foundation, either version 3 of the |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
15 # License, or (at your option) any later version. |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
16 # |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
17 # This program is distributed in the hope that it will be useful, but |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
18 # WITHOUT ANY WARRANTY; without even the implied warranty of |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
19 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
20 # General Public License for more details. |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
21 # |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
22 # You should have received a copy of the GNU General Public License |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
23 # along with this program. If not, see <http://www.gnu.org/licenses/>. |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
24 |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
25 |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
26 import argparse |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
27 import os |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
28 import pprint |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
29 import re |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
30 import subprocess |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
31 import sys |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
32 import tempfile |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
33 import unittest |
109
5b6812f8cc38
worklists: test_bitbucket_issue_49
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
108
diff
changeset
|
34 from shutil import copyfile |
90
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
35 |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
36 sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..', 'Tests')) |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
37 from Toolbox import * |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
38 |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
39 |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
40 ## |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
41 ## Parse the command-line arguments |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
42 ## |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
43 |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
44 parser = argparse.ArgumentParser(description = 'Run the integration tests for the DICOM worklist plugin.') |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
45 |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
46 parser.add_argument('--server', |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
47 default = 'localhost', |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
48 help = 'Address of the Orthanc server to test') |
94
09afe3616660
Orthanc.test_encodings for worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
93
diff
changeset
|
49 parser.add_argument('--rest', |
09afe3616660
Orthanc.test_encodings for worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
93
diff
changeset
|
50 type = int, |
09afe3616660
Orthanc.test_encodings for worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
93
diff
changeset
|
51 default = 8042, |
09afe3616660
Orthanc.test_encodings for worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
93
diff
changeset
|
52 help = 'Port to the REST API') |
09afe3616660
Orthanc.test_encodings for worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
93
diff
changeset
|
53 parser.add_argument('--username', |
09afe3616660
Orthanc.test_encodings for worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
93
diff
changeset
|
54 default = 'alice', |
09afe3616660
Orthanc.test_encodings for worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
93
diff
changeset
|
55 help = 'Username to the REST API') |
09afe3616660
Orthanc.test_encodings for worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
93
diff
changeset
|
56 parser.add_argument('--password', |
09afe3616660
Orthanc.test_encodings for worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
93
diff
changeset
|
57 default = 'orthanctest', |
09afe3616660
Orthanc.test_encodings for worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
93
diff
changeset
|
58 help = 'Password to the REST API') |
90
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
59 parser.add_argument('--dicom', |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
60 type = int, |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
61 default = 4242, |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
62 help = 'DICOM port of the Orthanc instance to test') |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
63 parser.add_argument('options', metavar = 'N', nargs = '*', |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
64 help='Arguments to Python unittest') |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
65 |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
66 args = parser.parse_args() |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
67 |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
68 |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
69 |
94
09afe3616660
Orthanc.test_encodings for worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
93
diff
changeset
|
70 ORTHANC = DefineOrthanc(server = args.server, |
09afe3616660
Orthanc.test_encodings for worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
93
diff
changeset
|
71 username = args.username, |
09afe3616660
Orthanc.test_encodings for worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
93
diff
changeset
|
72 password = args.password, |
09afe3616660
Orthanc.test_encodings for worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
93
diff
changeset
|
73 restPort = args.rest) |
09afe3616660
Orthanc.test_encodings for worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
93
diff
changeset
|
74 |
09afe3616660
Orthanc.test_encodings for worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
93
diff
changeset
|
75 |
09afe3616660
Orthanc.test_encodings for worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
93
diff
changeset
|
76 |
90
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
77 ## |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
78 ## Toolbox |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
79 ## |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
80 |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
81 DATABASE = os.path.abspath(os.path.normpath(os.path.join(os.path.dirname(__file__), '..', '..', 'Database', 'Worklists'))) |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
82 WORKING = os.path.join(DATABASE, 'Working') |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
83 |
108 | 84 print('Database directory: %s' % DATABASE) |
85 print('Working directory: %s' % WORKING) | |
86 | |
90
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
87 try: |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
88 os.mkdir(WORKING) |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
89 except Exception as e: |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
90 # The working folder has already been created |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
91 pass |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
92 |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
93 def ClearDatabase(): |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
94 for f in os.listdir(WORKING): |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
95 if f != 'lockfile': |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
96 os.remove(os.path.join(WORKING, f)) |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
97 |
109
5b6812f8cc38
worklists: test_bitbucket_issue_49
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
108
diff
changeset
|
98 def AddToDatabase(worklist): |
5b6812f8cc38
worklists: test_bitbucket_issue_49
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
108
diff
changeset
|
99 extension = os.path.splitext(worklist)[1].lower() |
5b6812f8cc38
worklists: test_bitbucket_issue_49
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
108
diff
changeset
|
100 source = os.path.join(DATABASE, worklist) |
5b6812f8cc38
worklists: test_bitbucket_issue_49
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
108
diff
changeset
|
101 target = os.path.join(WORKING, os.path.basename(worklist) + '.wl') |
5b6812f8cc38
worklists: test_bitbucket_issue_49
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
108
diff
changeset
|
102 |
5b6812f8cc38
worklists: test_bitbucket_issue_49
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
108
diff
changeset
|
103 if extension == '.dump': |
5b6812f8cc38
worklists: test_bitbucket_issue_49
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
108
diff
changeset
|
104 subprocess.check_call([ 'dump2dcm', '--write-xfer-little', source, target ]) |
5b6812f8cc38
worklists: test_bitbucket_issue_49
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
108
diff
changeset
|
105 else: |
5b6812f8cc38
worklists: test_bitbucket_issue_49
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
108
diff
changeset
|
106 copyfile(source, target) |
5b6812f8cc38
worklists: test_bitbucket_issue_49
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
108
diff
changeset
|
107 |
90
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
108 |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
109 def RunQuery(source, ignoreTags): |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
110 with tempfile.NamedTemporaryFile() as f: |
93
fff2b4a24b5f
test of sequences in worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
91
diff
changeset
|
111 subprocess.check_call([ 'dump2dcm', '--write-xfer-little', |
90
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
112 os.path.join(DATABASE, source), f.name ]) |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
113 |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
114 a = subprocess.check_output([ 'findscu', '-v', '--call', 'ORTHANC', '-aet', 'ORTHANCTEST', |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
115 args.server, str(args.dicom), f.name ], |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
116 stderr = subprocess.STDOUT).splitlines() |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
117 |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
118 answers = [] |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
119 current = [] |
108 | 120 isQuery = True |
90
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
121 |
635
88539de02bcc
clarifying worklists test
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
612
diff
changeset
|
122 for line in a: |
88539de02bcc
clarifying worklists test
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
612
diff
changeset
|
123 as_ascii = line.decode('ascii', errors='ignore') |
108 | 124 |
635
88539de02bcc
clarifying worklists test
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
612
diff
changeset
|
125 if as_ascii.startswith('E:'): |
88539de02bcc
clarifying worklists test
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
612
diff
changeset
|
126 raise Exception('Error while running findscu') |
88539de02bcc
clarifying worklists test
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
612
diff
changeset
|
127 |
88539de02bcc
clarifying worklists test
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
612
diff
changeset
|
128 if (as_ascii.startswith('I: ---') or |
88539de02bcc
clarifying worklists test
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
612
diff
changeset
|
129 as_ascii.startswith('W: ---')): |
108 | 130 if isQuery: |
131 isQuery = False | |
132 else: | |
133 # This is a separator between DICOM datasets | |
134 if len(current) > 0: | |
135 answers.append(current) | |
136 current = [] | |
90
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
137 |
635
88539de02bcc
clarifying worklists test
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
612
diff
changeset
|
138 elif (as_ascii.startswith('I: (') or |
88539de02bcc
clarifying worklists test
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
612
diff
changeset
|
139 as_ascii.startswith('W: (')): |
88539de02bcc
clarifying worklists test
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
612
diff
changeset
|
140 |
88539de02bcc
clarifying worklists test
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
612
diff
changeset
|
141 # This is a tag |
108 | 142 if not isQuery: |
635
88539de02bcc
clarifying worklists test
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
612
diff
changeset
|
143 tag = as_ascii[4:13].lower() |
108 | 144 if not tag in ignoreTags: |
635
88539de02bcc
clarifying worklists test
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
612
diff
changeset
|
145 line_without_comment = re.sub(b'\s*#.*', b'', line) |
88539de02bcc
clarifying worklists test
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
612
diff
changeset
|
146 line_without_comment = line_without_comment.replace(b'\0', b'') |
637 | 147 current.append(line_without_comment[3:]) |
90
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
148 |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
149 if len(current) > 0: |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
150 answers.append(current) |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
151 |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
152 return answers |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
153 |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
154 def CompareAnswers(expected, actual): |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
155 if len(expected) != len(actual): |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
156 return False |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
157 |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
158 if len(expected) == 0: |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
159 return True |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
160 |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
161 for i in range(len(expected)): |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
162 for j in range(len(actual)): |
637 | 163 decoded = list(map(lambda x: x.decode('utf-8'), actual[j])) |
164 | |
165 if expected[i] == decoded: | |
90
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
166 return True |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
167 |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
168 return False |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
169 |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
170 |
94
09afe3616660
Orthanc.test_encodings for worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
93
diff
changeset
|
171 def ParseTopLevelTags(answer): |
09afe3616660
Orthanc.test_encodings for worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
93
diff
changeset
|
172 tags = {} |
09afe3616660
Orthanc.test_encodings for worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
93
diff
changeset
|
173 for line in answer: |
635
88539de02bcc
clarifying worklists test
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
612
diff
changeset
|
174 as_ascii = line.decode('ascii', errors='ignore') |
638
1e76331675a1
test of worklists now working with Python 3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
637
diff
changeset
|
175 tag = as_ascii[1:10] |
635
88539de02bcc
clarifying worklists test
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
612
diff
changeset
|
176 start = line.find(b'[') |
88539de02bcc
clarifying worklists test
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
612
diff
changeset
|
177 end = line.rfind(b']') |
88539de02bcc
clarifying worklists test
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
612
diff
changeset
|
178 |
88539de02bcc
clarifying worklists test
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
612
diff
changeset
|
179 tags[tag] = line[start + 1 : end].strip() |
94
09afe3616660
Orthanc.test_encodings for worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
93
diff
changeset
|
180 |
09afe3616660
Orthanc.test_encodings for worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
93
diff
changeset
|
181 return tags |
09afe3616660
Orthanc.test_encodings for worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
93
diff
changeset
|
182 |
09afe3616660
Orthanc.test_encodings for worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
93
diff
changeset
|
183 |
90
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
184 ## |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
185 ## The tests |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
186 ## |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
187 |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
188 class Orthanc(unittest.TestCase): |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
189 def setUp(self): |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
190 if (sys.version_info >= (3, 0)): |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
191 # Remove annoying warnings about unclosed socket in Python 3 |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
192 import warnings |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
193 warnings.simplefilter("ignore", ResourceWarning) |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
194 |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
195 ClearDatabase() |
174 | 196 DoPost(ORTHANC, '/tools/execute-script', 'function IncomingWorklistRequestFilter(query, origin) return query end', 'application/lua') |
90
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
197 |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
198 |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
199 def test_single(self): |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
200 for db in range(1, 11): |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
201 ClearDatabase() |
91 | 202 AddToDatabase('Dcmtk/Database/wklist%d.dump' % db) |
90
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
203 |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
204 for query in range(0, 13): |
91 | 205 answers = RunQuery('Dcmtk/Queries/wlistqry%d.dump' % query, [ |
90
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
206 '0008,0005', |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
207 '0040,0004', |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
208 '0040,0005', |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
209 '0040,0020', |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
210 ]) |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
211 |
91 | 212 with open(os.path.join('%s/Dcmtk/Expected/single-%d-%d.json' % (DATABASE, db, query)), 'r') as f: |
90
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
213 expected = json.loads(f.read()) |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
214 self.assertTrue(CompareAnswers(expected, answers)) |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
215 |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
216 |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
217 def test_all(self): |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
218 ClearDatabase() |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
219 |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
220 for db in range(1, 11): |
91 | 221 AddToDatabase('Dcmtk/Database/wklist%d.dump' % db) |
90
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
222 |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
223 for query in range(0, 13): |
91 | 224 answers = RunQuery('Dcmtk/Queries/wlistqry%d.dump' % query, [ |
90
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
225 '0008,0005', |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
226 '0040,0004', |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
227 '0040,0005', |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
228 '0040,0020', |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
229 ]) |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
230 |
91 | 231 with open(os.path.join('%s/Dcmtk/Expected/all-%d.json' % (DATABASE, query)), 'r') as f: |
90
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
232 expected = json.loads(f.read()) |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
233 self.assertTrue(CompareAnswers(expected, answers)) |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
234 |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
235 |
93
fff2b4a24b5f
test of sequences in worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
91
diff
changeset
|
236 def test_vet(self): |
fff2b4a24b5f
test of sequences in worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
91
diff
changeset
|
237 AddToDatabase('Sequences/STATION_AET/orig.7705.dump') |
fff2b4a24b5f
test of sequences in worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
91
diff
changeset
|
238 AddToDatabase('Sequences/STATION_AET/orig.7814.dump') |
fff2b4a24b5f
test of sequences in worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
91
diff
changeset
|
239 AddToDatabase('Sequences/STATION_AET/orig.7814.without.seq.dump') |
fff2b4a24b5f
test of sequences in worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
91
diff
changeset
|
240 |
fff2b4a24b5f
test of sequences in worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
91
diff
changeset
|
241 self.assertEqual(2, len(RunQuery('Sequences/Queries/7814.without.length.dump', []))) |
fff2b4a24b5f
test of sequences in worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
91
diff
changeset
|
242 self.assertEqual(2, len(RunQuery('Sequences/Queries/7814.without.seq.dump', []))) |
fff2b4a24b5f
test of sequences in worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
91
diff
changeset
|
243 self.assertEqual(2, len(RunQuery('Sequences/Queries/orig.7814.dump', []))) |
97 | 244 |
536
6546ca088276
new tests for private creator in worklists
Alain Mazy <am@osimis.io>
parents:
511
diff
changeset
|
245 def test_private_creator(self): |
6546ca088276
new tests for private creator in worklists
Alain Mazy <am@osimis.io>
parents:
511
diff
changeset
|
246 AddToDatabase('private-creator-wl.dump') |
6546ca088276
new tests for private creator in worklists
Alain Mazy <am@osimis.io>
parents:
511
diff
changeset
|
247 |
6546ca088276
new tests for private creator in worklists
Alain Mazy <am@osimis.io>
parents:
511
diff
changeset
|
248 self.assertEqual(1, len(RunQuery('private-creator-query.dump', []))) |
6546ca088276
new tests for private creator in worklists
Alain Mazy <am@osimis.io>
parents:
511
diff
changeset
|
249 |
97 | 250 |
98 | 251 @unittest.skip("This test requires to enable option 'FilterIssuerAet' in the sample worklist plugin") |
252 def test_filter_issuer_aet(self): | |
97 | 253 AddToDatabase('Sequences/STATION_AET/orig.7814.dump') |
98 | 254 AddToDatabase('Sequences/STATION_AET/orig.7814.other.station.dump') |
97 | 255 |
98 | 256 self.assertEqual(1, len(RunQuery('Sequences/Queries/7814.without.station.aet.dump', []))) |
93
fff2b4a24b5f
test of sequences in worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
91
diff
changeset
|
257 |
174 | 258 def test_filter_issuer_aet_from_lua(self): |
259 AddToDatabase('Sequences/STATION_AET/orig.7814.dump') # targeted at STATION_AET | |
260 AddToDatabase('Sequences/STATION_AET/orig.7814.other.station.dump') # targeted at ORTHANC_TEST | |
261 | |
262 self.assertEqual(2, len(RunQuery('Sequences/Queries/7814.without.station.aet.dump', []))) # query is not targeting any station -> match all | |
263 InstallLuaScript(ORTHANC, "\ | |
264 function IncomingWorklistRequestFilter(query, origin)\ | |
265 query['0040,0100'][1]['0040,0001'] = origin['RemoteAet']\ | |
266 return query\ | |
267 end"); | |
268 | |
269 self.assertEqual(1, len(RunQuery('Sequences/Queries/7814.without.station.aet.dump', []))) # now, query is targeting ORTHANCTEST -> match one | |
270 | |
271 | |
272 def test_remove_aet_from_query(self): | |
273 AddToDatabase('Sequences/NO_STATION_AET/orig.7814.other.station.dump') # targeted at ORTHANCTEST | |
274 | |
275 self.assertEqual(0, len(RunQuery('Sequences/Queries/orig.7814.dump', []))) # query is targeting STATION_AET -> will not match | |
276 InstallLuaScript(ORTHANC, "\ | |
277 function IncomingWorklistRequestFilter(query, origin)\ | |
278 query['0040,0100'][1]['0040,0001'] = nil\ | |
279 return query\ | |
280 end"); | |
281 self.assertEqual(1, len(RunQuery('Sequences/Queries/orig.7814.dump', []))) # query is targeting STATION_AET but, since we have removed this field, we should get 2 queries | |
93
fff2b4a24b5f
test of sequences in worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
91
diff
changeset
|
282 |
94
09afe3616660
Orthanc.test_encodings for worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
93
diff
changeset
|
283 def test_encodings(self): |
09afe3616660
Orthanc.test_encodings for worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
93
diff
changeset
|
284 # Check out ../../Database/Worklists/Encodings/database.dump |
09afe3616660
Orthanc.test_encodings for worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
93
diff
changeset
|
285 TEST = u'Test-éüäöòДΘĝדصķћ๛ネİ' |
09afe3616660
Orthanc.test_encodings for worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
93
diff
changeset
|
286 ENCODINGS = { |
09afe3616660
Orthanc.test_encodings for worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
93
diff
changeset
|
287 'Arabic' : [ 'ISO_IR 127' ], |
09afe3616660
Orthanc.test_encodings for worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
93
diff
changeset
|
288 'Ascii' : [ 'ISO_IR 6' ], # More accurately, ISO 646 |
09afe3616660
Orthanc.test_encodings for worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
93
diff
changeset
|
289 'Cyrillic' : [ 'ISO_IR 144' ], |
09afe3616660
Orthanc.test_encodings for worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
93
diff
changeset
|
290 'Greek' : [ 'ISO_IR 126' ], |
09afe3616660
Orthanc.test_encodings for worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
93
diff
changeset
|
291 'Hebrew' : [ 'ISO_IR 138' ], |
09afe3616660
Orthanc.test_encodings for worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
93
diff
changeset
|
292 'Japanese' : [ 'ISO_IR 13', 'shift-jis' ], |
09afe3616660
Orthanc.test_encodings for worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
93
diff
changeset
|
293 'Latin1' : [ 'ISO_IR 100' ], |
09afe3616660
Orthanc.test_encodings for worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
93
diff
changeset
|
294 'Latin2' : [ 'ISO_IR 101' ], |
09afe3616660
Orthanc.test_encodings for worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
93
diff
changeset
|
295 'Latin3' : [ 'ISO_IR 109' ], |
09afe3616660
Orthanc.test_encodings for worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
93
diff
changeset
|
296 'Latin4' : [ 'ISO_IR 110' ], |
09afe3616660
Orthanc.test_encodings for worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
93
diff
changeset
|
297 'Latin5' : [ 'ISO_IR 148' ], |
09afe3616660
Orthanc.test_encodings for worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
93
diff
changeset
|
298 'Thai' : [ 'ISO_IR 166', 'tis-620' ], |
09afe3616660
Orthanc.test_encodings for worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
93
diff
changeset
|
299 'Utf8' : [ 'ISO_IR 192' ], |
09afe3616660
Orthanc.test_encodings for worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
93
diff
changeset
|
300 } |
09afe3616660
Orthanc.test_encodings for worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
93
diff
changeset
|
301 |
09afe3616660
Orthanc.test_encodings for worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
93
diff
changeset
|
302 AddToDatabase('Encodings/database.dump') |
09afe3616660
Orthanc.test_encodings for worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
93
diff
changeset
|
303 |
609
a8e49d30f634
compatibility of Plugins/Worklists/Run.py with python 3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
536
diff
changeset
|
304 for (name, encoding) in ENCODINGS.items(): |
94
09afe3616660
Orthanc.test_encodings for worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
93
diff
changeset
|
305 self.assertEqual(name, DoPut(ORTHANC, '/tools/default-encoding', name)) |
09afe3616660
Orthanc.test_encodings for worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
93
diff
changeset
|
306 result = RunQuery('Encodings/query.dump', []) |
09afe3616660
Orthanc.test_encodings for worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
93
diff
changeset
|
307 |
09afe3616660
Orthanc.test_encodings for worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
93
diff
changeset
|
308 self.assertEqual(1, len(result)) |
09afe3616660
Orthanc.test_encodings for worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
93
diff
changeset
|
309 self.assertEqual(2, len(result[0])) |
09afe3616660
Orthanc.test_encodings for worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
93
diff
changeset
|
310 tags = ParseTopLevelTags(result[0]) |
09afe3616660
Orthanc.test_encodings for worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
93
diff
changeset
|
311 |
09afe3616660
Orthanc.test_encodings for worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
93
diff
changeset
|
312 if len(encoding) == 1: |
09afe3616660
Orthanc.test_encodings for worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
93
diff
changeset
|
313 encoded = TEST.encode(name, 'ignore') |
09afe3616660
Orthanc.test_encodings for worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
93
diff
changeset
|
314 else: |
09afe3616660
Orthanc.test_encodings for worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
93
diff
changeset
|
315 encoded = TEST.encode(encoding[1], 'ignore') |
09afe3616660
Orthanc.test_encodings for worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
93
diff
changeset
|
316 |
638
1e76331675a1
test of worklists now working with Python 3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
637
diff
changeset
|
317 self.assertEqual(encoding[0], tags['0008,0005'].decode('ascii')) |
94
09afe3616660
Orthanc.test_encodings for worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
93
diff
changeset
|
318 self.assertEqual(encoded, tags['0010,0010']) |
09afe3616660
Orthanc.test_encodings for worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
93
diff
changeset
|
319 |
09afe3616660
Orthanc.test_encodings for worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
93
diff
changeset
|
320 |
109
5b6812f8cc38
worklists: test_bitbucket_issue_49
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
108
diff
changeset
|
321 def test_bitbucket_issue_49(self): |
638
1e76331675a1
test of worklists now working with Python 3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
637
diff
changeset
|
322 def Check(pythonEncoding, orthancEncoding, expectedEncoding, expectedContent): |
1e76331675a1
test of worklists now working with Python 3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
637
diff
changeset
|
323 DoPut(ORTHANC, '/tools/default-encoding', orthancEncoding) |
109
5b6812f8cc38
worklists: test_bitbucket_issue_49
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
108
diff
changeset
|
324 result = RunQuery('Encodings/issue49-latin1.query', []) |
5b6812f8cc38
worklists: test_bitbucket_issue_49
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
108
diff
changeset
|
325 self.assertEqual(1, len(result)) |
5b6812f8cc38
worklists: test_bitbucket_issue_49
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
108
diff
changeset
|
326 self.assertEqual(2, len(result[0])) |
5b6812f8cc38
worklists: test_bitbucket_issue_49
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
108
diff
changeset
|
327 tags = ParseTopLevelTags(result[0]) |
638
1e76331675a1
test of worklists now working with Python 3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
637
diff
changeset
|
328 self.assertEqual(expectedEncoding, tags['0008,0005'].decode('ascii')) |
639
d5e355d9797c
test of worklists now working with Python 2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
638
diff
changeset
|
329 if sys.version_info >= (3, 0): |
d5e355d9797c
test of worklists now working with Python 2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
638
diff
changeset
|
330 self.assertEqual(expectedContent, tags['0010,0010'].decode(pythonEncoding)) |
d5e355d9797c
test of worklists now working with Python 2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
638
diff
changeset
|
331 else: |
d5e355d9797c
test of worklists now working with Python 2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
638
diff
changeset
|
332 self.assertEqual(expectedContent.decode('utf-8'), tags['0010,0010'].decode(pythonEncoding)) |
94
09afe3616660
Orthanc.test_encodings for worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
93
diff
changeset
|
333 |
109
5b6812f8cc38
worklists: test_bitbucket_issue_49
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
108
diff
changeset
|
334 AddToDatabase('Encodings/issue49-latin1.wl') |
639
d5e355d9797c
test of worklists now working with Python 2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
638
diff
changeset
|
335 Check('ascii', 'Ascii', 'ISO_IR 6', 'VANILL^LAURA^^^Mme') |
d5e355d9797c
test of worklists now working with Python 2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
638
diff
changeset
|
336 Check('utf-8', 'Utf8', 'ISO_IR 192', 'VANILLÉ^LAURA^^^Mme') |
d5e355d9797c
test of worklists now working with Python 2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
638
diff
changeset
|
337 Check('latin-1', 'Latin1', 'ISO_IR 100', 'VANILLÉ^LAURA^^^Mme') |
422
91170313187c
worklists: test_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
338 |
91170313187c
worklists: test_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
339 |
91170313187c
worklists: test_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
340 def test_format(self): |
91170313187c
worklists: test_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
341 DoPut(ORTHANC, '/tools/default-encoding', 'Latin1') |
91170313187c
worklists: test_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
342 AddToDatabase('Dcmtk/Database/wklist1.dump') |
91170313187c
worklists: test_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
343 |
91170313187c
worklists: test_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
344 # Only behavior of Orthanc <= 1.9.4 |
91170313187c
worklists: test_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
345 a = DoPost(ORTHANC, '/modalities/self/find-worklist', { |
91170313187c
worklists: test_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
346 'PatientID' : '' |
91170313187c
worklists: test_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
347 }) |
91170313187c
worklists: test_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
348 self.assertEqual(1, len(a)) |
91170313187c
worklists: test_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
349 self.assertEqual(2, len(a[0])) |
91170313187c
worklists: test_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
350 self.assertEqual('AV35674', a[0]['PatientID']) |
91170313187c
worklists: test_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
351 self.assertEqual('ISO_IR 100', a[0]['SpecificCharacterSet']) |
91170313187c
worklists: test_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
352 |
91170313187c
worklists: test_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
353 a = DoPost(ORTHANC, '/modalities/self/find-worklist', { |
91170313187c
worklists: test_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
354 'Query' : { |
91170313187c
worklists: test_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
355 'PatientID' : '' |
91170313187c
worklists: test_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
356 } |
91170313187c
worklists: test_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
357 }) |
91170313187c
worklists: test_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
358 self.assertEqual(1, len(a)) |
91170313187c
worklists: test_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
359 self.assertEqual(2, len(a[0])) |
91170313187c
worklists: test_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
360 self.assertEqual('AV35674', a[0]['PatientID']) |
91170313187c
worklists: test_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
361 self.assertEqual('ISO_IR 100', a[0]['SpecificCharacterSet']) |
91170313187c
worklists: test_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
362 |
91170313187c
worklists: test_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
363 a = DoPost(ORTHANC, '/modalities/self/find-worklist', { |
91170313187c
worklists: test_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
364 'Query' : { |
91170313187c
worklists: test_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
365 'PatientID' : '' |
91170313187c
worklists: test_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
366 }, |
91170313187c
worklists: test_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
367 'Short' : True |
91170313187c
worklists: test_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
368 }) |
91170313187c
worklists: test_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
369 self.assertEqual(1, len(a)) |
91170313187c
worklists: test_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
370 self.assertEqual(2, len(a[0])) |
91170313187c
worklists: test_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
371 self.assertEqual('AV35674', a[0]['0010,0020']) |
91170313187c
worklists: test_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
372 self.assertEqual('ISO_IR 100', a[0]['0008,0005']) |
91170313187c
worklists: test_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
373 |
91170313187c
worklists: test_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
374 a = DoPost(ORTHANC, '/modalities/self/find-worklist', { |
91170313187c
worklists: test_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
375 'Query' : { |
91170313187c
worklists: test_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
376 'PatientID' : '' |
91170313187c
worklists: test_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
377 }, |
91170313187c
worklists: test_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
378 'Full' : True |
91170313187c
worklists: test_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
379 }) |
91170313187c
worklists: test_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
380 self.assertEqual(1, len(a)) |
91170313187c
worklists: test_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
381 self.assertEqual(2, len(a[0])) |
91170313187c
worklists: test_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
382 self.assertEqual('AV35674', a[0]['0010,0020']['Value']) |
91170313187c
worklists: test_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
383 self.assertEqual('PatientID', a[0]['0010,0020']['Name']) |
91170313187c
worklists: test_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
384 self.assertEqual('ISO_IR 100', a[0]['0008,0005']['Value']) |
91170313187c
worklists: test_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
385 self.assertEqual('SpecificCharacterSet', a[0]['0008,0005']['Name']) |
91170313187c
worklists: test_format
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
363
diff
changeset
|
386 |
109
5b6812f8cc38
worklists: test_bitbucket_issue_49
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
108
diff
changeset
|
387 |
90
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
388 try: |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
389 print('\nStarting the tests...') |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
390 unittest.main(argv = [ sys.argv[0] ] + args.options) |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
391 |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
392 finally: |
afbac3eb28a5
integration tests of worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
393 print('\nDone') |