refactor(sync): 引入 SyncRegistry 注册表模式管理同步任务

- 新增 sync_registry.py 模块,提供统一的同步任务注册和管理机制
- 在 api_wrappers/__init__.py 中实现自动注册逻辑,新增接口无需修改 sync.py
- 重构 sync_all_data() 函数,使用注册表模式替代手动罗列,代码从 400+ 行精简至 293 行
- 新增 selected 参数,支持选择性执行特定同步任务
- 新增 list_sync_tasks() 函数,方便查看所有已注册任务
This commit is contained in:
2026-03-05 21:11:18 +08:00
parent 5a1f278df8
commit aefe6d06cf
3 changed files with 485 additions and 155 deletions

View File

@@ -88,6 +88,7 @@ __all__ = [
# Historical stock list
"get_bak_basic",
"sync_bak_basic",
"BakBasicSync",
# Namechange
"get_namechange",
"sync_namechange",
@@ -105,3 +106,77 @@ __all__ = [
"sync_stock_st",
"StockSTSync",
]
# =============================================================================
# 自动注册同步任务到 SyncRegistry
# 这样 sync.py 不需要手动罗列各个接口
# =============================================================================
try:
from src.data.sync_registry import sync_registry
# 1. Trade Calendar - 最高优先级,其他任务可能依赖
sync_registry.register_func(
name="trade_cal",
sync_func=sync_trade_cal_cache,
display_name="交易日历",
description="交易日期缓存",
order=1,
)
# 2. Stock Basic - 基础数据
sync_registry.register_func(
name="stock_basic",
sync_func=sync_all_stocks,
display_name="股票基本信息",
description="所有上市/退市股票的基础信息",
order=2,
)
# 3. Pro Bar - 通用行情(推荐用于替代日线)
from src.data.api_wrappers.api_pro_bar import ProBarSync
sync_registry.register_class(
name="pro_bar",
sync_class=ProBarSync,
display_name="Pro Bar 数据",
description="包含复权因子、换手率、量比的数据",
order=10,
)
# 4. Daily Basic - 每日指标
from src.data.api_wrappers.api_daily_basic import DailyBasicSync
sync_registry.register_class(
name="daily_basic",
sync_class=DailyBasicSync,
display_name="每日指标",
description="市盈率、市净率、换手率、市值等指标",
order=20,
)
# 5. Bak Basic - 历史股票列表
from src.data.api_wrappers.api_bak_basic import BakBasicSync
sync_registry.register_class(
name="bak_basic",
sync_class=BakBasicSync,
display_name="历史股票列表",
description="历史股票列表(包含退市股票)",
order=30,
)
# 6. ST Stock - ST股票列表
from src.data.api_wrappers.api_stock_st import StockSTSync
sync_registry.register_class(
name="stock_st",
sync_class=StockSTSync,
display_name="ST股票列表",
description="ST股票历史记录",
order=40,
)
except ImportError:
# sync_registry 可能不存在(首次导入),忽略
pass