feat: 日报多来源入库(news_event.sources 列,JSON 数组,主源居首)

- EventRow 新增 sources 字段;init_schema 幂等 ALTER 补列(MariaDB)
- save_report 写入 sources JSON;_article_sources_full 完整来源列表
- source 字段保持 ≤3 拼接兼容;新增多源完整列表测试
- 已部署 pi5:sources 列写入验证通过(单源数组);完整多源待新数据
This commit is contained in:
2026-08-12 13:06:01 +08:00
parent 32e99aeaf6
commit 951276a313
7 changed files with 84 additions and 16 deletions
+17 -2
View File
@@ -179,17 +179,31 @@ class TestBuildReportData:
assert r.events[0].sentiment is None
def test_multi_source_label(self) -> None:
"""去重合并后的多来源 → source 拼接展示(Reuters, CNBC)。"""
"""去重合并后的多来源 → source 拼接展示(Reuters, CNBC)+ sources 完整列表。"""
now = datetime(2026, 8, 4, 8, 0, 0)
ev = _fake_high_event("多来源事件", 5, source_id="reuters",
url="https://reuters.com/news/9")
# 模拟 M3 去重合并:source_ids 含两个来源
# 模拟 M3 去重合并:source_ids 含两个来源(主源 reuters 居首)
ev["article"]["source_ids"] = ["reuters", "cnbc"]
r = _build_report_data(now, {}, [ev], Counter(), Counter(), Counter(),
Counter(), "")
assert r.events[0].source == "Reuters, CNBC"
assert r.events[0].sources == ["Reuters", "CNBC"] # 主源居首
assert r.events[0].url == "https://reuters.com/news/9"
def test_multi_source_full_list(self) -> None:
"""超过 3 个来源:source 截前 3,sources 存完整列表。"""
now = datetime(2026, 8, 4, 8, 0, 0)
ev = _fake_high_event("四来源事件", 5, source_id="barrons",
url="https://barrons.com/news/1")
ev["article"]["source_ids"] = ["barrons", "cnbc", "reuters", "ft"]
r = _build_report_data(now, {}, [ev], Counter(), Counter(), Counter(),
Counter(), "")
assert r.events[0].source == "Barron's, CNBC, Reuters" # 前 3 拼接
assert r.events[0].sources == [ # 完整 4 个
"Barron's", "CNBC", "Reuters", "Financial Times",
]
def test_single_source_falls_back(self) -> None:
"""source_ids 为空/单一时回退单源逻辑(不拼接)。"""
now = datetime(2026, 8, 4, 8, 0, 0)
@@ -199,3 +213,4 @@ class TestBuildReportData:
r = _build_report_data(now, {}, [ev], Counter(), Counter(), Counter(),
Counter(), "")
assert r.events[0].source == "InvestingLive"
assert r.events[0].sources == ["InvestingLive"]