# ArmoniK.Api Python package
This folder contains the necessary scripts to generate the ArmoniK.Api Python package. Please note that while the package generation is platform dependent, the generated package *should* be compatible with Linux and Windows.
## Install the Python Package from PyPI
At each release, we provide a prepackaged version of ArmoniK.Api available on PyPI here : [https://pypi.org/project/armonik](https://pypi.org/project/armonik).
To install the package to your current Python environment, you can use pip :
```
pip install armonik
```
## Linux / [WSL](https://learn.microsoft.com/en-us/windows/wsl/)
### **How to generate**
Requirements :
- Python >= 3.7
- Python3-venv
- Pip3
- Bash
If the python command doesn't link to python3 on your system, you may be able to install the package python-is-python3, which links python to python3.
To generate the package from sources, run the [proto2python.sh](proto2python.sh) script from its folder. You need to specify a directory where the virtual environment used for the build will be located. For example the following command will generate the packages and will create the build environment "pyvenv" in the current user's home directory:
```bash
./proto2python.sh ~/pyvenv
```
3 folders will be created :
- generated : contains the source files used to create the package
- build : contains the source files used to create the wheel package
- pkg : contains the sdist and wheel packages
Instead of running the script you can install the armonik package in "editable" mode, allowing you to make changes to the source code, and the changes will be reflected immediately without reinstalling the package.
```bash
pip install -e ./packages/python
```
### **How to install the generated package**
From this directory, use the following command:
```code
pip install pkg/armonik*.whl
```
The generated package will be installed to your current python environment
## Windows
Coming soon
## Tests
### **Test Environment Setup**
Before running tests, ensure the following setup steps are completed:
1. Install Dependencies:
```bash
sudo apt install dotnet-sdk-6.0 jq
```
2. Launch the Mock Server:
Verify that port 5000 is available (Armonik and the mock server communicate on the same port, uninstall armonik if necessary):
```bash
lsof -i :5000
```
3. Launch the server from the project's root directory in a separate terminal:
```bash
cd packages/csharp/ArmoniK.Api.Mock
dotnet run
```
### **Test Environment Summary**
The test environment utilizes a mock endpoint to assert if the ArmoniK service has been triggered. It leverages the requests library to query the /calls.json endpoint, examining the JSON response to validate the count of remote procedure calls made to specific services and methods
```bash
curl localhost:5000/calls.json | jq
```
In prevision of the API test, run the following command:
```bash
curl localhost:5000/calls.json | jq '.Tasks'
```
You should have as output:
```json
{
"GetTask": 0,
"ListTasks": 0,
"GetResultIds": 0,
"CancelTasks": 0,
"CountTasksByStatus": 0,
"ListTasksDetailed": 0,
"SubmitTasks": 0
}
```
### Configure gRPC channel and test API calls
Once the endpoint runs, you can initiate a gRPC channel to it with a Python client.
Below is an example using a Tasks client and calling the `list_tasks` method:
```python
import grpc
import armonik.client
with grpc.insecure_channel("localhost:5001") as channel:
tasks_client = ArmoniKTasks(channel)
tasks.client.list_tasks()
```
Port `5001` is actually ArmoniK's control-plane endpoint.
For the sake of simplicity, the example gRPC channel here is an insecure one. **You should never do that in production environment.**
### **Check if API call was successful**
Execute the Python code snippet above and re-run command:
```bash
curl localhost:5000/calls.json | jq '.Tasks'
```
You should have as output:
```json
{
"GetTask": 0,
"ListTasks": 0,
"GetResultIds": 0,
"CancelTasks": 0,
"CountTasksByStatus": 0,
"ListTasksDetailed": 1,
"SubmitTasks": 0
}
```
You can see that attribute `ListTasksDetailed` was incremented, meaning that the API effectively handled your call !
## WARNING
### Note for Users
Starting from gRPC version 1.57 and onward, it is necessary to explicitly specify the default authority when creating the gRPC channel. [more details](https://github.com/grpc/grpc/issues/34305)
Raw data
{
"_id": null,
"home_page": null,
"name": "armonik",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.7",
"maintainer_email": null,
"keywords": "cloud, HTC, gRPC, ArmoniK, Aneo",
"author": null,
"author_email": null,
"download_url": "https://files.pythonhosted.org/packages/6c/8a/cf76a3f8145378b42d5c4713037bebc8271e5ff62baa9e003149bb7581b5/armonik-3.22.0.tar.gz",
"platform": null,
"description": "# ArmoniK.Api Python package\nThis folder contains the necessary scripts to generate the ArmoniK.Api Python package. Please note that while the package generation is platform dependent, the generated package *should* be compatible with Linux and Windows.\n\n## Install the Python Package from PyPI\nAt each release, we provide a prepackaged version of ArmoniK.Api available on PyPI here : [https://pypi.org/project/armonik](https://pypi.org/project/armonik).\nTo install the package to your current Python environment, you can use pip :\n```\npip install armonik\n```\n\n## Linux / [WSL](https://learn.microsoft.com/en-us/windows/wsl/)\n### **How to generate**\n\nRequirements :\n- Python >= 3.7\n- Python3-venv\n- Pip3\n- Bash\n\nIf the python command doesn't link to python3 on your system, you may be able to install the package python-is-python3, which links python to python3.\n\nTo generate the package from sources, run the [proto2python.sh](proto2python.sh) script from its folder. You need to specify a directory where the virtual environment used for the build will be located. For example the following command will generate the packages and will create the build environment \"pyvenv\" in the current user's home directory:\n\n```bash\n./proto2python.sh ~/pyvenv\n```\n\n3 folders will be created :\n- generated : contains the source files used to create the package\n- build : contains the source files used to create the wheel package\n- pkg : contains the sdist and wheel packages\n\nInstead of running the script you can install the armonik package in \"editable\" mode, allowing you to make changes to the source code, and the changes will be reflected immediately without reinstalling the package.\n\n ```bash\n pip install -e ./packages/python\n ```\n\n### **How to install the generated package**\nFrom this directory, use the following command:\n```code\npip install pkg/armonik*.whl\n```\nThe generated package will be installed to your current python environment\n\n## Windows\nComing soon\n\n## Tests\n\n### **Test Environment Setup**\n\nBefore running tests, ensure the following setup steps are completed:\n\n1. Install Dependencies:\n\n```bash\nsudo apt install dotnet-sdk-6.0 jq\n```\n\n2. Launch the Mock Server:\n\nVerify that port 5000 is available (Armonik and the mock server communicate on the same port, uninstall armonik if necessary):\n\n```bash\nlsof -i :5000\n```\n\n3. Launch the server from the project's root directory in a separate terminal:\n\n```bash\ncd packages/csharp/ArmoniK.Api.Mock\ndotnet run\n```\n\n### **Test Environment Summary**\n\nThe test environment utilizes a mock endpoint to assert if the ArmoniK service has been triggered. It leverages the requests library to query the /calls.json endpoint, examining the JSON response to validate the count of remote procedure calls made to specific services and methods\n\n```bash\ncurl localhost:5000/calls.json | jq\n```\n\nIn prevision of the API test, run the following command:\n\n```bash\ncurl localhost:5000/calls.json | jq '.Tasks'\n```\n\nYou should have as output:\n\n```json\n{\n \"GetTask\": 0,\n \"ListTasks\": 0,\n \"GetResultIds\": 0,\n \"CancelTasks\": 0,\n \"CountTasksByStatus\": 0,\n \"ListTasksDetailed\": 0,\n \"SubmitTasks\": 0\n}\n```\n\n### Configure gRPC channel and test API calls\n\nOnce the endpoint runs, you can initiate a gRPC channel to it with a Python client. \n\nBelow is an example using a Tasks client and calling the `list_tasks` method:\n\n```python\nimport grpc\nimport armonik.client\nwith grpc.insecure_channel(\"localhost:5001\") as channel:\n tasks_client = ArmoniKTasks(channel)\n tasks.client.list_tasks()\n```\n\nPort `5001` is actually ArmoniK's control-plane endpoint.\n\nFor the sake of simplicity, the example gRPC channel here is an insecure one. **You should never do that in production environment.**\n\n### **Check if API call was successful**\n\nExecute the Python code snippet above and re-run command:\n\n```bash\ncurl localhost:5000/calls.json | jq '.Tasks'\n```\n\nYou should have as output:\n\n```json\n{\n \"GetTask\": 0,\n \"ListTasks\": 0,\n \"GetResultIds\": 0,\n \"CancelTasks\": 0,\n \"CountTasksByStatus\": 0,\n \"ListTasksDetailed\": 1,\n \"SubmitTasks\": 0\n}\n```\n\nYou can see that attribute `ListTasksDetailed` was incremented, meaning that the API effectively handled your call ! \n\n## WARNING\n\n### Note for Users\n\nStarting from gRPC version 1.57 and onward, it is necessary to explicitly specify the default authority when creating the gRPC channel. [more details](https://github.com/grpc/grpc/issues/34305)\n",
"bugtrack_url": null,
"license": "Apache v2.0 LICENSE",
"summary": "GRPC python binding for the ArmoniK orchestrator API",
"version": "3.22.0",
"project_urls": {
"Bug Tracker": "https://github.com/aneoconsulting/ArmoniK/issues",
"Homepage": "https://github.com/aneoconsulting/ArmoniK.Api"
},
"split_keywords": [
"cloud",
" htc",
" grpc",
" armonik",
" aneo"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "e236cf732de950ba2d83734ba218eaab66e08ca9b80171dbeea5a11076e7f712",
"md5": "4efa7c0838ce5f238f98dc46fb4ad7d1",
"sha256": "9778a80d84c837ab2f0286882164be8d0c5e1a1b4e8ca6af50197d6c14a31072"
},
"downloads": -1,
"filename": "armonik-3.22.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "4efa7c0838ce5f238f98dc46fb4ad7d1",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.7",
"size": 147498,
"upload_time": "2024-11-21T12:54:11",
"upload_time_iso_8601": "2024-11-21T12:54:11.723575Z",
"url": "https://files.pythonhosted.org/packages/e2/36/cf732de950ba2d83734ba218eaab66e08ca9b80171dbeea5a11076e7f712/armonik-3.22.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "6c8acf76a3f8145378b42d5c4713037bebc8271e5ff62baa9e003149bb7581b5",
"md5": "f0234039c453b37da8f4e2689d41afe3",
"sha256": "056814b1698f967f4b810872bfa224b2bc4e4e0340190741e7a36c268e74ea6d"
},
"downloads": -1,
"filename": "armonik-3.22.0.tar.gz",
"has_sig": false,
"md5_digest": "f0234039c453b37da8f4e2689d41afe3",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.7",
"size": 88792,
"upload_time": "2024-11-21T12:54:13",
"upload_time_iso_8601": "2024-11-21T12:54:13.373909Z",
"url": "https://files.pythonhosted.org/packages/6c/8a/cf76a3f8145378b42d5c4713037bebc8271e5ff62baa9e003149bb7581b5/armonik-3.22.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-11-21 12:54:13",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "aneoconsulting",
"github_project": "ArmoniK",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "armonik"
}