from pydantic import field_validator
from pydantic_settings import BaseSettings, SettingsConfigDict
class Settings(BaseSettings):
"""Application settings with environment variable support."""
model_config = SettingsConfigDict(
env_file=".env",
env_file_encoding="utf-8",
case_sensitive=False
)
# Database settings
database_url: str = "sqlite:///./test.db"
# Security settings
secret_key: str = "change-this-in-production"
# Application settings
debug: bool = False
api_host: str = "localhost"
api_port: int = 8000
log_level: str = "info"
# External services
rabbitmq_url: str = "amqp://localhost:5672"
@field_validator("secret_key")
@classmethod
def validate_secret_key(cls, v: str) -> str:
if len(v) < 8:
raise ValueError("Secret key must be at least 8 characters long")
return v
@field_validator("log_level")
@classmethod
def validate_log_level(cls, v: str) -> str:
allowed_levels = ["debug", "info", "warning", "error", "critical"]
if v.lower() not in allowed_levels:
raise ValueError(f"Log level must be one of: {allowed_levels}")
return v.lower()
# Global settings instance
settings = Settings()