Files
house-elo-ranking/backend/app/config.py
2026-03-06 14:51:26 +00:00

58 lines
1.9 KiB
Python

"""Application configuration from environment variables."""
import os
from pathlib import Path
SQL_DIR = Path(__file__).parent / "sql"
class Settings:
"""Application settings loaded from environment variables.
Configure via DATABASE_URL (single connection string) or individual
POSTGRES_* variables.
"""
POSTGRES_HOST: str = os.getenv("POSTGRES_HOST", "localhost")
POSTGRES_PORT: int = int(os.getenv("POSTGRES_PORT", "5432"))
POSTGRES_USER: str = os.getenv("POSTGRES_USER", "postgres")
POSTGRES_PASSWORD: str = os.getenv("POSTGRES_PASSWORD", "postgres")
POSTGRES_DB: str = os.getenv("POSTGRES_DB", "postgres")
LISTINGS_SCHEMA: str = os.getenv("LISTINGS_SCHEMA", "marts")
LISTINGS_TABLE: str = os.getenv("LISTINGS_TABLE", "funda_listings")
ELO_SCHEMA: str = os.getenv("ELO_SCHEMA", "elo")
IMAGES_SCHEMA: str = os.getenv("IMAGES_SCHEMA", "raw_funda")
IMAGES_TABLE: str = os.getenv("IMAGES_TABLE", "listing_details")
K_FACTOR: float = float(os.getenv("ELO_K_FACTOR", "32"))
DEFAULT_ELO: float = float(os.getenv("ELO_DEFAULT_RATING", "1500"))
@property
def database_url(self) -> str:
url = os.getenv("DATABASE_URL")
if url:
return url
return (
f"postgresql+psycopg2://{self.POSTGRES_USER}:{self.POSTGRES_PASSWORD}"
f"@{self.POSTGRES_HOST}:{self.POSTGRES_PORT}/{self.POSTGRES_DB}"
)
settings = Settings()
def load_sql(name: str) -> str:
"""Load a SQL template from the sql/ directory and inject schema/table names."""
raw = (SQL_DIR / name).read_text()
replacements = {
"listings_schema": settings.LISTINGS_SCHEMA,
"listings_table": settings.LISTINGS_TABLE,
"elo_schema": settings.ELO_SCHEMA,
"images_schema": settings.IMAGES_SCHEMA,
"images_table": settings.IMAGES_TABLE,
}
for key, value in replacements.items():
raw = raw.replace("{{ " + key + " }}", value)
return raw