shangfangjian
|
b9d7b6423e
|
test(c2): 补齐导入次序回归,注明环状导入为预期且可自愈
test_bzzoiro_source_registry.py 增至 11 项:
- 新增 TestImportOrderSelfHeal:用独立子进程验证两种真实导入次序
(sources 先 / bzzoiro 先)下注册表均可用。该缺陷只在真实模块初始化
时序下成立,mock 照不出来,故不 mock。
- 新增未知名字仍抛 ValueError 的契约守卫。
src/data/sources.py:补全 _load_sources 文档,说明首次装载失败属正常的
环状导入(bzzoiro 仍在初始化),失败时保持 _loaded=False 使后续
get_source()/list_sources() 调用可重试装载(自愈)。
验证:
- tests/test_bzzoiro_source_registry.py:11 passed
- 两种导入次序实测均输出 bzzoiro ['bzzoiro']
|
2026-09-21 17:13:57 +08:00 |
|
shangfangjian
|
9ccda4bf51
|
fix(critical): 恢复 bzzoiro events 采集管线,消除数据源注册表静默失效
C2 数据丢失修复。重构提交 6a49940 删除了 src/data/bzzoiro.py 中的
fetch_bzzoiro_events 与 BzzoiroSource 后未做替换,同时 sources.py 用
`try/except Exception: pass` 吞掉了 ImportError,导致:
- _SOURCES 注册表恒为空
- get_source("bzzoiro") 恒抛 ValueError("未知数据源: bzzoiro")
- src/api/routes/ingest.py 与 schedules.py 运行时全线失效,
且日志中无任何导入错误痕迹
修复内容:
1. 从 f05dc1a 恢复并移植 events 管线:
- fetch_bzzoiro_events():分页抓取 /events/(纯异步,复用现有 _fetch_json_async)
- @register class BzzoiroSource + ingest():保留原签名
(db, *, leagues, date_from, date_to, status),保持「不 commit,
事务由调用方 UnitOfWork 控制」的契约,并保留单联赛抓取失败的
错误隔离(记录 error 后 continue)
- 复用现有 _to_date / _to_int_or_none / _match_key,未重复定义
- 血缘字段继续使用与 nm 配对的 raw(避免 P0-3 回归)
2. sources.py:导入失败改为 logger.exception 记录,新增 _loaded 标记
保证 _load_sources() 至多执行一次;失败时不置位以便后续重试。
get_source() 对真正未知的名字仍抛 ValueError。
验证:
- 新增 tests/test_bzzoiro_source_registry.py(8 项):注册表非空、
get_source/list_sources 可用、ingest 签名契约、不再静默吞异常
- test_regressions.py:3 failed -> 2 failed
- 全量:14 failed -> 13 failed,通过数 190 -> 199
注意事项:未改动任何 caller(routes/ingest.py、routes/schedules.py 原样
可用,证明签名保持正确)。
|
2026-09-21 17:10:17 +08:00 |
|
 shangfangjianandnew-provider/LongCat-2.0 <
|
f05dc1ae15
|
refactor: 以 bzzoiro 为唯一数据源的全面重构
数据源统一为 bzzoiro,移除 Understat 与 injuries:
- 删除 src/data/understat.py / injuries.py 及相关测试
- 删除 injuries 模型与表;扩展 match_stats(xG 之外增加 big_chances/fouls)
- 新增 standings 表(联赛积分榜:位置/积分/xG/走势/分区)
- matches 表增加 source_event_id 血缘列,支撑统计回填
采集管线(bzzoiro 三条管线):
- events:赛程/比分(/events/),记录 source_event_id
- standings:积分榜快照(/leagues/{id}/standings/)
- stats:已完赛比赛详细统计回填(/events/{id}/stats/)
预测增强:
- standings_slice 替代 injuries_slice;积分榜专家替代阵容完整性专家
- AGENT_META runtime_config 同步更新
管理后台:
- ingest 路由重写为单一 bzzoiro 入口 + task 参数(events/standings/stats/all)
- 新增 /admin/data-completeness 数据完整性分析 API
- 数据源状态页简化为 bzzoiro 单源
前端:
- 采集页重构为任务驱动(比赛/积分榜/统计回填/全量)
- 新增「数据完整性」可视化页(覆盖率矩阵/字段完整率/健康摘要)
- 新增主站积分榜页(/standings)与比赛详情完整统计面板
- agent 名称同步更新(injuries→standings)
迁移 0015_bzzoiro_single_source 已在容器内验证通过,后端测试全部通过。
Co-Authored-By: new-provider/LongCat-2.0 <<EMAIL>>
|
2026-09-20 19:13:07 +08:00 |
|