Aller au contenu

🚀 MecaPy Manifest - Guide de démarrage rapide

Créez un fichier mecapy.yml à la racine de votre projet :

name: mon-package
description: Description de mon package
functions:
ma-fonction:
handler: module:function

C’est tout ! Les schemas sont auto-générés depuis vos type hints Python.


mecapy.yml
name: calculateur-simple
functions:
addition:
handler: calc:add
calc.py
def add(x: float, y: float) -> float:
"""Additionne deux nombres."""
return x + y
functions:
calcul-contrainte:
handler: vis.Vis:calculer_contrainte
init: [diametre, materiau] # Paramètres du constructeur
vis.py
class Vis:
def __init__(self, diametre: float, materiau: str):
self.diametre = diametre
self.materiau = materiau
def calculer_contrainte(self, force: float) -> dict:
"""Calcule la contrainte."""
return {"contrainte": force / self.diametre}
functions:
creation-vis:
handler: vis.Vis:depuis_designation # Pas de init requis
class Vis:
@classmethod
def depuis_designation(cls, designation: str) -> "Vis":
"""Crée une vis depuis sa désignation (M8, M12, etc.)."""
...

from typing import Annotated
from pydantic import Field
def calcul(
force: Annotated[float, Field(
description="Force en Newton",
ge=0,
le=500000
)],
diametre: Annotated[float, Field(
description="Diamètre en mm",
ge=3,
le=100
)]
) -> float:
"""Calcule quelque chose."""
return force / diametre

→ Génère automatiquement un schema JSON avec validation !

from typing import TypedDict, Literal
class Resultat(TypedDict):
contrainte: float
statut: Literal["OK", "LIMITE", "RUPTURE"]
def calculer(force: float) -> Resultat:
"""Calcule et retourne un résultat structuré."""
return {"contrainte": 150.5, "statut": "OK"}

→ Schema de sortie auto-généré !


Si vous avez besoin de validation custom :

functions:
fonction-complexe:
handler: module:advanced
# Override du schema d'entrée
inputs_schema:
type: object
properties:
code:
type: string
pattern: "^[A-Z]{3}-[0-9]{4}$"
required: [code]
# Output schema reste auto-généré

name: mon-package
description: Description
# Runtime (optionnel, defaults intelligents)
runtime:
python: "3.12"
timeout: 300
# Tests (auto-détectés dans tests/)
tests:
framework: pytest
min_coverage: 80
functions:
ma-fonction:
handler: module:function

✅ Fichier mecapy.yml à la racine du projet ✅ Type hints sur toutes les fonctions ✅ Docstrings avec description ✅ Tests dans le dossier tests/ ✅ requirements.txt ou pyproject.toml

C’est parti ! 🚀


Pour plus de détails : MANIFEST_FORMAT.md