Settings management using Pydantic with support for multiple configuration sources including environment variables, configuration files, CLI arguments, and cloud secret management services
npx @tessl/cli install tessl/pypi-pydantic-settings@2.10.0Settings management using Pydantic with support for multiple configuration sources including environment variables, configuration files, CLI arguments, and cloud secret management services. This library provides type-safe configuration handling with automatic validation, parsing, and serialization capabilities for enterprise applications and microservices.
pip install pydantic-settingsfrom pydantic_settings import BaseSettings, SettingsConfigDictFor specific sources and functionality:
from pydantic_settings import (
EnvSettingsSource,
DotEnvSettingsSource,
JsonConfigSettingsSource,
YamlConfigSettingsSource,
CliSettingsSource,
AWSSecretsManagerSettingsSource,
AzureKeyVaultSettingsSource,
GoogleSecretManagerSettingsSource,
SettingsError
)from pydantic_settings import BaseSettings
from pydantic import Field
class AppSettings(BaseSettings):
app_name: str = "My App"
debug: bool = False
database_url: str = Field(..., description="Database connection URL")
api_key: str = Field(..., description="API key for external service")
model_config = SettingsConfigDict(
env_prefix='MYAPP_',
env_file='.env'
)
# Settings loaded from env vars, .env file, and init arguments
settings = AppSettings()
print(f"App: {settings.app_name}, Debug: {settings.debug}")
# Override with explicit values
settings = AppSettings(debug=True, database_url="postgresql://localhost/dev")Pydantic Settings uses a source-based architecture where configuration values are loaded from multiple sources in priority order:
settings_customise_sources() methodThe library is designed for maximum flexibility in enterprise applications, supporting everything from simple environment variable loading to complex multi-source configuration with cloud secret management integration.
Central BaseSettings class and configuration management providing the foundation for all settings functionality including source customization, validation, and type safety.
class BaseSettings:
def __init__(self, **kwargs): ...
@classmethod
def settings_customise_sources(cls, settings_cls, init_settings, env_settings, dotenv_settings, file_secret_settings) -> tuple: ...
class SettingsConfigDict:
case_sensitive: bool
env_prefix: str
env_file: str | None
cli_parse_args: bool | list[str] | None
secrets_dir: str | NoneLoad configuration from environment variables, .env files, and various configuration file formats including JSON, YAML, TOML, and Docker/Kubernetes secrets.
class EnvSettingsSource: ...
class DotEnvSettingsSource: ...
class JsonConfigSettingsSource: ...
class YamlConfigSettingsSource: ...
class TomlConfigSettingsSource: ...
class SecretsSettingsSource: ...CLI argument parsing and settings generation with support for subcommands, flags, positional arguments, and running Pydantic models as CLI applications.
class CliSettingsSource: ...
class CliApp:
@staticmethod
def run(model_cls, cli_args=None, **kwargs): ...
@staticmethod
def run_subcommand(model, **kwargs): ...
# CLI annotations
CliSubCommand = Annotated[Union[T, None], _CliSubCommand]
CliPositionalArg = Annotated[T, _CliPositionalArg]
CliImplicitFlag = Annotated[bool, _CliImplicitFlag]
CliExplicitFlag = Annotated[bool, _CliExplicitFlag]Integration with major cloud providers' secret management services including AWS Secrets Manager, Azure Key Vault, and Google Secret Manager.
class AWSSecretsManagerSettingsSource: ...
class AzureKeyVaultSettingsSource: ...
class GoogleSecretManagerSettingsSource: ...class SettingsError(ValueError):
"""Base exception for settings-related errors."""
# Type aliases and definitions
PathType = Union[Path, str, Sequence[Union[Path, str]]]
DotenvType = Union[Path, str, Sequence[Union[Path, str]]]
PydanticModel = TypeVar('PydanticModel', bound=Union[PydanticDataclass, BaseModel])
EnvNoneType = str # Special string type for environment None values
# Base Settings Source Classes
class PydanticBaseSettingsSource:
"""Abstract base class for all settings sources."""
def __init__(self, settings_cls: type[BaseSettings]): ...
def __call__(self) -> dict[str, Any]: ...
def __repr__(self) -> str: ...
class PydanticBaseEnvSettingsSource(PydanticBaseSettingsSource):
"""Base class for environment-based settings sources."""
def __init__(
self,
settings_cls: type[BaseSettings],
case_sensitive: bool | None = None,
env_prefix: str | None = None,
): ...
class DefaultSettingsSource(PydanticBaseSettingsSource):
"""Source for default field values."""
def __init__(
self,
settings_cls: type[BaseSettings],
nested_model_default_partial_update: bool | None = None,
): ...
class InitSettingsSource(PydanticBaseSettingsSource):
"""Source for initialization arguments."""
def __init__(
self,
settings_cls: type[BaseSettings],
init_kwargs: dict[str, Any],
nested_model_default_partial_update: bool | None = None,
): ...
class ConfigFileSourceMixin:
"""Mixin for configuration file sources."""
def __init__(self, **kwargs): ...
# Decoding control annotations
class NoDecode:
"""Annotation to prevent decoding of a field value."""
class ForceDecode:
"""Annotation to force decoding of a field value."""
# Constants
DEFAULT_PATH: PathType = Path('')
ENV_FILE_SENTINEL: DotenvType = Path('')
CLI_SUPPRESS: str # From argparse.SUPPRESS
# Utility Functions
def get_subcommand(model, is_required=True, cli_exit_on_error=None) -> Optional[PydanticModel]: ...
def read_env_file(file_path, *, encoding=None, case_sensitive=False, ignore_empty=False, parse_none_str=None) -> Mapping[str, str | None]:
"""
Read and parse environment files.
Note: This function is deprecated and will be removed in the next version.
Use DotEnvSettingsSource._static_read_env_file if needed.
"""
# Version
__version__: str = "2.10.1"