55 lines
1.8 KiB
Python
55 lines
1.8 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()
|
|
return raw.format(
|
|
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,
|
|
)
|