sjoerdk/dicomtrolley

View on GitHub
examples/use_wado_only.py

Summary

Maintainability
A
0 mins
Test Coverage
"""Using WADO download without any search, using UIDs directly

This example read the following variables from system environment:
USER           # user to log in with
PASSWORD       # user password
REALM          # Needed for Vitrea login
LOGIN_URL      # full url to login page, including https:// and port
WADO_URL       # full url to WADO-URI endpoint, without trailing slash
DOWNLOAD_PATH  # Path to download to

"""
from os import environ

from dicomtrolley.auth import create_session
from dicomtrolley.core import InstanceReference
from dicomtrolley.wado_uri import WadoURI


def use_wado_only():
    # Create auto-login session
    session = create_session(
        environ["LOGIN_URL"],
        environ["USER"],
        environ["PASSWORD"],
        environ["REALM"],
    )

    wado = WadoURI(session, environ["WADO_URL"])

    # Study, Series and Instance UIDs are already known. dicomtrolley uses
    # InstanceReference to represent a WADO-downloadable slice
    instance1 = InstanceReference(
        series_uid="1.2.840.113619.2.239.1783.1568025913.0.105",
        study_uid="1.2.840.114350.2.357.3.798268.2.126847153.1",
        instance_uid="1.2.840.113619.2.239.1783.1568025913.0.113",
    )

    instance2 = InstanceReference(
        series_uid="1.2.840.113619.2.239.1783.1568025913.0.76",
        instance_uid="1.2.840.113619.2.239.1783.1568025913.0.77.64",
        study_uid="1.2.840.114350.2.357.3.798268.2.126847153.1",
    )

    # InstanceReference can be fed to wado download methods
    instances = [instance1, instance2]
    print(
        f'Downloading {len(instances)} instances to {environ["DOWNLOAD_PATH"]}'
    )
    for ds in wado.datasets(instances):
        ds.save_as(f'{environ["DOWNLOAD_PATH"]}/{ds.SOPInstanceUID}')

    print("Done")


if __name__ == "__main__":
    use_wado_only()