1
0

helpers.py 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. """辅助工具函数"""
  2. import importlib
  3. from datetime import datetime
  4. from typing import Any, Dict, Optional
  5. from pathlib import Path
  6. def format_time(timestamp: Optional[datetime] = None, format_str: str = "%Y-%m-%d %H:%M:%S") -> str:
  7. """
  8. 格式化时间
  9. Args:
  10. timestamp: 时间戳,默认为当前时间
  11. format_str: 格式字符串
  12. Returns:
  13. 格式化后的时间字符串
  14. """
  15. if timestamp is None:
  16. timestamp = datetime.now()
  17. return timestamp.strftime(format_str)
  18. def validate_config(config: Dict[str, Any], required_keys: list) -> bool:
  19. """
  20. 验证配置是否包含必需的键
  21. Args:
  22. config: 配置字典
  23. required_keys: 必需的键列表
  24. Returns:
  25. 是否验证通过
  26. """
  27. missing_keys = [key for key in required_keys if key not in config]
  28. if missing_keys:
  29. raise ValueError(f"配置缺少必需的键: {missing_keys}")
  30. return True
  31. def safe_import(module_name: str, class_name: Optional[str] = None) -> Any:
  32. """
  33. 安全导入模块或类
  34. Args:
  35. module_name: 模块名
  36. class_name: 类名(可选)
  37. Returns:
  38. 导入的模块或类
  39. """
  40. try:
  41. module = importlib.import_module(module_name)
  42. if class_name:
  43. return getattr(module, class_name)
  44. return module
  45. except (ImportError, AttributeError) as e:
  46. raise ImportError(f"无法导入 {module_name}.{class_name or ''}: {e}")
  47. def ensure_dir(path: Path) -> Path:
  48. """确保目录存在"""
  49. path.mkdir(parents=True, exist_ok=True)
  50. return path
  51. def get_project_root() -> Path:
  52. """获取项目根目录"""
  53. return Path(__file__).parent.parent.parent
  54. def merge_dicts(dict1: Dict, dict2: Dict) -> Dict:
  55. """深度合并两个字典"""
  56. result = dict1.copy()
  57. for key, value in dict2.items():
  58. if key in result and isinstance(result[key], dict) and isinstance(value, dict):
  59. result[key] = merge_dicts(result[key], value)
  60. else:
  61. result[key] = value
  62. return result