import os from functools import lru_cache from pathlib import Path from pydantic_settings import BaseSettings, SettingsConfigDict from typing import Optional from utils.logger import setup_logger logger = setup_logger() def resolve_env_file() -> Optional[str]: env = os.getenv("ENVIRONMENT", "local") backend_dir = Path(__file__).resolve().parents[1] if env == "local": env_file = backend_dir / ".env" logger.debug("USING ENV FILE:", env_file) return str(env_file) if env == "test": env_file = backend_dir / ".env.test" logger.debug("USING ENV FILE:", env_file) return str(env_file) # prod = no env file return None class Settings(BaseSettings): API_KEY: str = "changeme" API_KEY_NAME: str = "X-API-KEY" SECRET_KEY: str = "changeme" ENVIRONMENT: str = "changeme" DATA_BUCKET: str = "changeme" PLAN_TRIGGER_BUCKET: str ENGINE_SQS_URL: str = "changeme" # Third parties EPC_AUTH_TOKEN: str = "changeme" GOOGLE_SOLAR_API_KEY: str = "changeme" # Database settings DB_HOST: str = "changeme" DB_PASSWORD: str = "changeme" DB_USERNAME: str = "changeme" DB_PORT: str = "changeme" DB_NAME: str = "changeme" # Prediction buckets SAP_PREDICTIONS_BUCKET: str = "changeme" CARBON_PREDICTIONS_BUCKET: str = "changeme" HEAT_PREDICTIONS_BUCKET: str = "changeme" # LIGHTING_COST_PREDICTIONS_BUCKET: str # HEATING_COST_PREDICTIONS_BUCKET: str # HOT_WATER_COST_PREDICTIONS_BUCKET: str HEATING_KWH_PREDICTIONS_BUCKET: str = "changeme" HOTWATER_KWH_PREDICTIONS_BUCKET: str = "changeme" # Other S3 buckts ENERGY_ASSESSMENTS_BUCKET: str = "changeme" # Optional AWS creds (only required in local) AWS_ACCESS_KEY_ID: Optional[str] = None AWS_SECRET_KEY_ID: Optional[str] = None AWS_DEFAULT_REGION: Optional[str] = None model_config = SettingsConfigDict( env_file=resolve_env_file(), env_file_encoding="utf-8", ) @lru_cache() def get_settings(): return Settings() @lru_cache() def get_prediction_buckets(): return { "sap_change_predictions": get_settings().SAP_PREDICTIONS_BUCKET, "heat_demand_predictions": get_settings().HEAT_PREDICTIONS_BUCKET, "carbon_change_predictions": get_settings().CARBON_PREDICTIONS_BUCKET, "heating_kwh_predictions": get_settings().HEATING_KWH_PREDICTIONS_BUCKET, "hotwater_kwh_predictions": get_settings().HOTWATER_KWH_PREDICTIONS_BUCKET, }