fix(api): quote_service 缺失时 quote-interval 兜底返回默认档位 (#261)

PUT /preferences/quote-interval 的 if not qs 分支错误调用
qs.get_min_interval(),此时 qs 必为 None,触发 AttributeError → 500。
改为返回硬编码默认值 6.0,与 GET 接口兜底写法及
QuoteService.DEFAULT_INTERVAL 保持一致,并新增复现测试。
This commit is contained in:
shy3130
2026-09-07 22:01:12 +08:00
parent cd1cff0089
commit f8a23b7ce5
2 changed files with 30 additions and 1 deletions
+1 -1
View File
@@ -1486,7 +1486,7 @@ def update_quote_interval(req: QuoteIntervalIn, request: Request) -> dict:
"""更新行情轮询间隔。按档位自动 clamp。"""
qs = getattr(request.app.state, "quote_service", None)
if not qs:
return {"interval": req.interval, "min_interval": qs.get_min_interval(), "max_interval": 60.0}
return {"interval": req.interval, "min_interval": 6.0, "max_interval": 60.0}
clamped = qs.set_interval(req.interval)
return {
"interval": clamped,
@@ -0,0 +1,29 @@
"""行情轮询间隔接口: quote_service 缺失时的兜底分支不能抛 AttributeError (issue #261)。"""
from __future__ import annotations
from types import SimpleNamespace
from app.api.settings import QuoteIntervalIn, update_quote_interval
def _request_without_quote_service() -> SimpleNamespace:
return SimpleNamespace(app=SimpleNamespace(state=SimpleNamespace(quote_service=None)))
def test_update_quote_interval_without_service_returns_defaults():
result = update_quote_interval(
QuoteIntervalIn(interval=6.0), request=_request_without_quote_service()
)
assert result == {"interval": 6.0, "min_interval": 6.0, "max_interval": 60.0}
def test_update_quote_interval_without_service_keeps_requested_interval():
result = update_quote_interval(
QuoteIntervalIn(interval=12.0), request=_request_without_quote_service()
)
assert result["interval"] == 12.0
assert result["min_interval"] == 6.0
assert result["max_interval"] == 60.0