Metadata-Version: 2.1
Name: libica
Version: 1.0.0
Summary: Python SDK for Illumina Connected Analytics
Home-page: https://github.com/umccr-illumina/libica
Author: UMCCR and Contributors
Author-email: services@umccr.org
License: MIT
Platform: UNKNOWN
Requires-Python: >=3.6
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: requests
Requires-Dist: python-dateutil
Requires-Dist: six
Requires-Dist: urllib3
Requires-Dist: certifi
Provides-Extra: dev
Requires-Dist: pipdeptree ; extra == 'dev'
Requires-Dist: twine ; extra == 'dev'
Requires-Dist: setuptools ; extra == 'dev'
Requires-Dist: wheel ; extra == 'dev'
Requires-Dist: pdoc3 ; extra == 'dev'
Requires-Dist: mkdocs ; extra == 'dev'
Requires-Dist: mkdocs-material ; extra == 'dev'
Provides-Extra: test
Requires-Dist: pytest ; extra == 'test'
Requires-Dist: pytest-cov ; extra == 'test'
Requires-Dist: flake8 ; extra == 'test'
Requires-Dist: mockito ; extra == 'test'

# libica

Python SDK to programmatically call Illumina Connected Analytics (ICA) BioInformatics web services i.e. SDK for API https://ica-docs.readme.io/reference
- Workflow Execution Service (WES)
- Task Execution Service (TES)
- Genomic Data Store (GDS)
- Developer Console Service (DCS)
- Event Notification Service (ENS)

**Overview:**

- https://umccr-illumina.github.io/libica/
- Tested for Python 3.6, 3.7, 3.8, 3.9
- [Test Coverage](https://umccr-illumina.github.io/libica/coverage/)

## TL;DR

- Install through ``pip`` like so:
```commandline
pip install libica
```

- Export ICA base URL and JWT Bearer token:
```
export ICA_BASE_URL=<baseUrl>
export ICA_ACCESS_TOKEN=<tok>
```

- Generate Bearer JWT token using [ICA CLI](https://sapac.support.illumina.com/sequencing/sequencing_software/illumina-connected-analytics.html) like so:
```commandline
ica tokens create --help
```

- Somewhere in your Python code:
```python
import os
from libica.openapi import libwes
from libica.openapi.libwes import WorkflowList, WorkflowCompact

ica_base_url = os.getenv("ICA_BASE_URL")
ica_access_token = os.getenv("ICA_ACCESS_TOKEN")

configuration = libwes.Configuration(
    host=ica_base_url,
    api_key={
        'Authorization': ica_access_token
    },
    api_key_prefix={
        'Authorization': "Bearer"
    },
)

with libwes.ApiClient(configuration) as api_client:

    wfl_api: libwes.WorkflowsApi = libwes.WorkflowsApi(api_client)
    try:
        page_token = None
        while True:
            wfl_list: WorkflowList = wfl_api.list_workflows(page_size=100, page_token=page_token)
            # print(wfl_list)
            for item in wfl_list.items:
                wfl: WorkflowCompact = item
                print(wfl.id)
                print(wfl.name)
            page_token = wfl_list.next_page_token
            if not wfl_list.next_page_token:
                break
    except libwes.ApiException as e:
        print(e)
```

More examples available at:
- [libica.openapi documentation](https://umccr-illumina.github.io/libica/openapi/)
- [PyDoc](https://umccr-illumina.github.io/libica/libica/)
- [Wiki](https://github.com/umccr-illumina/libica/wiki)

## Development

- Setup virtual environment and activate it

- Install dependencies
```commandline
make install
```

- To bring up _mock_ API _μ_-services
```commandline
make up
```

- To run tests suites
```commandline
make unit
make autounit
```

- To run full suite, smoke test
```commandline
make test
```

### AutoGen Workflow

- SDK is autogenerated from respective endpoint OpenAPI (Swagger) definitions
- There are few key CLI tools for this autogen workflow to work.
    1. [openapi-generator-cli](https://github.com/OpenAPITools/openapi-generator-cli) -- used to generate code and doc
    2. [swagger-cli](https://github.com/APIDevTools/swagger-cli) -- validate definitions
    3. [prism-cli](https://github.com/stoplightio/prism) -- setup mock integration test
- These CLI tools are Node.js app, hence, required build tools `node`, `npm`, `npx` and `yarn` as follows.
```commandline
node -v
 v14.17.3
npm -i -g yarn
yarn install
npx openapi-generator-cli help
npx swagger-cli --help
npx prism --help
```
- However, `prism` mock server is set up through docker compose as follows.
```
make up
make test_ica_mock
docker-compose logs
docker-compose ps
docker ps
```
- All the autogen config and arrangement refer to [`syncapi.sh`](syncapi.sh) which is called through [`Makefile`](Makefile) targets.

## License

MIT License and DISCLAIMER

[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)


