Ephemeral buffer and Microservices API client
Project description
ebsclient
Client Python pour les services ebuffer, ebservice et ebmessage.
ebsclient fournit deux niveaux d'utilisation :
- APIs : une représentation directe des endpoints HTTP de chaque service
(
BufferAPI,RuntimeAPI,MicroserviceAPI,MessageAPI,PolicyAPI). - Wrappers : des objets Python (
BufferWrapper,JobWrapper,RuntimeWrapper,MicroserviceWrapper,PolicyWrapper) qui exposent des méthodes appelables directement sur les objets renvoyés par l'API, ainsi que la couche d'orchestrationRuntimeService/RuntimeJobcôté mainteneur.
Installation
La bibliothèque n'est, pour le moment, pas publiée sur PyPI. Elle s'installe en mode développement :
python3 -m venv .venv
source .venv/bin/activate
pip install -e ./ebsclient_package/
En cas de problème de cache :
pip uninstall ebsclient
pip cache purge
Démarrage rapide
from ebsclient import EbClientAPI
# Authentification par token
api = EbClientAPI(
ebservice_url="https://ebservice.dormain.org/api/v1",
ebuffer_url="https://ebuffer.dormain.org/api/v1",
token="mon_token",
)
# ... ou par identifiants
api = EbClientAPI(
ebservice_url="https://ebservice.dormain.org/api/v1",
ebuffer_url="https://ebuffer.dormain.org/api/v1",
username="maintainer",
password="maintainer_password",
)
# Lister les microservices et manipuler les objets directement
for ms in api.mservices.list():
print(ms.uuid)
print(ms.get_tags())
ms.add_tag("readme_test")
ms.show()
[!note]
ebservice_urletebuffer_urlsont obligatoires.ebmessage_urlest optionnel : il n'est requis que si vous utilisez l'envoi de messages (api.messages.send(...)).
Configuration du client
EbClientAPI accepte les paramètres suivants :
| Paramètre | Obligatoire | Description |
|---|---|---|
ebservice_url |
oui | URL de base du service ebservice |
ebuffer_url |
oui | URL de base du service ebuffer |
ebmessage_url |
non | URL de base du service ebmessage (envoi de messages) |
token |
non* | Token d'accès personnel |
username |
non* | Nom d'utilisateur |
password |
non* | Mot de passe |
timeout |
non | Timeout HTTP en secondes (défaut : 30) |
* Il faut fournir soit un token, soit un couple username + password.
Le client crée une requests.Session partagée avec retries automatiques (sur les
codes 502/503/504, hors POST pour éviter les doublons) et applique le timeout et
les en-têtes d'authentification à toutes les requêtes via un point d'entrée unique.
Architecture
ebsclient/
├── client.py : EbClientAPI (point d'entrée, authentification, session HTTP)
├── apis/
│ ├── buffer_api.py : représentation Python de l'API ebuffer
│ ├── message_api.py : représentation Python de l'API ebmessage
│ ├── microservice_api.py : représentation Python de l'API microservices
│ ├── policy_api.py : représentation Python de l'API policies
│ └── runtime_api.py : représentation Python de l'API runtimes
├── utils/
│ └── validators.py : fonctions de validation (uuid, email, bornes, ...)
└── wrappers/
├── buffer.py : BufferWrapper (ebuffer en tant qu'objet)
├── job.py : JobWrapper (job en tant qu'objet)
├── microservice.py : MicroserviceWrapper (microservice en tant qu'objet)
├── policy.py : PolicyWrapper (policy en tant qu'objet)
├── runtime.py : RuntimeWrapper (runtime en tant qu'objet)
└── runtime_service.py : RuntimeService / RuntimeRunner / RuntimeJob
(couche d'orchestration, usage mainteneur)
APIs vs Wrappers
Les méthodes des APIs prennent des identifiants (uuid) et renvoient des wrappers :
ms = api.mservices.get("dca80297-b1ad-4e3e-8b76-c6a11c95aab2") # -> MicroserviceWrapper
Les wrappers délèguent de façon transparente aux attributs de l'objet
sous-jacent (via __getattr__) et ajoutent des méthodes pratiques :
ms.name # attribut délégué à l'objet Microservice
ms.get_tags() # méthode du wrapper
ms.add_tag("x") # méthode du wrapper, rafraîchit l'objet
ms.refresh() # recharge l'objet depuis le serveur
ms.show() # affiche les détails
Couche d'orchestration (mainteneur)
runtime_service.py permet à un mainteneur de faire tourner un runtime qui
écoute ses microservices et exécute les jobs en attente, chacun dans son propre
thread :
RuntimeService: surveille un runtime et lance unRuntimeRunnerpar microservice associé.RuntimeRunner: surveille un microservice et lance un thread par job en attente.RuntimeJob: exécute un job (récupération des entrées, exécution, envoi des sorties). Classe destinée à être héritée en surchargeant les hooks d'entrée/sortie et la méthodeexecute.
Pour une utilisation simplifiée de cette couche (templates HPC/Slurm), voir la bibliothèque ebstemplate.
Tests
Les tests sont séparés selon ce dont ils ont besoin :
pip install pytest
# Tests hors-ligne (aucun serveur requis) : validators, client, runtime_service
pytest ebsclient_package/tests/unit ebsclient_package/tests/wrapper/test_runtime_service.py -v
# Tous les tests (nécessite des serveurs ebservice/ebuffer locaux)
pytest ebsclient_package/tests/ -v
# Un fichier spécifique
pytest ebsclient_package/tests/api/test_buffer_api.py -v
# Avec affichage des logs
pytest ebsclient_package/tests/ -v -s
Voir ebsclient_package/tests/README.md pour le détail de l'organisation des tests.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file ebsclient-0.1.1.tar.gz.
File metadata
- Download URL: ebsclient-0.1.1.tar.gz
- Upload date:
- Size: 32.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ee97d87b8291a756407390eabc9c16e7424e1c8ef1bdb70da2a9975dac629e12
|
|
| MD5 |
4cad8fa19062bf84d60de25c19a5e857
|
|
| BLAKE2b-256 |
4b9e37c657bace5d3a8568797c6c50ad1983750de02fd8dac33e39331f9b1e32
|
File details
Details for the file ebsclient-0.1.1-py3-none-any.whl.
File metadata
- Download URL: ebsclient-0.1.1-py3-none-any.whl
- Upload date:
- Size: 42.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fba52db6a7cb29850cd8e2a003cfed99233cdee57be3240a472bfc46efc2952e
|
|
| MD5 |
cf1590fd16f3a69db95377aa25ebbe69
|
|
| BLAKE2b-256 |
566ed6a762fbb850370a21ab1909bee4c719be9dab962138189ed01953c1c375
|