Source code for structum_lab.plugins.dynaconf.core.director

"""Direttore della Configurazione (Parte del Builder Pattern).

Questo modulo definisce la classe `ConfigDirector`, che implementa il ruolo
del "Director" nel design pattern Builder. La sua unica responsabilità è
orchestrare il processo di costruzione di un oggetto di configurazione,
chiamando i metodi di un `AbstractConfigBuilder` in una sequenza specifica.

Il Director disaccoppia il client (il `ConfigManager`) dal processo di
costruzione concreto, permettendo al `ConfigManager` di sapere solo che ha
bisogno di una configurazione, senza dover conoscere i passaggi esatti
necessari per costruirla.

Architettura:
    [ConfigManager] -> [ConfigDirector] -> [SpecificConfigBuilder]
"""

from typing import TypeVar
from pydantic import BaseModel

from structum_lab.plugins.dynaconf.core.builders import AbstractConfigBuilder

# TypeVar generico per qualsiasi modello Pydantic
T = TypeVar("T", bound=BaseModel)


[docs] class ConfigDirector: """Orchestra il processo di costruzione della configurazione. Questa classe è stateless e fornisce un unico metodo statico `construct` per eseguire la sequenza di costruzione. Non ha conoscenza dei dettagli specifici di come viene costruita una configurazione (es. quali file vengono letti); delega questi dettagli interamente al builder che riceve. """
[docs] @staticmethod def construct(builder: AbstractConfigBuilder[T]) -> T: """Costruisce un oggetto di configurazione usando il builder fornito. Questo metodo esegue la "ricetta" standard per la costruzione di qualsiasi configurazione nel sistema: 1. Chiama `load_settings()` sul builder per caricare tutti i dati grezzi da file e variabili d'ambiente in un oggetto Dynaconf. 2. Passa l'oggetto Dynaconf risultante al metodo `create_config_model()` del builder, che si occuperà della validazione tramite Pydantic e della creazione del modello finale. Args: builder: Un'istanza concreta di `AbstractConfigBuilder` che sa come costruire un tipo specifico di configurazione. Returns: Un'istanza del modello di configurazione Pydantic, completamente validata e pronta all'uso. """ settings_data = builder.load_settings() config_model = builder.create_config_model(settings_data) return config_model