import logging from typing import Optional from functools import lru_cache from pydantic import SecretStr from pydantic_settings import BaseSettings, SettingsConfigDict def setup_logging(): """Configure logging for the application.""" logging.basicConfig( level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', datefmt='%Y-%m-%d %H:%M:%S' ) class Settings(BaseSettings): """Application settings that are loaded from environment variables.""" # API Keys anthropic_api_key: SecretStr unsplash_api_key: SecretStr # Optional configuration output_directory: str = "output" media_directory: str = "media" default_deck_name: str = "German Vocabulary" # Model configuration (optional, can be expanded) anthropic_model: str = "claude-3-opus-20240229" max_tokens: int = 1000 temperature: float = 0 # Image configuration image_max_width: int = 800 image_max_height: int = 600 image_quality: int = 85 # File handling file_encoding: str = "utf-8" model_config = SettingsConfigDict( env_file=".env", env_file_encoding="utf-8", case_sensitive=False, # This allows for both ANTHROPIC_API_KEY and anthropic_api_key in .env env_nested_delimiter='__' ) @lru_cache def get_settings() -> Settings: """ Get settings instance with caching. Returns: Settings: Application settings instance """ setup_logging() return Settings()