From 397576ad935d8e207b5a9b0dd419005e67a38d2a Mon Sep 17 00:00:00 2001 From: Barrett Ruth Date: Sat, 7 Mar 2026 02:14:54 -0500 Subject: [PATCH] fix(cses): add token fast path to login and improve error surfacing Problem: `login()` always ran the full web login flow even with a valid cached token, prompting the user unnecessarily. Submit errors only checked `message`, missing `error` field. Solution: check the cached token via `_check_token` at the start of `login()`; return immediately if valid. Error body now checks `body.get("error") or body.get("message")` before falling back to raw text. --- scrapers/cses.py | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/scrapers/cses.py b/scrapers/cses.py index 2d29689..4f1fbcf 100644 --- a/scrapers/cses.py +++ b/scrapers/cses.py @@ -248,7 +248,21 @@ class CSESScraper(BaseScraper): if not username or not password: return self._login_error("Missing username or password") + token = credentials.get("token") async with httpx.AsyncClient(follow_redirects=True) as client: + if token: + print(json.dumps({"status": "checking_login"}), flush=True) + if await self._check_token(client, token): + return LoginResult( + success=True, + error="", + credentials={ + "username": username, + "password": password, + "token": token, + }, + ) + print(json.dumps({"status": "logging_in"}), flush=True) token = await self._web_login(client, username, password) if not token: @@ -460,7 +474,8 @@ class CSESScraper(BaseScraper): if r.status_code not in range(200, 300): try: - err = r.json().get("message", r.text) + body = r.json() + err = body.get("error") or body.get("message") or r.text except Exception: err = r.text return self._submit_error(f"Submit request failed: {err}")