fix: 连接阶段真实 429 以 rate_limited 状态呈现,而非泛化 error

sync_data 的 _connect 抛 RateLimited(真实 429,冷却已写入)原本落进
except Exception 返回 status=error,message 带 'RateLimited:' 前缀——前端
SettingsPage 只对 status=rate_limited 渲染'被限流'提示,导致放开本地拦截
后真实 429 的提示错位。

单独捕获 RateLimited:status=rate_limited + 干净 message + history 记录
rate_limited。补测试 test_a_real_429_at_connect_surfaces_as_rate_limited
(597 passed)
This commit is contained in:
ericwyuan
2026-09-03 07:18:14 +08:00
parent e0e7b3cf53
commit 57c236ba16
2 changed files with 34 additions and 0 deletions

View File

@@ -1111,6 +1111,20 @@ def sync_data(user_id, creds, days=None, client=None, trigger="manual"):
try:
client = client or _connect(creds, user_id)
except RateLimited as e:
# A genuine 429 at connect time: _connect already wrote the fresh
# cooldown, so surface this as rate_limited (the UI draws a distinct
# stand-down state for it) rather than a generic error.
message = str(e)
_set_sync_status(user_id, "rate_limited", now, records_synced=0,
last_error=message)
return finish({
"status": "rate_limited",
"recordsSynced": 0,
"message": message,
"mfaRequired": False,
"lastSyncTime": now,
})
except Exception as e:
message = describe(e)
_set_sync_status(user_id, "error", now, records_synced=0, last_error=message)