Skip to content

Commit f7d8c0c

Browse files
cyberjunkyclaude
andcommitted
fix: don't dump login traceback at ERROR for expected failures
login() used logger.exception() before re-raising a clean exception, so every expected failure (rate limit, Cloudflare 403/CAPTCHA, all strategies exhausted) printed a full stack trace at ERROR level on top of the meaningful exception the caller already receives. Downgrade to logger.debug() without exc_info — the breadcrumb survives in debug mode, but callers get only the clean raised exception. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
1 parent f54b4df commit f7d8c0c

1 file changed

Lines changed: 4 additions & 2 deletions

File tree

garminconnect/__init__.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -682,7 +682,9 @@ def login(self, /, tokenstore: str | None = None) -> tuple[str | None, str | Non
682682
) as e:
683683
status = getattr(getattr(e, "response", None), "status_code", None)
684684
error_str = str(e).lower()
685-
logger.exception("Login failed: %s (status=%s)", e, status)
685+
# Re-raised below with a clean message; avoid logging a full
686+
# traceback for expected failures (rate limits, bot challenges).
687+
logger.debug("Login failed: %s (status=%s)", e, status)
686688

687689
if status == 429 or "429" in error_str:
688690
raise GarminConnectTooManyRequestsError(
@@ -718,7 +720,7 @@ def login(self, /, tokenstore: str | None = None) -> tuple[str | None, str | Non
718720
raise GarminConnectAuthenticationError(
719721
f"Authentication failed: {e}"
720722
) from e
721-
logger.exception("Login failed")
723+
logger.debug("Login failed: %s", e)
722724
raise GarminConnectConnectionError(f"Login failed: {e}") from e
723725

724726
def resume_login(

0 commit comments

Comments
 (0)