Pydantic: Cómo cargar y almacenar modelo en archivo YAML (ejemplo mínimo)

Aquí hay un ejemplo mínimo de cómo cargar y almacenar un modelo Pydantic en un archivo YAML.

Este código incluye lógica para seleccionar el primer path que sea escribible, lo que hace fácil usarlo p. ej. tanto en un contenedor como para desarrollo local

pydantic_yaml_example.py
from pydantic import BaseModel, ValidationError, Field
import yaml
import os

class MySettings(BaseModel):
    variable1: float = Field(default=1.5, help="TODO enter your description here")
    variable2: str = Field(default="foobar", help="TODO enter your description here")

    _default_paths = ['/data/settings.yaml', './settings.yaml']

    @classmethod
    def from_yaml(cls) -> 'MySettings':
        for path in cls._default_paths.default:
            if os.path.exists(path):
                with open(path, 'r', encoding="utf-8") as f:
                    data = yaml.safe_load(f)
                return cls(**data)
        # Si no existen archivos, retornar una instancia de Settings con valores por defecto
        print(f"Ninguno de los archivos de settings encontrado en {cls._default_paths}. Inicializando con valores por defecto.")
        _settings = cls()
        _settings.save_to_first_writable_path()
        return _settings

    def save_to_first_writable_path(self) -> None:
        for path in self._default_paths:
            try:
                with open(path, 'w', encoding="utf-8") as f:
                    yaml.safe_dump(self.model_dump(), f)
                print(f"Settings guardados en {path}")
                return
            except IOError:
                print(f"No se puede escribir en {path}")
        raise IOError(f"Ninguno de los paths en {self._default_paths} son escribibles.")

    def to_yaml(self) -> None:
        self.save_to_first_writable_path()

# Singleton global de settings
global_settings = MySettings.from_yaml()

Cuando se cambia, puedes guardarlo usando

pydantic_yaml_save.py
global_settings.save_to_first_writable_path()

Echa un vistazo a artículos similares por categoría: Pydantic Python