Python client for the Philips IGT Cloud Datalake.
Includes both a Python interface and a CLI (Command line interface) to perform the most common tasks.
- Setup a Python 3 environment
- pip install git+https://github.com/philips-labs/igtcloud-client
- -OR- use the standalone CLI that doesn't require a Python installation
Usage: igtcloud [OPTIONS] COMMAND [ARGS]...
Philips Interventional Cloud CLI
Options:
--help Show this message and exit.
Commands:
csv List data from Philips Interventional Cloud in CSV file
download Download data from Philips Interventional Cloud
get-token Get token for Philips Interventional Cloud
login Login to Philips Interventional Cloud
upgrade Upgrade this tool to a new version
upload Upload data to Philips Interventional Cloud
version Print version of this tool
Use igtcloud [command] --help for more information about a command
The igtcloud login command is a special CLI command that will do the authentication with Philips Interventional Cloud.
This decouples the login flow from the real applications, which is particularly useful during development and testing.
It prevents that you have to type your password everytime.
This command will automatically refresh your token until you interrupt the process (Ctrl + c).
The download, upload and csv commands are compatible with the login command.
The get-token is available if you require an access token outside the IGT Cloud Client (CLI or Python).
A special option for the login command is to use a service identity.
This requires that you have a service_id and matching private_key
To use this service login you have to provide the private_key using the CLI:
igtcloud login -d <DOMAIN> -u <SERVICE_ID> -s <PRIVATE_KEY_FILENAME>
For convenience, you can discard the -u <SERVICE_ID>. Now the service_id will be the same as the private key filename without extension (e.g. igtcloud login -d <DOMAIN> -s service_x@institute.project.philips.com.pem will use service_x@institute.project.philips.com as SERVICE_ID and the content of the file as PRIVATE_KEY)
To create a service identity you can use the following python example code:
(this requires one of the following roles: DATA_MANAGER on the project or COORDINATOR or INVESTIGATOR on the institute. Next it requires a user specific role SERVICES_MANAGER)
from igtcloud.client.core.auth import smart_auth
from igtcloud.client.services import entities_service, set_auth
from igtcloud.client.services.entities.model.service import Service
from igtcloud.client.services.utils.key import save_private_key
domain = '<DOMAIN>'
institute_id = '<INSTITUTE_ID>'
service_name = '<SERVICE_NAME>'
with smart_auth(domain) as auth:
set_auth(auth)
service = entities_service.post_services(institute_id, Service(name=service_name))
save_private_key(service.private_key, f"{service.service_id}.pem")Note: Service identities can only be used for uploading data, not downloading.
local_folder
│
└─── files
│ │ file_1.txt
│ │ file_2.txt
│ │ ...
│ │
│ └─── subfolder1
│ │ file_3.txt
│ │ file_4.txt
| │ ...
│
└─── institute1
│
└─── patient1---study1
│ │ series_1.dcm
│ │ series_2.dcm
│ │ ...
│
└─── patient1---study2
│ │ series_1.dcm
│ │ series_2.dcm
│ │ ...
│
└─── patient2---study1
│ series_1.dcm
│ series_2.dcm
│ ...
local_folder
│
└─── files
│ │ file_1.txt
│ │ file_2.txt
│ │ ...
│ │
│ └─── subfolder1
│ │ file_3.txt
│ │ file_4.txt
| │ ...
│
└─── institute1
│
└─── patient1
│ │
│ └─── study1
│ │ │ series_1.dcm
│ │ │ series_2.dcm
│ │ │ ...
│ │
│ └─── study2
│ │ series_1.dcm
│ │ series_2.dcm
│ │ ...
│
└─── patient2
│ │
│ └─── study1
│ │ series_1.dcm
│ │ series_2.dcm
│ │ ...
Where local_folder is the specified LOCAL_FOLDER via the upload or download command.
Files under the local_folder/files directory will be uploaded/downloaded based on the passed PROJECT argument via the upload or download command.
Note: for the
downloadcommand, this will only work if the--project-filesoption is passed.
Folders under the institute-named folders (local_folder/<institute name>) will be uploaded directly to the institute as a study then the nested folders are uploaded as normal study-level folders.
Other folders/files under the local_folder directory will be ignored.
Institutes will be downloaded to the LOCAL_FOLDER argument and will create sub folders based on the institute name.
In flat file structure mode (default), all studies of each institute will be downloaded as flat subdirectories under each institute folder.
The folder name will be a combination of the patient and study identifiers.
In hierarchical file structure mode, all studies of each institute will be downloaded in a nested folder structure.
In the institute folder, the first level of directories will resemble the patients.
Each patient folder will contain nested folder for each study that belongs to this patient.
./code-gen.shcd src
python cli.pyThis project uses the CODE_OF_CONDUCT to define expected conduct in our community. Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting a project MAINTAINER
See CHANGELOG for more info on what's been changed.
See LICENSE