[![PyPI](https://img.shields.io/pypi/v/fabric-orchestrator-client?style=plastic)](https://pypi.org/project/fabric-orchestrator-client/)
# Fabric Orchestrator swagger-client
This is Fabric Orchestrator API
This Python package is automatically generated by the [Swagger Codegen](https://github.com/swagger-api/swagger-codegen) project:
- API version: 1.0.1
- Package version: 1.0.0
- Build package: io.swagger.codegen.v3.generators.python.PythonClientCodegen
## Generating the Client Code
Due to a BUG in swagger-code-gen, Please follow the steps below
That said, there's a bug in the Python generator of Swagger Codegen 3.x, it doesn't generate the code for Bearer authentication in OpenAPI 3.0 definitions.
As a workaround, edit your OpenAPI YAML file and replace this part
```
securitySchemes:
bearerAuth:
type: http
scheme: bearer
bearerFormat: JWT
```
to
```
securitySchemes:
sso_auth:
type: apiKey
in: header
name: Authorization
```
Then generate a new Python client from the modified API definition.
Reference for more details [here](https://stackoverflow.com/questions/57920052/how-to-set-the-bearer-token-in-the-python-api-client-generated-by-swagger-codege)
## Requirements.
Python 3.9+
## Installation & Usage
### pip install
If the python package is hosted on Github, you can install directly from Github
```sh
pip install git+https://github.com/fabric-testbed/OrchestratorClient.git
```
(you may need to run `pip` with root permission: `sudo pip install git+https://github.com/fabric-testbed/OrchestratorClient.git`)
Then import the package:
```python
import fabric_cf.orchestrator.swagger_client
```
### Setuptools
Install via [Setuptools](http://pypi.python.org/pypi/setuptools).
```sh
python setup.py install --user
```
(or `sudo python setup.py install` to install the package for all users)
Then import the package:
```python
import fabric_cf.orchestrator.swagger_client
```
## Getting Started
Please follow the [installation procedure](#installation--usage) and then run the following:
```python
from __future__ import print_function
import time
from fabric_cf.orchestrator.swagger_client.api.version_api import VersionApi
from fabric_cf.orchestrator.swagger_client import Configuration, ApiClient
from fabric_cf.orchestrator.swagger_client.rest import ApiException
from pprint import pprint
# Configure API key authorization: bearerAuth
configuration = Configuration()
configuration.api_key['Authorization'] = 'YOUR_API_KEY'
# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed
# configuration.api_key_prefix['Authorization'] = 'Bearer'
# create_slices an instance of the API class
api_instance = VersionApi(ApiClient(configuration))
try:
# version
api_response = api_instance.version_get()
pprint(api_response)
except ApiException as e:
print("Exception when calling VersionApi->version_get: %s\n" % e)
```
## Documentation for API Endpoints
All URIs are relative to *http://127.0.0.1:8700/*
Class | Method | HTTP request | Description
------------ | ------------- | ------------- | -------------
*PoasApi* | [**poas_create_sliver_id_post**](docs/PoasApi.md#poas_create_sliver_id_post) | **POST** /poas/create/{sliver_id} | Perform an operational action on a sliver.
*PoasApi* | [**poas_get**](docs/PoasApi.md#poas_get) | **GET** /poas/ | Request get the status of the POAs.
*PoasApi* | [**poas_poa_id_get**](docs/PoasApi.md#poas_poa_id_get) | **GET** /poas/{poa_id} | Perform an operational action on a sliver.
*ResourcesApi* | [**portalresources_get**](docs/ResourcesApi.md#portalresources_get) | **GET** /portalresources | Retrieve a listing and description of available resources for portal
*ResourcesApi* | [**resources_get**](docs/ResourcesApi.md#resources_get) | **GET** /resources | Retrieve a listing and description of available resources. By default, a cached available resource information is returned. User can force to request the current available resources.
*SlicesApi* | [**slices_create_post**](docs/SlicesApi.md#slices_create_post) | **POST** /slices/create | Create slice
*SlicesApi* | [**slices_creates_post**](docs/SlicesApi.md#slices_creates_post) | **POST** /slices/creates | Create slice
*SlicesApi* | [**slices_delete_delete**](docs/SlicesApi.md#slices_delete_delete) | **DELETE** /slices/delete | Delete all slices for a User within a project.
*SlicesApi* | [**slices_delete_slice_id_delete**](docs/SlicesApi.md#slices_delete_slice_id_delete) | **DELETE** /slices/delete/{slice_id} | Delete slice.
*SlicesApi* | [**slices_get**](docs/SlicesApi.md#slices_get) | **GET** /slices | Retrieve a listing of user slices
*SlicesApi* | [**slices_modify_slice_id_accept_post**](docs/SlicesApi.md#slices_modify_slice_id_accept_post) | **POST** /slices/modify/{slice_id}/accept | Accept the last modify an existing slice
*SlicesApi* | [**slices_modify_slice_id_put**](docs/SlicesApi.md#slices_modify_slice_id_put) | **PUT** /slices/modify/{slice_id} | Modify an existing slice
*SlicesApi* | [**slices_renew_slice_id_post**](docs/SlicesApi.md#slices_renew_slice_id_post) | **POST** /slices/renew/{slice_id} | Renew slice
*SlicesApi* | [**slices_slice_id_get**](docs/SlicesApi.md#slices_slice_id_get) | **GET** /slices/{slice_id} | slice properties
*SliversApi* | [**slivers_get**](docs/SliversApi.md#slivers_get) | **GET** /slivers | Retrieve a listing of user slivers
*SliversApi* | [**slivers_sliver_id_get**](docs/SliversApi.md#slivers_sliver_id_get) | **GET** /slivers/{sliver_id} | slivers properties
*VersionApi* | [**version_get**](docs/VersionApi.md#version_get) | **GET** /version | Version
## Documentation For Models
- [Poa](docs/Poa.md)
- [PoaData](docs/PoaData.md)
- [PoaPost](docs/PoaPost.md)
- [PoaPostData](docs/PoaPostData.md)
- [PoaPostDataKeys](docs/PoaPostDataKeys.md)
- [PoaPostDataVcpuCpuMap](docs/PoaPostDataVcpuCpuMap.md)
- [Resource](docs/Resource.md)
- [Resources](docs/Resources.md)
- [Slice](docs/Slice.md)
- [SliceDetails](docs/SliceDetails.md)
- [Slices](docs/Slices.md)
- [SlicesPost](docs/SlicesPost.md)
- [Sliver](docs/Sliver.md)
- [Slivers](docs/Slivers.md)
- [Status200OkNoContent](docs/Status200OkNoContent.md)
- [Status200OkNoContentData](docs/Status200OkNoContentData.md)
- [Status200OkPaginated](docs/Status200OkPaginated.md)
- [Status200OkSingle](docs/Status200OkSingle.md)
- [Status400BadRequest](docs/Status400BadRequest.md)
- [Status400BadRequestErrors](docs/Status400BadRequestErrors.md)
- [Status401Unauthorized](docs/Status401Unauthorized.md)
- [Status401UnauthorizedErrors](docs/Status401UnauthorizedErrors.md)
- [Status403Forbidden](docs/Status403Forbidden.md)
- [Status403ForbiddenErrors](docs/Status403ForbiddenErrors.md)
- [Status404NotFound](docs/Status404NotFound.md)
- [Status404NotFoundErrors](docs/Status404NotFoundErrors.md)
- [Status500InternalServerError](docs/Status500InternalServerError.md)
- [Status500InternalServerErrorErrors](docs/Status500InternalServerErrorErrors.md)
- [Version](docs/Version.md)
- [VersionData](docs/VersionData.md)
## Documentation For Authorization
## bearerAuth
- **Type**: API key
- **API key parameter name**: Authorization
- **Location**: HTTP header
## Documentation For Orchestrator Proxy
Users are recommended to use Orchestrator Proxy class for any orchestrator operations. Examples are shown below.
### Get Resources
```
orchestrator_host = "dev-3.fabric-testbed.net"
proxy = OrchestratorProxy(orchestrator_host=orchestrator_host)
resources = proxy.resources(token=token)
```
### Create Slice
```
import fim.user as fu
t = fu.ExperimentTopology()
n1 = t.add_node(name='n1', site='RENC')
cap = fu.Capacities()
cap.set_fields(core=4, ram=64, disk=500)
n1.set_properties(capacities=cap, image_type='qcow2', image_ref='default_centos_8')
n1.add_component(ctype=fu.ComponentType.SmartNIC, model='ConnectX-6', name='nic1')
n2 = t.add_node(name='n2', site='RENC')
n2.set_properties(capacities=cap, image_type='qcow2', image_ref='default_centos_8')
n2.add_component(ctype=fu.ComponentType.GPU, model='Tesla T4', name='nic2')
slice_graph = t.serialize()
sss_key = "<user public key>"
orchestrator_host = "dev-3.fabric-testbed.net"
proxy = OrchestratorProxy(orchestrator_host=orchestrator_host)
status, reservation_list = proxy.create(token=token, slice_name=name, slice_graph=slice_graph, ssh_key=ssh_key)
```
### Get Slices
```
orchestrator_host = "dev-3.fabric-testbed.net"
proxy = OrchestratorProxy(orchestrator_host=orchestrator_host)
status, slice_list = proxy.slices(token=token)
```
### Get Slice
```
orchestrator_host = "dev-3.fabric-testbed.net"
proxy = OrchestratorProxy(orchestrator_host=orchestrator_host)
status, slice_topology = proxy.get_slice(token=token, slice_id=slice_id)
```
### Get Slivers
```
orchestrator_host = "dev-3.fabric-testbed.net"
proxy = OrchestratorProxy(orchestrator_host=orchestrator_host)
status, reservation_list = proxy.slivers(token=token, slice_id=slice_id)
```
### Get Sliver
```
orchestrator_host = "dev-3.fabric-testbed.net"
proxy = OrchestratorProxy(orchestrator_host=orchestrator_host)
status, reservation = proxy.slivers(token=token, slice_id=slice_id, sliver_id=sliver_id)
```
### Delete Slice by slice_id
```
orchestrator_host = "dev-3.fabric-testbed.net"
proxy = OrchestratorProxy(orchestrator_host=orchestrator_host)
status, result = proxy.delete(token=token, slice_id=slice_id)
```
### Delete Slices by email
```
orchestrator_host = "dev-3.fabric-testbed.net"
proxy = OrchestratorProxy(orchestrator_host=orchestrator_host)
status, result = proxy.delete(token=token, email=email)
```
### Renew Slice
```
now = datetime.now(timezone.utc)
new_time = now + timedelta(days=2)
orchestrator_host = "dev-3.fabric-testbed.net"
proxy = OrchestratorProxy(orchestrator_host=orchestrator_host)
status, reservation = proxy.renew_slice(token=token, slice_id=slice_id,
new_lease_end_time=new_time.strftime('%Y-%m-%d %H:%M:%S %z'))
```
## Author
kthare10@unc.edu
Raw data
{
"_id": null,
"home_page": null,
"name": "fabric-orchestrator-client",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.9",
"maintainer_email": null,
"keywords": "Swagger, Fabric Orchestrator API",
"author": null,
"author_email": "Komal Thareja <kthare10@renci.org>",
"download_url": "https://files.pythonhosted.org/packages/a4/ea/7f155f94cbd5e5cc3d04e4d2d8930923b113c71fec0500a7a9164d8c62bd/fabric-orchestrator-client-1.8.0.tar.gz",
"platform": null,
"description": "[![PyPI](https://img.shields.io/pypi/v/fabric-orchestrator-client?style=plastic)](https://pypi.org/project/fabric-orchestrator-client/)\n\n# Fabric Orchestrator swagger-client\nThis is Fabric Orchestrator API\n\nThis Python package is automatically generated by the [Swagger Codegen](https://github.com/swagger-api/swagger-codegen) project:\n\n- API version: 1.0.1\n- Package version: 1.0.0\n- Build package: io.swagger.codegen.v3.generators.python.PythonClientCodegen\n\n## Generating the Client Code\nDue to a BUG in swagger-code-gen, Please follow the steps below\n\nThat said, there's a bug in the Python generator of Swagger Codegen 3.x, it doesn't generate the code for Bearer authentication in OpenAPI 3.0 definitions. \nAs a workaround, edit your OpenAPI YAML file and replace this part\n\n```\n securitySchemes:\n bearerAuth: \n type: http\n scheme: bearer\n bearerFormat: JWT \n```\n\nto\n\n```\n securitySchemes:\n sso_auth:\n type: apiKey\n in: header\n name: Authorization\n```\nThen generate a new Python client from the modified API definition.\n\n\nReference for more details [here](https://stackoverflow.com/questions/57920052/how-to-set-the-bearer-token-in-the-python-api-client-generated-by-swagger-codege)\n\n## Requirements.\n\nPython 3.9+\n\n## Installation & Usage\n### pip install\n\nIf the python package is hosted on Github, you can install directly from Github\n\n```sh\npip install git+https://github.com/fabric-testbed/OrchestratorClient.git\n```\n(you may need to run `pip` with root permission: `sudo pip install git+https://github.com/fabric-testbed/OrchestratorClient.git`)\n\nThen import the package:\n```python\nimport fabric_cf.orchestrator.swagger_client \n```\n\n### Setuptools\n\nInstall via [Setuptools](http://pypi.python.org/pypi/setuptools).\n\n```sh\npython setup.py install --user\n```\n(or `sudo python setup.py install` to install the package for all users)\n\nThen import the package:\n```python\nimport fabric_cf.orchestrator.swagger_client\n```\n\n## Getting Started\n\nPlease follow the [installation procedure](#installation--usage) and then run the following:\n\n```python\nfrom __future__ import print_function\nimport time\nfrom fabric_cf.orchestrator.swagger_client.api.version_api import VersionApi\nfrom fabric_cf.orchestrator.swagger_client import Configuration, ApiClient\nfrom fabric_cf.orchestrator.swagger_client.rest import ApiException\nfrom pprint import pprint\n\n# Configure API key authorization: bearerAuth\nconfiguration = Configuration()\nconfiguration.api_key['Authorization'] = 'YOUR_API_KEY'\n# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed\n# configuration.api_key_prefix['Authorization'] = 'Bearer'\n\n# create_slices an instance of the API class\napi_instance = VersionApi(ApiClient(configuration))\n\ntry:\n # version\n api_response = api_instance.version_get()\n pprint(api_response)\nexcept ApiException as e:\n print(\"Exception when calling VersionApi->version_get: %s\\n\" % e)\n```\n\n## Documentation for API Endpoints\n\nAll URIs are relative to *http://127.0.0.1:8700/*\n\nClass | Method | HTTP request | Description\n------------ | ------------- | ------------- | -------------\n*PoasApi* | [**poas_create_sliver_id_post**](docs/PoasApi.md#poas_create_sliver_id_post) | **POST** /poas/create/{sliver_id} | Perform an operational action on a sliver.\n*PoasApi* | [**poas_get**](docs/PoasApi.md#poas_get) | **GET** /poas/ | Request get the status of the POAs.\n*PoasApi* | [**poas_poa_id_get**](docs/PoasApi.md#poas_poa_id_get) | **GET** /poas/{poa_id} | Perform an operational action on a sliver.\n*ResourcesApi* | [**portalresources_get**](docs/ResourcesApi.md#portalresources_get) | **GET** /portalresources | Retrieve a listing and description of available resources for portal\n*ResourcesApi* | [**resources_get**](docs/ResourcesApi.md#resources_get) | **GET** /resources | Retrieve a listing and description of available resources. By default, a cached available resource information is returned. User can force to request the current available resources.\n*SlicesApi* | [**slices_create_post**](docs/SlicesApi.md#slices_create_post) | **POST** /slices/create | Create slice\n*SlicesApi* | [**slices_creates_post**](docs/SlicesApi.md#slices_creates_post) | **POST** /slices/creates | Create slice\n*SlicesApi* | [**slices_delete_delete**](docs/SlicesApi.md#slices_delete_delete) | **DELETE** /slices/delete | Delete all slices for a User within a project.\n*SlicesApi* | [**slices_delete_slice_id_delete**](docs/SlicesApi.md#slices_delete_slice_id_delete) | **DELETE** /slices/delete/{slice_id} | Delete slice.\n*SlicesApi* | [**slices_get**](docs/SlicesApi.md#slices_get) | **GET** /slices | Retrieve a listing of user slices\n*SlicesApi* | [**slices_modify_slice_id_accept_post**](docs/SlicesApi.md#slices_modify_slice_id_accept_post) | **POST** /slices/modify/{slice_id}/accept | Accept the last modify an existing slice\n*SlicesApi* | [**slices_modify_slice_id_put**](docs/SlicesApi.md#slices_modify_slice_id_put) | **PUT** /slices/modify/{slice_id} | Modify an existing slice\n*SlicesApi* | [**slices_renew_slice_id_post**](docs/SlicesApi.md#slices_renew_slice_id_post) | **POST** /slices/renew/{slice_id} | Renew slice\n*SlicesApi* | [**slices_slice_id_get**](docs/SlicesApi.md#slices_slice_id_get) | **GET** /slices/{slice_id} | slice properties\n*SliversApi* | [**slivers_get**](docs/SliversApi.md#slivers_get) | **GET** /slivers | Retrieve a listing of user slivers\n*SliversApi* | [**slivers_sliver_id_get**](docs/SliversApi.md#slivers_sliver_id_get) | **GET** /slivers/{sliver_id} | slivers properties\n*VersionApi* | [**version_get**](docs/VersionApi.md#version_get) | **GET** /version | Version\n\n## Documentation For Models\n\n - [Poa](docs/Poa.md)\n - [PoaData](docs/PoaData.md)\n - [PoaPost](docs/PoaPost.md)\n - [PoaPostData](docs/PoaPostData.md)\n - [PoaPostDataKeys](docs/PoaPostDataKeys.md)\n - [PoaPostDataVcpuCpuMap](docs/PoaPostDataVcpuCpuMap.md)\n - [Resource](docs/Resource.md)\n - [Resources](docs/Resources.md)\n - [Slice](docs/Slice.md)\n - [SliceDetails](docs/SliceDetails.md)\n - [Slices](docs/Slices.md)\n - [SlicesPost](docs/SlicesPost.md)\n - [Sliver](docs/Sliver.md)\n - [Slivers](docs/Slivers.md)\n - [Status200OkNoContent](docs/Status200OkNoContent.md)\n - [Status200OkNoContentData](docs/Status200OkNoContentData.md)\n - [Status200OkPaginated](docs/Status200OkPaginated.md)\n - [Status200OkSingle](docs/Status200OkSingle.md)\n - [Status400BadRequest](docs/Status400BadRequest.md)\n - [Status400BadRequestErrors](docs/Status400BadRequestErrors.md)\n - [Status401Unauthorized](docs/Status401Unauthorized.md)\n - [Status401UnauthorizedErrors](docs/Status401UnauthorizedErrors.md)\n - [Status403Forbidden](docs/Status403Forbidden.md)\n - [Status403ForbiddenErrors](docs/Status403ForbiddenErrors.md)\n - [Status404NotFound](docs/Status404NotFound.md)\n - [Status404NotFoundErrors](docs/Status404NotFoundErrors.md)\n - [Status500InternalServerError](docs/Status500InternalServerError.md)\n - [Status500InternalServerErrorErrors](docs/Status500InternalServerErrorErrors.md)\n - [Version](docs/Version.md)\n - [VersionData](docs/VersionData.md)\n\n## Documentation For Authorization\n\n\n## bearerAuth\n\n- **Type**: API key\n- **API key parameter name**: Authorization\n- **Location**: HTTP header\n\n## Documentation For Orchestrator Proxy\nUsers are recommended to use Orchestrator Proxy class for any orchestrator operations. Examples are shown below.\n\n### Get Resources\n```\norchestrator_host = \"dev-3.fabric-testbed.net\"\nproxy = OrchestratorProxy(orchestrator_host=orchestrator_host)\nresources = proxy.resources(token=token)\n```\n### Create Slice\n```\n import fim.user as fu\n t = fu.ExperimentTopology()\n n1 = t.add_node(name='n1', site='RENC')\n cap = fu.Capacities()\n cap.set_fields(core=4, ram=64, disk=500)\n n1.set_properties(capacities=cap, image_type='qcow2', image_ref='default_centos_8')\n n1.add_component(ctype=fu.ComponentType.SmartNIC, model='ConnectX-6', name='nic1')\n\n n2 = t.add_node(name='n2', site='RENC')\n n2.set_properties(capacities=cap, image_type='qcow2', image_ref='default_centos_8')\n n2.add_component(ctype=fu.ComponentType.GPU, model='Tesla T4', name='nic2')\n\n slice_graph = t.serialize()\n sss_key = \"<user public key>\"\n orchestrator_host = \"dev-3.fabric-testbed.net\"\n proxy = OrchestratorProxy(orchestrator_host=orchestrator_host)\n status, reservation_list = proxy.create(token=token, slice_name=name, slice_graph=slice_graph, ssh_key=ssh_key)\n```\n### Get Slices\n```\norchestrator_host = \"dev-3.fabric-testbed.net\"\nproxy = OrchestratorProxy(orchestrator_host=orchestrator_host)\nstatus, slice_list = proxy.slices(token=token)\n```\n### Get Slice\n```\norchestrator_host = \"dev-3.fabric-testbed.net\"\nproxy = OrchestratorProxy(orchestrator_host=orchestrator_host)\nstatus, slice_topology = proxy.get_slice(token=token, slice_id=slice_id)\n```\n### Get Slivers\n```\norchestrator_host = \"dev-3.fabric-testbed.net\"\nproxy = OrchestratorProxy(orchestrator_host=orchestrator_host)\nstatus, reservation_list = proxy.slivers(token=token, slice_id=slice_id)\n```\n### Get Sliver\n```\norchestrator_host = \"dev-3.fabric-testbed.net\"\nproxy = OrchestratorProxy(orchestrator_host=orchestrator_host)\nstatus, reservation = proxy.slivers(token=token, slice_id=slice_id, sliver_id=sliver_id)\n```\n### Delete Slice by slice_id\n```\norchestrator_host = \"dev-3.fabric-testbed.net\"\nproxy = OrchestratorProxy(orchestrator_host=orchestrator_host)\nstatus, result = proxy.delete(token=token, slice_id=slice_id)\n```\n### Delete Slices by email\n```\norchestrator_host = \"dev-3.fabric-testbed.net\"\nproxy = OrchestratorProxy(orchestrator_host=orchestrator_host)\nstatus, result = proxy.delete(token=token, email=email)\n```\n### Renew Slice\n```\nnow = datetime.now(timezone.utc)\nnew_time = now + timedelta(days=2)\norchestrator_host = \"dev-3.fabric-testbed.net\"\nproxy = OrchestratorProxy(orchestrator_host=orchestrator_host)\nstatus, reservation = proxy.renew_slice(token=token, slice_id=slice_id,\n new_lease_end_time=new_time.strftime('%Y-%m-%d %H:%M:%S %z'))\n```\n## Author\n\nkthare10@unc.edu\n",
"bugtrack_url": null,
"license": null,
"summary": "Fabric Orchestrator API",
"version": "1.8.0",
"project_urls": {
"Home": "https://fabric-testbed.net/",
"Sources": "https://github.com/fabric-testbed/OrchestratorClient"
},
"split_keywords": [
"swagger",
" fabric orchestrator api"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "25942f0fc292dbc40230f698efc2d91d3e1e7604b337487fad81a51e7b686dd7",
"md5": "ca47222281c65331e6890af689bb1dab",
"sha256": "f84d4d586930fa98d101cd44f86a0c6eb77bd53aee34c8574e716baf3cfd9ece"
},
"downloads": -1,
"filename": "fabric_orchestrator_client-1.8.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "ca47222281c65331e6890af689bb1dab",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.9",
"size": 82066,
"upload_time": "2025-01-07T19:56:29",
"upload_time_iso_8601": "2025-01-07T19:56:29.110112Z",
"url": "https://files.pythonhosted.org/packages/25/94/2f0fc292dbc40230f698efc2d91d3e1e7604b337487fad81a51e7b686dd7/fabric_orchestrator_client-1.8.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "a4ea7f155f94cbd5e5cc3d04e4d2d8930923b113c71fec0500a7a9164d8c62bd",
"md5": "e22b0ed78f790f35853f118e5ab5e47d",
"sha256": "dc5ef2d691a1e89290157af6454098c7490e02aafc429b085e632321cc16bad7"
},
"downloads": -1,
"filename": "fabric-orchestrator-client-1.8.0.tar.gz",
"has_sig": false,
"md5_digest": "e22b0ed78f790f35853f118e5ab5e47d",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.9",
"size": 49579,
"upload_time": "2025-01-07T19:56:31",
"upload_time_iso_8601": "2025-01-07T19:56:31.903422Z",
"url": "https://files.pythonhosted.org/packages/a4/ea/7f155f94cbd5e5cc3d04e4d2d8930923b113c71fec0500a7a9164d8c62bd/fabric-orchestrator-client-1.8.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-01-07 19:56:31",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "fabric-testbed",
"github_project": "OrchestratorClient",
"travis_ci": true,
"coveralls": false,
"github_actions": false,
"tox": true,
"lcname": "fabric-orchestrator-client"
}