54 lines
1.5 KiB
Python
54 lines
1.5 KiB
Python
"""Configuration settings using pydantic-settings."""
|
|
import os
|
|
from pydantic_settings import BaseSettings, SettingsConfigDict
|
|
from typing import Literal
|
|
|
|
|
|
def get_env_file() -> str:
|
|
"""Get the appropriate env file based on ENVIRONMENT variable."""
|
|
env = os.getenv("ENVIRONMENT", "development")
|
|
env_file = f".env.{env}"
|
|
|
|
# Check if env file exists, fallback to .env.development
|
|
if not os.path.exists(env_file):
|
|
env_file = ".env.development"
|
|
|
|
return env_file
|
|
|
|
|
|
class Settings(BaseSettings):
|
|
"""Application settings loaded from environment variables."""
|
|
|
|
# Database
|
|
database_url: str = "postgresql+asyncpg://sibu:sibu@localhost:5432/sibu"
|
|
|
|
# Google Maps (for server-side APIs)
|
|
google_maps_api_key: str = ""
|
|
google_maps_url_signing_secret: str = ""
|
|
|
|
# Environment
|
|
environment: Literal["development", "production", "testing"] = "development"
|
|
debug: bool = False
|
|
|
|
# Security
|
|
admin_password: str = "admin" # Default for development, override in .env
|
|
secret_key: str = "insecure-secret-key-dev" # Default for development, override in .env
|
|
|
|
model_config = SettingsConfigDict(
|
|
env_file=get_env_file(),
|
|
env_file_encoding="utf-8",
|
|
case_sensitive=False,
|
|
extra="ignore",
|
|
)
|
|
|
|
|
|
# Global settings instance
|
|
@property
|
|
def get_database_url(self) -> str:
|
|
url = self.database_url
|
|
if url.startswith("postgres://"):
|
|
url = url.replace("postgres://", "postgresql://", 1)
|
|
return url
|
|
|
|
settings = Settings()
|