From 221edb480ccc287b12139300fc2e9e8856d475b0 Mon Sep 17 00:00:00 2001 From: "2569718930@qq.com" <2569718930@qq.com> Date: Tue, 23 Jun 2026 18:27:32 +0800 Subject: [PATCH] Bootstrap missing training actual history --- tests/test_training_settlement_service.py | 23 +++++++++++++++++++++++ web/training_settlement_service.py | 4 ++-- 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/tests/test_training_settlement_service.py b/tests/test_training_settlement_service.py index 075ecf16..89d0eac6 100644 --- a/tests/test_training_settlement_service.py +++ b/tests/test_training_settlement_service.py @@ -1,3 +1,4 @@ +import web.training_settlement_service as training_settlement_service from web.training_settlement_service import run_training_settlement_cycle @@ -75,3 +76,25 @@ def test_training_settlement_cycle_skips_reconcile_for_non_reconcile_sources(): assert calls["analysis"] == ["taipei"] assert calls["reconcile"] == [] assert result["items"][0]["reconcile"]["reason"] == "unsupported_reconcile_source" + + +def test_default_actual_reconciler_bootstraps_missing_history(monkeypatch): + calls = [] + + def bootstrapper(city, *, lookback_days): + calls.append((city, lookback_days)) + return {"ok": True, "seeded": 8, "updated": 8} + + monkeypatch.setattr( + training_settlement_service, + "bootstrap_recent_daily_history_if_missing", + bootstrapper, + ) + + result = training_settlement_service._default_actual_reconciler( + "shanghai", + lookback_days=10, + ) + + assert result == {"ok": True, "seeded": 8, "updated": 8} + assert calls == [("shanghai", 10)] diff --git a/web/training_settlement_service.py b/web/training_settlement_service.py index 867d617e..073147a4 100644 --- a/web/training_settlement_service.py +++ b/web/training_settlement_service.py @@ -6,7 +6,7 @@ from typing import Any, Callable, Dict, Iterable, Mapping, Optional, Sequence from loguru import logger -from src.analysis.deb_algorithm import reconcile_recent_actual_highs +from src.analysis.deb_algorithm import bootstrap_recent_daily_history_if_missing from src.data_collection.city_registry import CITY_REGISTRY @@ -58,7 +58,7 @@ def _default_analysis_runner(city: str) -> Mapping[str, Any]: def _default_actual_reconciler(city: str, *, lookback_days: int) -> Mapping[str, Any]: - return reconcile_recent_actual_highs(city, lookback_days=lookback_days) + return bootstrap_recent_daily_history_if_missing(city, lookback_days=lookback_days) def run_training_settlement_cycle(