Dependix Core, new python coding framework.
Project description
dependix-core: Un conteneur d'injection de dépendances pour Python 🐍
dependix-core est un micro-framework léger et intuitif pour l'injection de dépendances (DI) en Python. Il vous aide à gérer les dépendances de vos classes, à les instancier et à les injecter automatiquement, ce qui rend votre code plus modulaire, plus facile à tester et plus maintenable.
🚀 Caractéristiques principales
-
Gestion des dépendances: Déclarez les dépendances de vos classes, et le conteneur s'occupe de les résoudre et de les injecter pour vous.
-
Décorateurs: Utilisez des décorateurs simples pour enregistrer vos classes en tant que "beans".
-
Introspection: Le conteneur peut résoudre automatiquement les dépendances en inspectant les annotations de type dans les constructeurs de vos classes.
-
Scopes: Prend en charge les scopes singleton (une seule instance par conteneur) et prototype (une nouvelle instance à chaque demande).
-
Cycle de vie des beans:
@post_construct: Exécute une méthode après l'instanciation et l'injection des dépendances d'un bean.@pre_destroy: Exécute une méthode avant l'arrêt du conteneur pour les singletons.
-
Fichiers de configuration: Enregistrez des beans à partir d'un fichier YAML pour une configuration externe.
-
Gestion des erreurs: Inclut des exceptions spécifiques pour les problèmes courants comme les dépendances manquantes (
DependencyNotFoundError) et les dépendances cycliques (CyclicDependencyError).
🛠️ Installation
pip install dependix-core
💡 Exemple d'utilisation
Étape 1: Définir des classes et des décorateurs
Vous pouvez enregistrer vos classes en utilisant le décorateur @register. Si le nom n'est pas spécifié, il est généré à partir du nom de la classe en utilisant le format snake_case.
from dependix_core.decorators import register, post_construct, pre_destroy
# Un bean singleton simple
@register(name="service_a", scope="singleton")
class ServiceA:
def __init__(self):
print("ServiceA a été instancié.")
@post_construct
def init(self):
print("ServiceA: Méthode post-construct appelée.")
self.is_initialized = True
@pre_destroy
def cleanup(self):
print("ServiceA: Méthode pre-destroy appelée.")
# Un bean qui dépend de ServiceA. Le conteneur injectera ServiceA automatiquement.
@register(name="service_b")
class ServiceB:
def __init__(self, service_a: ServiceA):
self.service_a = service_a
print("ServiceB a été instancié avec sa dépendance.")
@post_construct
def init(self):
print("ServiceB: Méthode post-construct appelée.")
Étape 2: Utiliser le conteneur
Le conteneur est le cœur du système. Il gère l'enregistrement et la résolution des beans.
from dependix_core.container import Container
import time
def main():
# Créez le conteneur
container = Container()
# Chargez les beans définis par les décorateurs
container.load_decorated_beans()
# Récupérez un bean
service_b = container.get_bean("service_b")
# Affichez un message de l'instance récupérée
print(f"ServiceB instance: {service_b}")
# Arrêtez le conteneur pour exécuter les méthodes pre-destroy des singletons.
# Dans ce cas, 'cleanup' de ServiceA sera appelé.
print("\n--- Arrêt du conteneur ---")
time.sleep(1) # Ajoute un petit délai pour voir le message
container.shutdown()
if __name__ == "__main__":
main()
Configuration via YAML
Vous pouvez également définir vos beans dans un fichier config.yaml pour séparer la configuration du code.
# config.yaml
beans:
yaml_service_a:
class: main.ServiceA
scope: singleton
yaml_service_b:
class: main.ServiceB
scope: prototype
Ensuite, chargez ce fichier dans votre conteneur:
from dependix_core.config import load_from_yaml
# ... (créez le conteneur) ...
load_from_yaml(container, "config.yaml")
# Récupérer les beans du fichier YAML
yaml_service_b_1 = container.get_bean("yaml_service_b")
yaml_service_b_2 = container.get_bean("yaml_service_b")
# Vérifiez que le scope 'prototype' fonctionne
print(f"yaml_service_b instances sont différentes ? {yaml_service_b_1 is not yaml_service_b_2}")
📚 Structure du projet
dependix_core/: Le dossier principal du package.__init__.py: Le fichier d'initialisation du package qui expose les classes et fonctions principales.container.py: Le cœur du projet, gère l'enregistrement, la création et la gestion du cycle de vie des beans.decorators.py: Contient les décorateurs@register,@post_construct, et@pre_destroy.exceptions.py: Définit les exceptions personnalisées utilisées par le framework.bean_definition.py: Un objet de données pour stocker la configuration d'un bean.config.py: Fonctions pour charger les définitions de beans à partir d'un fichier YAML.main.py: Un exemple d'utilisation complète du framework.
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 dependix_core-0.1.0.tar.gz.
File metadata
- Download URL: dependix_core-0.1.0.tar.gz
- Upload date:
- Size: 13.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b729382b79c3a194b404c14f90bb251a57b9c5f2651e2f1d4003555294acf1a7
|
|
| MD5 |
2be30770760f929219b304e83ea19caf
|
|
| BLAKE2b-256 |
ef6e8452b9ea22071461ba07844beef10c487d57c5da1b8feb696ebee41d9597
|
File details
Details for the file dependix_core-0.1.0-py3-none-any.whl.
File metadata
- Download URL: dependix_core-0.1.0-py3-none-any.whl
- Upload date:
- Size: 15.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
44f8a77252f1f69bd6112b62ce8bffec2991e9c37804a6522d3a4de7c82bc5c1
|
|
| MD5 |
1dcd9eeceaa4fc68462a267808c17837
|
|
| BLAKE2b-256 |
4d1d6359ab2ca9634df1b661cce346ac57ba5da714147fa27ad37f0dae624fec
|