Files
DinQuant/backend_api_python/app/config/database.py
T
TIANHE 50939212be new
Signed-off-by: TIANHE <TIANHE@GMAIL.COM>
2025-12-30 21:02:50 +08:00

110 lines
2.8 KiB
Python

"""
数据库和缓存配置
"""
import os
class MetaRedisConfig(type):
"""Redis 配置"""
@property
def HOST(cls):
return os.getenv('REDIS_HOST', 'localhost')
@property
def PORT(cls):
return int(os.getenv('REDIS_PORT', 6379))
@property
def PASSWORD(cls):
return os.getenv('REDIS_PASSWORD', None)
@property
def DB(cls):
return int(os.getenv('REDIS_DB', 0))
@property
def CONNECT_TIMEOUT(cls):
return int(os.getenv('REDIS_CONNECT_TIMEOUT', 5))
@property
def SOCKET_TIMEOUT(cls):
return int(os.getenv('REDIS_SOCKET_TIMEOUT', 5))
@property
def MAX_CONNECTIONS(cls):
return int(os.getenv('REDIS_MAX_CONNECTIONS', 10))
class RedisConfig(metaclass=MetaRedisConfig):
"""Redis 缓存配置"""
@classmethod
def get_url(cls) -> str:
"""获取 Redis 连接 URL"""
if cls.PASSWORD:
return f"redis://:{cls.PASSWORD}@{cls.HOST}:{cls.PORT}/{cls.DB}"
return f"redis://{cls.HOST}:{cls.PORT}/{cls.DB}"
class MetaSQLiteConfig(type):
"""SQLite 配置"""
@property
def DATABASE_FILE(cls):
# 默认放在 backend_api_python/data 目录(更干净,也与 docker-compose 挂载一致)
base_dir = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
default_path = os.path.join(base_dir, 'data', 'quantdinger.db')
return os.getenv('SQLITE_DATABASE_FILE', default_path)
class SQLiteConfig(metaclass=MetaSQLiteConfig):
"""SQLite 数据库配置"""
@classmethod
def get_path(cls) -> str:
"""获取数据库文件路径"""
return cls.DATABASE_FILE
class MetaCacheConfig(type):
"""缓存业务配置"""
@property
def ENABLED(cls):
# 强制默认关闭,除非环境变量显式开启
return os.getenv('CACHE_ENABLED', 'False').lower() == 'true'
@property
def DEFAULT_EXPIRE(cls):
return int(os.getenv('CACHE_EXPIRE', 300))
@property
def KLINE_CACHE_TTL(cls):
return {
'1m': 5, # 1分钟K线缓存5秒
'3m': 30, # 3分钟K线缓存30秒
'5m': 60, # 5分钟K线缓存1分钟
'15m': 300, # 15分钟K线缓存5分钟
'30m': 300, # 30分钟K线缓存5分钟
'1H': 300, # 1小时K线缓存5分钟
'4H': 300, # 4小时K线缓存5分钟
'1D': 300, # 日K线缓存5分钟
# 兼容小写
'1h': 300,
'4h': 300,
'1d': 300,
}
@property
def ANALYSIS_CACHE_TTL(cls):
return 3600
@property
def PRICE_CACHE_TTL(cls):
return 10
class CacheConfig(metaclass=MetaCacheConfig):
"""缓存配置"""
pass