45 lines
1.3 KiB
Python
45 lines
1.3 KiB
Python
from functools import lru_cache
|
|
from pathlib import Path
|
|
|
|
from dotenv import load_dotenv
|
|
from pydantic_settings import BaseSettings, SettingsConfigDict
|
|
|
|
|
|
class Settings(BaseSettings):
|
|
# Prefer backend-specific env file to avoid collisions with legacy root .env
|
|
model_config = SettingsConfigDict(
|
|
env_file=("backend/.env", ".env"),
|
|
env_file_encoding="utf-8",
|
|
extra="ignore",
|
|
)
|
|
|
|
app_env: str = "development"
|
|
app_name: str = "rss-news-backend"
|
|
app_secret_key: str = "replace-with-a-long-random-secret"
|
|
|
|
app_admin_username: str = "admin"
|
|
app_admin_password: str = "change-me"
|
|
|
|
session_cookie_name: str = "rss_news_session"
|
|
session_max_age_seconds: int = 28800
|
|
|
|
app_db_path: str = "backend/data/rss_news.db"
|
|
|
|
wordpress_base_url: str | None = None
|
|
wordpress_username: str | None = None
|
|
wordpress_app_password: str | None = None
|
|
wordpress_default_status: str = "draft"
|
|
|
|
|
|
@lru_cache(maxsize=1)
|
|
def get_settings() -> Settings:
|
|
# Prefer shared legacy env from the original rss-news workspace if present.
|
|
env_candidates = (
|
|
Path("/Users/oliver/Documents/rss-news/.env"),
|
|
Path("backend/.env"),
|
|
Path(".env"),
|
|
)
|
|
for env_path in env_candidates:
|
|
if env_path.exists():
|
|
load_dotenv(env_path, override=False)
|
|
return Settings()
|