Skip to main content

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

dependix_core-0.1.0.tar.gz (13.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

dependix_core-0.1.0-py3-none-any.whl (15.0 kB view details)

Uploaded Python 3

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

Hashes for dependix_core-0.1.0.tar.gz
Algorithm Hash digest
SHA256 b729382b79c3a194b404c14f90bb251a57b9c5f2651e2f1d4003555294acf1a7
MD5 2be30770760f929219b304e83ea19caf
BLAKE2b-256 ef6e8452b9ea22071461ba07844beef10c487d57c5da1b8feb696ebee41d9597

See more details on using hashes here.

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

Hashes for dependix_core-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 44f8a77252f1f69bd6112b62ce8bffec2991e9c37804a6522d3a4de7c82bc5c1
MD5 1dcd9eeceaa4fc68462a267808c17837
BLAKE2b-256 4d1d6359ab2ca9634df1b661cce346ac57ba5da714147fa27ad37f0dae624fec

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page