#!/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