This release is a pre-release and may not be stable for production use.
Dicom Client V1
Build Status
(Currently Private Build Badges)
API Introduction
There are four core methods that make up DICOM-Client. An interface has been defined to simplify interaction with DicomClient(). The purpose of these methods is to upload, download, and delete DCM files from DICOM Server:
class DicomClientInterface(ABC):
@abstractmethod
def __init__(self, base_url, token_cache):
pass
@abstractmethod
def upload_dicom_folder(self, folder_name):
pass
@abstractmethod
def upload_dicom_file(self, file_name):
pass
@abstractmethod
def delete_dicom(self, study_id, series_id=None, instance_id=None):
pass
@abstractmethod
def download_dicom(self, output_folder, study_id, series_id=None, instance_id=None):
pass
@abstractmethod
def get_patient_study_ids(self, patient_id):
pass
To use:
$ pip install dicom_client
$ export AUTH_CONNECTION_INFO="{'authority': 'https://login.microsoftonline.com/72f988bf-86f1-41af-91ab-2d7cd011db47', 'client_id': '9cfb139d-d05d-4f5c-a10c-54e0ec338f53', 'client_secret': 'D.oD1q9SHc77syVRD-8vKi8UhbDXYoi~n~', 'oauth_resource': 'api://9cfb139d-d05d-4f5c-a10c-54e0ec338f53'}"
import ast
import os
from dicom_client import (
DicomClient,
TokenCache,
make_get_token_func,
)
base_url = "https://tonydicom.azurewebsites.net"
auth = ast.literal_eval(os.environ["AUTH_CONNECTION_INFO"])
token_cache = TokenCache(make_get_token_func(auth))
dicom_client = DicomClient(base_url, token_cache)
dicom_client.upload_dicom_folder("folder_name")
dicom_client.upload_dicom_file("file_name")
dicom_client.delete_dicom("study_id", "series_id", "instance_id")
dicom_client.download_dicom("output_folder", "study_id", "series_id", "instance_id")
dicom_client.get_patient_study_ids("patient_id")
This script can be used to validate your DICOM server deployment.
See Microsoft Dicom Server here: https://github.com/microsoft/dicom-server
For contributors:
Pre-reqs
- Provision a dicom server
- Get credentials for dicom server string values
- Export them as environment variables for your debugging environment.
Our .vscode/settings.json point to a .env file:
"python.envFile": "${workspaceFolder}/.vscode/dev.env",
Our dev.env file needs these values in this format:
AUTH_CONNECTION_INFO="{'authority': 'https://login.microsoftonline.com/72f988bf-86f1-41af-91ab-2d7cd011db47', 'client_id': '5bef631a-c4cd-4feb-aaf2-78ff5f7d7347', 'client_secret': 'REPLACE_WITH_YOUR_SECRET_mrpc.lgXK~C0.g146Gu3PcDG.W6Eg0d0I', 'oauth_resource': 'api://REPLACE_WITH_YOUR_RESOURCE_ID5bef631a-c4cd-4feb-aaf2-78ff5f7d7347'}"
Running Tests
Complete the pre-reqs and set the AUTH_CONNECTION_INFO environment variable, then:
$ git clone our_git_url
$ python3 -m venv .venv
$ pip install -r requirements.txt
$ pytest tests
Make sure you've followed the prerequisites for running the tests locally and validated your dicom server host and exported the correct credentials. See README.md for more details or raise an issue for DICOM server support.
Unit tests
To run most of the unit tests (optionally with code coverage reporting), simply run:
$ pytest tests/unit [--cov=handler --cov-report=html:htmlcov]
Please see conftest.py for more information on these test parameters as they can be found with environment variables instead of arguments for development environments.
Pylint
Pylint provides static code analysis for python and uses our ./.pylintrc file for managing the configuration of the linter. We run pylint in our integration tests to ensure python coding standards. See more info about pylint here.
To run pylint locally:
pylint handler --output-format=colorized --rcfile=".pylintrc"
Formatting with Black
Black is an auto-formatting tool and checker for python that provides further code analysis, it to is run in our integration tests and is helpful to run locally to maintain code clarity and conform to team standards. More info can be found here.
To run black locally:
black --check --line-length 100 .
black --line-length 100 .
Metadata
Release files for dicom-client-python 0.3.1.dev21831
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| dicom-client-python-0.3.1.dev21831.tar.gz | 18.7 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| dicom_client_python-0.3.1.dev21831-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 32.4 kB
Release files / dicom-client-python-0.3.1.dev21831.tar.gz
| Download URL | dicom-client-python-0.3.1.dev21831.tar.gz |
|---|---|
| Size | 18.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
8595bae81b95a62a7a63e97182325abc76237697bded71ae982c2fbe7217f33f
|
|
BLAKE2b-256 checksum How to use checksums |
ea60a546a30704a1ca1af43c6661741bd5805b5dcb4a655501213dd76004064c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/4.0.0 CPython/3.8.12
|
Release files / dicom_client_python-0.3.1.dev21831-py3-none-any.whl
| Download URL | dicom_client_python-0.3.1.dev21831-py3-none-any.whl |
|---|---|
| Size | 13.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
1a114013062911b6c409eb49ea0ae098e012f32b70cbe0837b2ded62ffdb5ea7
|
|
BLAKE2b-256 checksum How to use checksums |
5948c569c16ef8ff56fc50ab90c5f0fc15cff62addb58a81b675fa375e915ba6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/4.0.0 CPython/3.8.12
|
Security for dicom-client-python 0.3.1.dev21831
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.