Metadata-Version: 2.1
Name: dicom-client-python
Version: 0.3.1.dev2850
Summary: A small dicom client in python
Home-page: https://github.com/microsoft/dicom-client-python
Author: Braveheart
Author-email: bterkaly@microsoft.com
License: UNKNOWN
Description: # Dicom Client V1
        
        [![PyPi Distribution](https://img.shields.io/pypi/v/dicom-client-python.svg)](https://pypi.python.org/pypi/dicom-client-python/)
        [![Python Versions](https://img.shields.io/pypi/pyversions/dicom-client-python.svg)](https://pypi.org/project/dicom-client-python/)
        
        ### Build Status 
        (*Currently Private Build Badges*)
        
        Main: [![Build Status](https://dev.azure.com/CSECodeHub/378940%20-%20PWC%20Health%20OSIC%20Platform%20-%20DICOM/_apis/build/status/dicom-client-python%20release%20pipeline?branchName=main)](https://dev.azure.com/CSECodeHub/378940%20-%20PWC%20Health%20OSIC%20Platform%20-%20DICOM/_build/latest?definitionId=36&branchName=main)
        
        Dev: [![Build Status](https://dev.azure.com/CSECodeHub/378940%20-%20PWC%20Health%20OSIC%20Platform%20-%20DICOM/_apis/build/status/dicom-client%20integration%20and%20dev%20release?branchName=main)](https://dev.azure.com/CSECodeHub/378940%20-%20PWC%20Health%20OSIC%20Platform%20-%20DICOM/_build/latest?definitionId=28&branchName=main)
        
        
        ## 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:
        
        ```python
        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'}"
        ```
        
        ```python
        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](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.](https://pypi.org/project/pylint/)
        
        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.](https://pypi.org/project/black/)
        
        To run black locally: 
        ```
        black --check --line-length 100 .
        black --line-length 100 .
        ```
Platform: UNKNOWN
Classifier: Programming Language :: Python :: 3
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Requires-Python: >=3.7
Description-Content-Type: text/markdown
