Python Client
Installation
Section intitulée « Installation »pip install mecapy-sdkAuthentification
Section intitulée « Authentification »from mecapy import MecaPyClient, Auth
# Avec un token d'accès (service account ou token temporaire)client = MecaPyClient(auth=Auth.Token("votre-token"))Charger un package
Section intitulée « Charger un package »pkg = client.load("e25-030-1")client.load() accepte le nom ou l’UUID du package. Il lève NotFoundError si aucun package ne correspond.
Appeler une fonction
Section intitulée « Appeler une fonction »Mode bloquant (recommandé)
Section intitulée « Mode bloquant (recommandé) »result = pkg.min_preload( bolt={"d": 12.0, "p": 1.75, "As": 84.3, "Re_min": 900.0, "quality_class": "10.9"}, assembly={"dh": 13.0, "do": 22.0, "Rc": 200.0, "mu_p_min": 0.12}, loads={"FA_max": 5000.0, "Ft_max": 3000.0}, tightening={"mu_tot_min": 0.10, "mu_tot_max": 0.16, "precision_class": "C20"},)print(result) # {'F0_min': 30000.0, ...}L’appel bloque jusqu’à ce que le calcul soit terminé (polling automatique) et retourne le résultat sous forme de dict.
Mode non-bloquant
Section intitulée « Mode non-bloquant »Pour les calculs longs ou pour soumettre plusieurs jobs en parallèle :
# Soumettre sans attendrejob = pkg.min_preload.submit( bolt={"d": 12.0, "p": 1.75, "As": 84.3, "Re_min": 900.0, "quality_class": "10.9"}, assembly={"dh": 13.0, "do": 22.0, "Rc": 200.0, "mu_p_min": 0.12}, loads={"FA_max": 5000.0, "Ft_max": 3000.0}, tightening={"mu_tot_min": 0.10, "mu_tot_max": 0.16, "precision_class": "C20"},)
print(job.job_id) # "0e894cef-c419-46e9-9af1-b52ac2e528fe"print(job.status) # "pending" | "running" | "completed" | "failed"
result = job.result() # bloque jusqu'à completionRéférence API
Section intitulée « Référence API »MecaPyClient
Section intitulée « MecaPyClient »| Paramètre | Type | Description |
|---|---|---|
api_url | str | URL de base de l’API (défaut : depuis MECAPY_API_URL) |
auth | AuthBase | Stratégie d’authentification |
timeout | float | Timeout réseau en secondes (défaut : 30) |
Méthodes principales
| Méthode | Description |
|---|---|
client.load(name_or_id) | Charge un package par nom ou UUID |
client.get_current_user() | Retourne les infos de l’utilisateur authentifié |
client.health_check() | Vérifie l’état de l’API |
Objet retourné par client.load(). Accédez aux fonctions via leurs noms comme attributs :
pkg = client.load("mon-package")pkg.ma_fonction(...) # appel bloquantpkg.ma_fonction.submit(...) # appel non-bloquant → JobFunction
Section intitulée « Function »| Appel | Description |
|---|---|
fn(**kwargs) | Soumet le job et attend le résultat (bloquant) |
fn.submit(**kwargs) | Soumet le job et retourne un Job immédiatement |
| Attribut / Méthode | Description |
|---|---|
job.job_id | Identifiant unique du job (UUID) |
job.status | Statut courant sans bloquer : "pending", "running", "completed", "failed" |
job.result(timeout, poll_interval) | Attend et retourne le résultat ; lève TimeoutError ou ExecutionError |
Paramètres de job.result()
| Paramètre | Défaut | Description |
|---|---|---|
timeout | 120.0 | Secondes max avant TimeoutError |
poll_interval | 2.0 | Intervalle entre chaque sondage (secondes) |
Exceptions
Section intitulée « Exceptions »| Exception | Déclenchée quand |
|---|---|
AuthenticationError | Token invalide ou expiré |
NotFoundError | Package ou ressource introuvable |
ValidationError | Payload invalide (422) |
ExecutionError | Le calcul a échoué côté serveur |
NetworkError | Problème réseau |
TimeoutError | Le job n’a pas terminé dans le délai imparti |
from mecapy.exceptions import ExecutionError, NotFoundError
try: pkg = client.load("package-inexistant")except NotFoundError: print("Package introuvable")
try: result = pkg.ma_fonction(...)except ExecutionError as e: print(f"Calcul échoué : {e}")Exemple complet
Section intitulée « Exemple complet »from mecapy import MecaPyClient, Authfrom mecapy.exceptions import ExecutionError
client = MecaPyClient( api_url="https://api.mecapy.com", auth=Auth.Token("votre-token"),)
pkg = client.load("e25-030-1")
# Appel bloquanttry: result = pkg.min_preload( bolt={"d": 12.0, "p": 1.75, "As": 84.3, "Re_min": 900.0, "quality_class": "10.9"}, assembly={"dh": 13.0, "do": 22.0, "Rc": 200.0, "mu_p_min": 0.12}, loads={"FA_max": 5000.0, "Ft_max": 3000.0}, tightening={"mu_tot_min": 0.10, "mu_tot_max": 0.16, "precision_class": "C20"}, ) print(result)except ExecutionError as e: print(f"Erreur d'exécution : {e}")