Pyserve : boîte à outils de conception python par contrat (DBC)
Pyserve est une bibliothèque Python qui fournit des décorateurs pour la mise en œuvre des principes de conception par contrat (DBC). Il simplifie l'application des conditions préalables, des limites postales et des invariants dans votre code. Pyserve vise à être un outil puissant pour assurer le comportement et les contraintes du code, promouvant le développement de logiciels sécurisé, maintenable et robuste à Python.
Les choses que Pyserve fait bien:
Pyserve est conçu avec une simplicité et une flexibilité à l'esprit, vous permettant d'intégrer facilement des contrôles de contrat rigoureux dans votre code Python, ce qui aide à déboguer et à maintenir des systèmes complexes.
Pour installer pyserve, utilisez simplement PIP:
pip install pysertiveVoici comment démarrer rapidement avec Pyserve:
from pysertive import pre_condition , post_condition , invariant
@ pre_condition ( lambda x : x > 0 , exception_type = ValueError , message = "Input must be positive" )
def sqrt ( x ):
return x ** 0.5
@ post_condition ( lambda result : result != None , exception_type = AssertionError , message = "Result cannot be None" )
def fetch_data ():
return { "data" : "Here is your data" }
@ invariant ( lambda self : self . balance >= 0 , exception_type = RuntimeError , message = "Insufficient funds" )
class BankAccount :
def __init__ ( self , balance ):
self . balance = balance
def deposit ( self , amount ):
self . balance += amount
def withdraw ( self , amount ):
self . balance -= amount # No need to manually check for negative balance Assurez-vous que les entrées de vos fonctions sont valides:
@ pre_condition ( lambda age : age >= 18 , exception_type = ValueError , message = "Must be 18 or older" )
def sign_contract ( age ):
print ( f"Contract signed by individual aged { age } " )Valider les sorties après l'exécution de vos fonctions:
@ post_condition ( lambda result : result > 0 , exception_type = AssertionError , message = "Profit must be positive" )
def calculate_profit ( revenue , costs ):
return revenue - costsAppliquer les états de classe restent cohérents:
@ invariant ( lambda self : self . inventory_count >= 0 , exception_type = RuntimeError , message = "Inventory count cannot be negative" )
class Warehouse :
def __init__ ( self , inventory_count ):
self . inventory_count = inventory_count
def add_stock ( self , number ):
self . inventory_count += number
def remove_stock ( self , number ):
self . inventory_count -= number Pour des exemples plus détaillés de la façon d'utiliser Pyserve, consultez le fichier examples.py dans le référentiel. Ce fichier contient des exemples d'utilisation des conditions préalables, des limites de poste et des invariants dans votre code Python.
Les contributions sont les bienvenues! Si vous souhaitez contribuer, veuillez consulter le guide de contribution et n'hésitez pas à ouvrir un problème ou une demande de traction.
Pyserve est libéré sous la licence du MIT. Voir le fichier de licence pour plus de détails.
Aller au sommet