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