| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- """辅助工具函数"""
- import importlib
- from datetime import datetime
- from typing import Any, Dict, Optional
- from pathlib import Path
- def format_time(timestamp: Optional[datetime] = None, format_str: str = "%Y-%m-%d %H:%M:%S") -> str:
- """
- 格式化时间
-
- Args:
- timestamp: 时间戳,默认为当前时间
- format_str: 格式字符串
-
- Returns:
- 格式化后的时间字符串
- """
- if timestamp is None:
- timestamp = datetime.now()
- return timestamp.strftime(format_str)
- def validate_config(config: Dict[str, Any], required_keys: list) -> bool:
- """
- 验证配置是否包含必需的键
-
- Args:
- config: 配置字典
- required_keys: 必需的键列表
-
- Returns:
- 是否验证通过
- """
- missing_keys = [key for key in required_keys if key not in config]
- if missing_keys:
- raise ValueError(f"配置缺少必需的键: {missing_keys}")
- return True
- def safe_import(module_name: str, class_name: Optional[str] = None) -> Any:
- """
- 安全导入模块或类
-
- Args:
- module_name: 模块名
- class_name: 类名(可选)
-
- Returns:
- 导入的模块或类
- """
- try:
- module = importlib.import_module(module_name)
- if class_name:
- return getattr(module, class_name)
- return module
- except (ImportError, AttributeError) as e:
- raise ImportError(f"无法导入 {module_name}.{class_name or ''}: {e}")
- def ensure_dir(path: Path) -> Path:
- """确保目录存在"""
- path.mkdir(parents=True, exist_ok=True)
- return path
- def get_project_root() -> Path:
- """获取项目根目录"""
- return Path(__file__).parent.parent.parent
- def merge_dicts(dict1: Dict, dict2: Dict) -> Dict:
- """深度合并两个字典"""
- result = dict1.copy()
- for key, value in dict2.items():
- if key in result and isinstance(result[key], dict) and isinstance(value, dict):
- result[key] = merge_dicts(result[key], value)
- else:
- result[key] = value
- return result
|