You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

72 lines
1.8 KiB

"""
应用配置模块
"""
import os
from typing import Optional
from pydantic_settings import BaseSettings
from pydantic import Field
from sqlalchemy.orm import Session
class Settings(BaseSettings):
"""应用配置类"""
# 应用配置
APP_NAME: str = "AmazingData金融数据服务平台"
APP_VERSION: str = "1.0.0"
DEBUG: bool = Field(default=True, env="DEBUG")
# 数据库配置 - 使用SQLite简化演示
DATABASE_URL: str = Field(
default="sqlite:///./amazing_data.db",
env="DATABASE_URL"
)
# Redis配置
REDIS_URL: str = Field(
default="redis://localhost:6379/0",
env="REDIS_URL"
)
# JWT配置
SECRET_KEY: str = Field(
default="your-secret-key-change-in-production",
env="SECRET_KEY"
)
ACCESS_TOKEN_EXPIRE_HOURS: int = Field(default=24, env="ACCESS_TOKEN_EXPIRE_HOURS")
ALGORITHM: str = "HS256"
# 缓存配置
CACHE_DEFAULT_PERIOD: str = "daily"
CACHE_DEFAULT_DAYS: int = 365
CACHE_AUTO_CLEANUP_DAYS: int = 7
CACHE_BATCH_SIZE: int = 100
CACHE_MISSING_THRESHOLD: float = 0.1
# 实时数据配置
REALTIME_SUBSCRIBE_INTERVAL: int = 1000
class Config:
env_file = ".env"
case_sensitive = True
# 全局配置实例
settings = Settings()
def load_system_configs(db: Session):
"""
从数据库加载系统配置到全局settings
注意这需要在数据库初始化后调用
"""
from app.services.config_service import ConfigService
system_configs = ConfigService.get_all_system_configs(db)
if "DATABASE_URL" in system_configs:
settings.DATABASE_URL = system_configs["DATABASE_URL"]
if "REDIS_URL" in system_configs:
settings.REDIS_URL = system_configs["REDIS_URL"]