crypto.ai/cryptoai/utils/config_loader.py
2025-04-28 16:30:08 +08:00

140 lines
4.6 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os
import yaml
from typing import Dict, Any, Optional
class ConfigLoader:
"""配置加载器,用于读取和获取配置信息"""
def __init__(self, config_path: Optional[str] = None):
"""
初始化配置加载器
Args:
config_path: 配置文件路径如果为None则使用默认路径
"""
if config_path is None:
# 默认配置文件路径
current_dir = os.path.dirname(os.path.abspath(__file__))
config_dir = os.path.join(os.path.dirname(current_dir), 'config')
config_path = os.path.join(config_dir, 'config.yaml')
# 如果默认配置文件不存在,则使用示例配置文件
if not os.path.exists(config_path):
config_path = os.path.join(config_dir, 'config.example.yaml')
print(f"配置文件 config.yaml 不存在,使用示例配置文件: {config_path}")
self.config_path = config_path
# 加载配置
self.config = self._load_config()
# 确保database配置存在
if 'database' not in self.config:
self.config['database'] = {
'host': 'gz-cynosdbmysql-grp-2j1cnopr.sql.tencentcdb.com',
'port': 27469,
'user': 'root',
'password': 'Aa#223388',
'db_name': 'cryptoai'
}
def _load_config(self) -> Dict[str, Any]:
"""
加载配置文件
Returns:
配置字典
"""
try:
with open(self.config_path, 'r', encoding='utf-8') as f:
config = yaml.safe_load(f)
print(f"已加载配置文件: {self.config_path}")
return config
except Exception as e:
print(f"加载配置文件失败: {e}")
return {}
def get_config(self, section: str) -> Dict[str, Any]:
"""
获取指定部分的配置
Args:
section: 配置部分名称
Returns:
配置字典
"""
return self.config.get(section, {})
def get_binance_config(self) -> Dict[str, Any]:
"""获取Binance配置"""
return self.get_config('binance')
def get_okx_config(self) -> Dict[str, Any]:
"""获取OKX配置"""
return self.get_config('okx')
def get_deepseek_config(self) -> Dict[str, Any]:
"""获取DeepSeek配置"""
return self.get_config('deepseek')
def get_alltick_config(self) -> Dict[str, Any]:
"""获取AllTick配置"""
return self.get_config('alltick')
def get_crypto_config(self) -> Dict[str, Any]:
"""获取加密货币配置"""
return self.get_config('crypto')
def get_data_config(self) -> Dict[str, Any]:
"""获取数据配置"""
return self.get_config('data')
def get_agent_config(self) -> Dict[str, Any]:
"""获取Agent配置"""
return self.get_config('agent')
def get_logging_config(self) -> Dict[str, Any]:
"""获取日志配置"""
return self.get_config('logging')
def get_dingtalk_config(self) -> Dict[str, Any]:
"""获取钉钉机器人配置"""
return self.get_config('dingtalk')
def get_database_config(self) -> Dict[str, Any]:
"""获取数据库配置"""
# 首先从配置文件获取
db_config = self.get_config('database')
# 使用环境变量覆盖(如果存在)
if os.environ.get('DB_HOST'):
db_config['host'] = os.environ.get('DB_HOST')
if os.environ.get('DB_PORT'):
db_config['port'] = int(os.environ.get('DB_PORT'))
if os.environ.get('DB_USER'):
db_config['user'] = os.environ.get('DB_USER')
if os.environ.get('DB_PASSWORD'):
db_config['password'] = os.environ.get('DB_PASSWORD')
if os.environ.get('DB_NAME'):
db_config['db_name'] = os.environ.get('DB_NAME')
# 确保返回默认值(如果配置不存在)
default_config = {
'host': 'gz-cynosdbmysql-grp-2j1cnopr.sql.tencentcdb.com',
'port': 27469,
'user': 'root',
'password': 'Aa#223388',
'db_name': 'cryptoai'
}
# 合并默认配置和实际配置
for key, value in default_config.items():
if key not in db_config:
db_config[key] = value
return db_config