handbook_engine / app /core /config.py
internationalscholarsprogram's picture
chore: remove unused database/SQLAlchemy dependency
158fe8d
"""Application configuration via environment variables."""
import os
from functools import lru_cache
from pydantic_settings import BaseSettings
class Settings(BaseSettings):
"""All config comes from environment variables or .env file."""
# App
app_name: str = "ISP Handbook Service"
app_version: str = "1.0.0"
debug: bool = False
port: int = 7860 # Hugging Face Spaces default
# External API endpoints (the source-of-truth JSON APIs)
handbook_general_endpoint: str = ""
university_handbook_endpoint: str = ""
api_base_url: str = "https://finsapdev.qhtestingserver.com"
general_sections_path: str = "/MODEL_APIS/handbook_general_sections.php"
university_sections_path: str = "/MODEL_APIS/university_handbook.php"
# Images
images_dir: str = "./images"
# Fonts
font_dir: str = "./fonts"
# CORS
cors_origins: str = "http://localhost:5173,http://127.0.0.1:5173,https://finsapdev.qhtestingserver.com"
# Request timeouts
http_timeout: int = 25
model_config = {"env_file": ".env", "env_file_encoding": "utf-8", "extra": "ignore"}
@property
def cors_origins_list(self) -> list[str]:
return [o.strip() for o in self.cors_origins.split(",") if o.strip()]
@property
def general_endpoint_url(self) -> str:
if self.handbook_general_endpoint:
return self.handbook_general_endpoint
return self.api_base_url.rstrip("/") + self.general_sections_path
@property
def university_endpoint_url(self) -> str:
if self.university_handbook_endpoint:
return self.university_handbook_endpoint
return self.api_base_url.rstrip("/") + self.university_sections_path
@lru_cache()
def get_settings() -> Settings:
return Settings()