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
download
command, this will only work if the--project-files
option 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.sh
cd src
python cli.py
This 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