fix: 修复补跑历史日期的静默空转与日报日期错位 (P0-3/P0-4)

- run_step: 补跑保护——历史日期跳过 crawler(首页只含当天内容)并告警,复用已有 raw 数据
- run_step: report 步骤改用传入的 date_str,不再硬编码 date.today()
- 新增 4 个补跑相关测试,修正 3 个既有测试适配新行为
- 全量 259 passed(3 个 crawler 基线失败与本次无关)
This commit is contained in:
2026-08-22 19:20:21 +08:00
parent 7ea8925209
commit 85ba218f2f
4 changed files with 129 additions and 6 deletions
+16 -2
View File
@@ -220,15 +220,29 @@ def run_step(name: str, date_str: str) -> StepResult:
返回: StepResult。
"""
# 补跑保护:抓取类步骤只能产生当天数据(网站首页只含当前内容,历史文章已滚走),
# 补跑历史日期时跳过抓取并告警,复用已有 data/raw/*/{date_str} 数据。
# 注意:仅保护 crawler; xwlb 走 API 支持任意历史日期,无需跳过。
if name == "crawler" and date_str != date.today().strftime("%Y%m%d"):
started = datetime.now()
logger.warning(
"补跑模式:首页只含当天内容,无法补抓 {};跳过抓取,复用已有 data/raw/*/{}",
date_str, date_str,
)
return StepResult(
name=name, success=True, elapsed_sec=0.0,
tail_msg="补跑跳过(抓取只能产生当天数据)", started_at=started,
)
# report 步骤:内部函数,不走子进程
# 日报按当天日期生成: 新闻由 _collect_news_events 回溯过去 30 小时,
# 日报按 date_str 日期生成: 新闻由 _collect_news_events 回溯过去 30 小时,
# xwlb 由 _collect_xwlb 固定取前一日(已播出)联播。
if name == "report":
started = datetime.now()
try:
from .reporter import generate_report # noqa: E402
report_date = date.today().strftime("%Y%m%d")
report_date = date_str
logger.info("日报: report_date={} (新闻 30h 回溯, xwlb 前一日)", report_date)
path = generate_report(report_date, upload=True)