发布 v4.0:代码结构重构与错误处理优化
All checks were successful
continuous-integration/drone/push Build is passing

主要改进:
- 使用 dataclass 替代字典存储比赛数据,提高类型安全性
- 实现自动重试机制,添加指数退避
- 使用 Python logging 模块,支持多级别日志
- 拆分大函数为多个专门的方法,提高可维护性
- 实现优雅降级,单个失败不影响整体流程
- 将 v3 版本移至 legacy 目录存档

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Ching L 2025-09-12 17:58:02 +08:00
parent e72661f4cd
commit aa892e17fb
4 changed files with 1966 additions and 745 deletions

View File

@ -1,5 +1,27 @@
# Changelog # Changelog
## v4.0 - 2025-09-12 - 代码结构重构与错误处理优化
- **🏗️ 代码结构重构**
- 使用 `@dataclass` 替代字典存储比赛数据,提高类型安全性
- 拆分大函数 `sync_matches_to_calendar()` 为多个专门的方法
- 新增 `process_upcoming_matches()` 处理即将进行的比赛
- 新增 `process_completed_matches()` 处理已完成的比赛
- 新增 `clean_duplicate_and_expired_events()` 清理重复和过期事件
- 提取 `find_existing_event()` 统一事件查找逻辑
- **🔄 增强错误处理**
- 实现 `retry_on_exception` 装饰器,提供指数退避重试机制
- 所有网络请求Liquipedia 和 Google Calendar API都支持自动重试
- 单个比赛处理失败不影响整体同步流程(优雅降级)
- **📝 专业日志系统**
- 使用 Python `logging` 模块替代 `print` 语句
- 支持多级别日志DEBUG, INFO, WARNING, ERROR
- 添加时间戳和详细的异常堆栈信息
- 支持通过命令行参数调整日志级别
- **⚡ 性能和可维护性**
- 提取重复代码为独立方法(`_extract_score()`, `_extract_format()`, `_extract_tournament()`
- 改进的错误报告和调试信息
- 更好的代码组织和模块化设计
## v3.9 - 2025-09-12 - 增强TBD事件清理功能 ## v3.9 - 2025-09-12 - 增强TBD事件清理功能
- **自动删除已结束的TBD事件** - **自动删除已结束的TBD事件**
- 检查事件的结束时间如果已过且仍包含TBD则自动删除 - 检查事件的结束时间如果已过且仍包含TBD则自动删除
@ -157,15 +179,16 @@
| v3.7 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | | v3.7 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| v3.8 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | | v3.8 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| v3.9 | ✓ | ✓ | ✓ | ✓ | ✓+ | ✓ | | v3.9 | ✓ | ✓ | ✓ | ✓ | ✓+ | ✓ |
| v4.0 | ✓ | ✓ | ✓ | ✓ | ✓+ | ✓ |
## 使用建议 ## 使用建议
推荐使用最新的 v3 版本,它包含所有功能 推荐使用最新的 v4.0 版本,它包含所有功能并提供更好的错误处理
```bash ```bash
./run_sync.sh python sync_dota2_matches.py --calendar-id "YOUR_CALENDAR_ID"
``` ```
或手动运行 调试模式
```bash ```bash
python sync_dota2_matches_v3.py --calendar-id "YOUR_CALENDAR_ID" python sync_dota2_matches.py --calendar-id "YOUR_CALENDAR_ID" --log-level DEBUG
``` ```

View File

@ -1,7 +1,14 @@
# Dota 2 Calendar Sync v3.9 # Dota 2 Calendar Sync v4.0
自动从 Liquipedia 获取 Dota 2 Tier 1 比赛信息并同步到 Google Calendar支持自动更新比赛结果、时间变更、智能管理TBD占位事件、自动清理过期和重复比赛。 自动从 Liquipedia 获取 Dota 2 Tier 1 比赛信息并同步到 Google Calendar支持自动更新比赛结果、时间变更、智能管理TBD占位事件、自动清理过期和重复比赛。
**v4.0 新特性**
- 🏗️ 代码结构重构:使用 dataclass 替代字典,提高类型安全性
- 🔄 增强错误处理:添加自动重试机制(指数退避)
- 📝 专业日志系统:使用 Python logging 模块,支持多级别日志
- 🛡️ 优雅降级:部分失败不影响整体同步流程
- ⚡ 代码模块化:拆分大函数,提高可维护性
## 功能 ## 功能
- 自动获取 Liquipedia 上的 Tier 1 级别 Dota 2 比赛 - 自动获取 Liquipedia 上的 Tier 1 级别 Dota 2 比赛
@ -49,6 +56,9 @@ python sync_dota2_matches.py
# 指定特定的 Google Calendar # 指定特定的 Google Calendar
python sync_dota2_matches.py --calendar-id "091325d4ea74ad78387402db1a428390c4779dff573322863b6fca00194da024@group.calendar.google.com" python sync_dota2_matches.py --calendar-id "091325d4ea74ad78387402db1a428390c4779dff573322863b6fca00194da024@group.calendar.google.com"
# 使用调试模式查看详细日志
python sync_dota2_matches.py --log-level DEBUG
``` ```
### Dry Run 模式 ### Dry Run 模式
@ -66,10 +76,12 @@ python sync_dota2_matches.py --dry-run
- `--no-results`: 跳过更新已完成比赛的结果 - `--no-results`: 跳过更新已完成比赛的结果
- `--no-time-updates`: 跳过更新比赛时间变更 - `--no-time-updates`: 跳过更新比赛时间变更
- `--credentials`: 服务账号凭据文件路径(默认: credentials.json - `--credentials`: 服务账号凭据文件路径(默认: credentials.json
- `--log-level`: 设置日志级别 (DEBUG, INFO, WARNING, ERROR)
## 文件说明 ## 文件说明
- `sync_dota2_matches.py`: 主同步脚本v3版本 - `sync_dota2_matches.py`: 主同步脚本v4版本 - 优化版)
- `legacy/`: 历史版本脚本存档
- `credentials.json`: Google 服务账号凭据(需要自行添加) - `credentials.json`: Google 服务账号凭据(需要自行添加)
- `requirements.txt`: Python 依赖包 - `requirements.txt`: Python 依赖包
- `run_sync.sh`: 便捷运行脚本 - `run_sync.sh`: 便捷运行脚本

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff