from __future__ import annotations import os from pathlib import Path from urllib.parse import quote_plus from dotenv import load_dotenv BASE_DIR = Path(__file__).resolve().parent.parent DEFAULT_SQLITE_PATH = BASE_DIR / "instance" / "ksp.sqlite3" load_dotenv(BASE_DIR / ".env") def _build_database_uri() -> str: host = os.getenv("PGHOST") port = os.getenv("PGPORT") user = os.getenv("PGUSER") password = os.getenv("PGPASSWORD") database = os.getenv("PGDATABASE") if all([host, port, user, password, database]): return ( "postgresql+psycopg://" f"{quote_plus(user)}:{quote_plus(password)}@{host}:{port}/{quote_plus(database)}" ) DEFAULT_SQLITE_PATH.parent.mkdir(parents=True, exist_ok=True) return f"sqlite:///{DEFAULT_SQLITE_PATH.as_posix()}" class Config: APP_ENV = os.getenv("APP_ENV", "development") APP_PORT = int(os.getenv("APP_PORT", "8000")) APP_SECRET_KEY = os.getenv("APP_SECRET_KEY", "development-only-secret-key") PROJECT_TITLE = os.getenv("PROJECT_TITLE", "KSP Data Hangar") WORKBOOK_PATH = os.getenv("WORKBOOK_PATH", "KSP Engine Tweak Chart.xlsx") SQLALCHEMY_DATABASE_URI = _build_database_uri() SQLALCHEMY_TRACK_MODIFICATIONS = False SQLALCHEMY_ECHO = os.getenv("SQLALCHEMY_ECHO", "false").lower() == "true" SECRET_KEY = APP_SECRET_KEY