Type-Safe Settings with Pydantic
Load and validate environment variables into a typed settings object using pydantic-settings with defaults.
from pydantic_settings import BaseSettings
from pydantic import Field, field_validator
class Settings(BaseSettings):
# Database
database_url: str = Field(..., description="PostgreSQL connection string")
db_pool_size: int = Field(default=5, ge=1, le=50)
# Redis
redis_url: str = Field(default="redis://localhost:6379")
# App
debug: bool = Field(default=False)
secret_key: str = Field(..., min_length=32)
allowed_origins: list[str] = Field(default=["http://localhost:3000"])
# API
api_rate_limit: int = Field(default=100)
api_version: str = Field(default="v1")
model_config = {
"env_file": ".env",
"env_file_encoding": "utf-8",
"case_sensitive": False,
}
@field_validator("allowed_origins", mode="before")
@classmethod
def parse_origins(cls, v):
if isinstance(v, str):
return [s.strip() for s in v.split(",")]
return v
# Singleton pattern
_settings: Settings | None = None
def get_settings() -> Settings:
global _settings
if _settings is None:
_settings = Settings()
return _settings
# Usage:
# settings = get_settings()
# print(settings.database_url)
# print(settings.debug)Sponsored
Doppler — Secret management platform
Use Cases
- Application configuration
- 12-factor app settings
- Multi-environment configs
Tags
Related Snippets
Similar patterns you can reuse in the same workflow.
Pydantic Settings for Pipeline Config
Manage pipeline configuration from environment variables and .env files with Pydantic Settings.
Best for: pipeline configuration
Environment Variable Validator
Validates required environment variables at startup and returns a typed config object or throws with missing keys.
Best for: App startup validation
Type-Safe Configuration Loader
Load and validate configuration from environment variables with type coercion and required field checks.
Best for: Application configuration management
Environment Variable Validation
Validate required environment variables at build time with type-safe access and descriptive errors.
Best for: App startup checks