import os from pathlib import Path from typing import Optional from dataclasses import dataclass from pydantic import BaseModel @dataclass class DatabaseConfig: url: str = "sqlite:///./data/alert_platform.db" @dataclass class OSSConfig: access_key_id: str = "" access_key_secret: str = "" endpoint: str = "oss-cn-hangzhou.aliyuncs.com" bucket_name: str = "" url_prefix: str = "" @dataclass class AppConfig: host: str = "0.0.0.0" port: int = 8000 debug: bool = True @dataclass class AIModelConfig: endpoint: str = "" api_key: str = "" class Settings(BaseModel): database: DatabaseConfig = DatabaseConfig() oss: OSSConfig = OSSConfig() app: AppConfig = AppConfig() ai_model: AIModelConfig = AIModelConfig() def load_settings() -> Settings: from dotenv import load_dotenv load_dotenv() return Settings( database=DatabaseConfig( url=os.getenv("DATABASE_URL", "sqlite:///./data/alert_platform.db"), ), oss=OSSConfig( access_key_id=os.getenv("OSS_ACCESS_KEY_ID", ""), access_key_secret=os.getenv("OSS_ACCESS_KEY_SECRET", ""), endpoint=os.getenv("OSS_ENDPOINT", "oss-cn-hangzhou.aliyuncs.com"), bucket_name=os.getenv("OSS_BUCKET_NAME", ""), url_prefix=os.getenv("OSS_URL_PREFIX", ""), ), app=AppConfig( host=os.getenv("APP_HOST", "0.0.0.0"), port=int(os.getenv("APP_PORT", "8000")), debug=os.getenv("DEBUG", "true").lower() == "true", ), ai_model=AIModelConfig( endpoint=os.getenv("AI_MODEL_ENDPOINT", ""), api_key=os.getenv("AI_MODEL_API_KEY", ""), ), ) settings = load_settings()