Files
SneakySwole/app/config.py
2026-02-24 09:04:41 -06:00

54 lines
1.5 KiB
Python

"""Application configuration loader.
Reads environment variables (with .env file support) and provides
a typed, validated Settings object used throughout the application.
"""
from functools import lru_cache
from pathlib import Path
from dotenv import load_dotenv
from pydantic_settings import BaseSettings
from pydantic_settings import SettingsConfigDict
# Load .env file from project root
_env_path = Path(__file__).resolve().parent.parent / ".env"
load_dotenv(_env_path)
class Settings(BaseSettings):
"""Typed application settings loaded from environment variables.
Attributes:
admin_username: Admin login username (from ADMIN_USERNAME env var).
admin_password: Admin login password (from ADMIN_PASSWORD env var).
app_env: Runtime environment — 'development' or 'production'.
app_host: Host address to bind the server to.
app_port: Port number for the server.
app_log_level: Minimum log level for structlog output.
database_url: SQLite connection string.
"""
admin_username: str
admin_password: str
app_env: str = "development"
app_host: str = "0.0.0.0"
app_port: int = 8000
app_log_level: str = "info"
database_url: str = "sqlite:///data/sneakyswole.db"
model_config = SettingsConfigDict(
env_file=".env",
env_file_encoding="utf-8",
)
@lru_cache(maxsize=1)
def get_settings() -> Settings:
"""Return a cached Settings instance (singleton pattern).
Returns:
The application Settings object.
"""
return Settings()