mirror of
https://ghfast.top/https://github.com/aeroxw/tick-stock-panel.git
synced 2026-09-12 14:24:15 +08:00
Merge pull request #296 from kevin9327/fix/trading-day-unknown-verdict-cache
fix(trading-day): 「未知」结论也按 TTL 缓存, 不再每拍重打探测
This commit is contained in:
@@ -113,9 +113,11 @@ def is_trading_day(now: datetime | None = None) -> bool | None:
|
||||
return False
|
||||
|
||||
with _CACHE_LOCK:
|
||||
# 「未知」(None) 也是一个结论, 同样按 TTL 缓存 —— 它正是 _TTL_UNKNOWN_S 要
|
||||
# 挡住的场景 (未配 fuyao 且 tickflow 不可用时, 轮询每拍都会重打一次探测)。
|
||||
# _CACHE.day 只在探测写回时设置, 因此「当天已探过」用它判定即可。
|
||||
if (
|
||||
_CACHE.day == now.date()
|
||||
and _CACHE.verdict is not None
|
||||
and (time.monotonic() - _CACHE.probed_at) < _ttl_of(_CACHE.verdict)
|
||||
):
|
||||
return _CACHE.verdict
|
||||
|
||||
@@ -254,3 +254,25 @@ def test_fuyao_provider_trading_days_conversion(monkeypatch):
|
||||
monkeypatch.setattr(fp, "get_api_key", lambda: "test-key")
|
||||
days = FuyaoProvider().trading_days()
|
||||
assert days == {date(2026, 9, 4), date(2026, 9, 7)}
|
||||
|
||||
|
||||
def test_unknown_verdict_is_cached_within_short_ttl(monkeypatch):
|
||||
"""未知结论也要按 _TTL_UNKNOWN_S 缓存: 轮询每拍重探会重复打 tickflow 请求。"""
|
||||
monday = datetime(2026, 9, 7, 10, 0, tzinfo=CN)
|
||||
calls = {"fuyao": 0, "tickflow": 0}
|
||||
|
||||
def _fuyao(now):
|
||||
calls["fuyao"] += 1
|
||||
return None
|
||||
|
||||
def _tickflow(now):
|
||||
calls["tickflow"] += 1
|
||||
return None
|
||||
|
||||
monkeypatch.setattr(trading_day, "_probe_fuyao", _fuyao)
|
||||
monkeypatch.setattr(trading_day, "_probe_tickflow", _tickflow)
|
||||
|
||||
assert is_trading_day(monday) is None
|
||||
assert is_trading_day(monday) is None
|
||||
assert is_trading_day(monday) is None
|
||||
assert calls == {"fuyao": 1, "tickflow": 1}
|
||||
|
||||
Reference in New Issue
Block a user