Aller au contenu

Python Client

Fenêtre de terminal
pip install mecapy-sdk
from mecapy import MecaPyClient, Auth
# Avec un token d'accès (service account ou token temporaire)
client = MecaPyClient(auth=Auth.Token("votre-token"))
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.

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.

Pour les calculs longs ou pour soumettre plusieurs jobs en parallèle :

# Soumettre sans attendre
job = 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'à completion
ParamètreTypeDescription
api_urlstrURL de base de l’API (défaut : depuis MECAPY_API_URL)
authAuthBaseStratégie d’authentification
timeoutfloatTimeout réseau en secondes (défaut : 30)

Méthodes principales

MéthodeDescription
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 bloquant
pkg.ma_fonction.submit(...) # appel non-bloquant → Job
AppelDescription
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éthodeDescription
job.job_idIdentifiant unique du job (UUID)
job.statusStatut 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ètreDéfautDescription
timeout120.0Secondes max avant TimeoutError
poll_interval2.0Intervalle entre chaque sondage (secondes)
ExceptionDéclenchée quand
AuthenticationErrorToken invalide ou expiré
NotFoundErrorPackage ou ressource introuvable
ValidationErrorPayload invalide (422)
ExecutionErrorLe calcul a échoué côté serveur
NetworkErrorProblème réseau
TimeoutErrorLe 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}")
from mecapy import MecaPyClient, Auth
from mecapy.exceptions import ExecutionError
client = MecaPyClient(
api_url="https://api.mecapy.com",
auth=Auth.Token("votre-token"),
)
pkg = client.load("e25-030-1")
# Appel bloquant
try:
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}")