Mercurial > hg > orthanc
diff OrthancServer/Resources/Samples/ImportDicomFiles/ImportDicomFiles.py @ 4044:d25f4c0fa160 framework
splitting code into OrthancFramework and OrthancServer
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Wed, 10 Jun 2020 20:30:34 +0200 |
parents | Resources/Samples/ImportDicomFiles/ImportDicomFiles.py@c81ac6ff232b |
children | d9473bd5ed43 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/OrthancServer/Resources/Samples/ImportDicomFiles/ImportDicomFiles.py Wed Jun 10 20:30:34 2020 +0200 @@ -0,0 +1,108 @@ +#!/usr/bin/env python + +# Orthanc - A Lightweight, RESTful DICOM Store +# Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics +# Department, University Hospital of Liege, Belgium +# Copyright (C) 2017-2020 Osimis S.A., 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 <http://www.gnu.org/licenses/>. + + +import os +import sys +import os.path +import httplib2 +import base64 + +if len(sys.argv) != 4 and len(sys.argv) != 6: + print(""" +Sample script to recursively import in Orthanc all the DICOM files +that are stored in some path. Please make sure that Orthanc is running +before starting this script. The files are uploaded through the REST +API. + +Usage: %s [hostname] [HTTP port] [path] +Usage: %s [hostname] [HTTP port] [path] [username] [password] +For instance: %s 127.0.0.1 8042 . +""" % (sys.argv[0], sys.argv[0], sys.argv[0])) + exit(-1) + +URL = 'http://%s:%d/instances' % (sys.argv[1], int(sys.argv[2])) + +success_count = 0 +total_file_count = 0 + + +# This function will upload a single file to Orthanc through the REST API +def UploadFile(path): + global success_count + global total_file_count + + f = open(path, "rb") + content = f.read() + f.close() + total_file_count += 1 + + try: + sys.stdout.write("Importing %s" % path) + + h = httplib2.Http() + + headers = { 'content-type' : 'application/dicom' } + + if len(sys.argv) == 6: + username = sys.argv[4] + password = sys.argv[5] + + # h.add_credentials(username, password) + + # This is a custom reimplementation of the + # "Http.add_credentials()" method for Basic HTTP Access + # Authentication (for some weird reason, this method does + # not always work) + # http://en.wikipedia.org/wiki/Basic_access_authentication + creds_str = username + ':' + password + creds_str_bytes = creds_str.encode("ascii") + creds_str_bytes_b64 = b'Basic ' + base64.b64encode(creds_str_bytes) + headers['authorization'] = creds_str_bytes_b64.decode("ascii") + + resp, content = h.request(URL, 'POST', + body = content, + headers = headers) + + if resp.status == 200: + sys.stdout.write(" => success\n") + success_count += 1 + else: + sys.stdout.write(" => failure (Is it a DICOM file? Is there a password?)\n") + + except: + type, value, traceback = sys.exc_info() + sys.stderr.write(str(value)) + sys.stdout.write(" => unable to connect (Is Orthanc running? Is there a password?)\n") + + +if os.path.isfile(sys.argv[3]): + # Upload a single file + UploadFile(sys.argv[3]) +else: + # Recursively upload a directory + for root, dirs, files in os.walk(sys.argv[3]): + for f in files: + UploadFile(os.path.join(root, f)) + +if success_count == total_file_count: + print("\nSummary: all %d DICOM file(s) have been imported successfully" % success_count) +else: + print("\nSummary: %d out of %d files have been imported successfully as DICOM instances" % (success_count, total_file_count))