-
Notifications
You must be signed in to change notification settings - Fork 65
Permalink
Choose a base ref
{{ refName }}
default
Choose a head ref
{{ refName }}
default
Comparing changes
Choose two branches to see what’s changed or to start a new pull request.
If you need to, you can also or
learn more about diff comparisons.
Open a pull request
Create a new pull request by comparing changes across two branches. If you need to, you can also .
Learn more about diff comparisons here.
base repository: matin/garth
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: 0.7.2
Could not load branches
Nothing to show
Loading
Could not load tags
Nothing to show
{{ refName }}
default
Loading
...
head repository: matin/garth
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: 0.7.3
Could not load branches
Nothing to show
Loading
Could not load tags
Nothing to show
{{ refName }}
default
Loading
- 3 commits
- 27 files changed
- 2 contributors
Commits on Mar 18, 2026
-
Migrate from mypy to ty (#207)
* Migrate from mypy to ty (Astral) - Replace mypy with ty in Makefile, pyproject.toml, and dependencies - Fix list[Self] shadowing: use builtins.list[Self] in data modules where the list() classmethod shadows the builtin - Fix invalid-assignment in Client.user_profile (narrow type before assigning) - Fix dynamic function attribute in test_training_status (use dict) - Set invalid-method-override to warn (intentional Liskov violations in data subclass sorting wrappers) - Remove types-requests dependency (ty doesn't need stubs) Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]> * Fix CI: guard Response.request None, exclude tests from ty - Add None guard for Response.request in telemetry hook (ty catches that PreparedRequest can be None, mypy didn't) - Only type-check src/ with ty (CI lint job doesn't have test deps) Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]> * Add pragma no cover to Response.request None guard Never None for completed responses in practice. Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]> --------- Co-authored-by: Claude Opus 4.6 (1M context) <[email protected]>
Configuration menu - View commit details
-
Copy full SHA for 88d7402 - Browse repository at this point
Copy the full SHA 88d7402View commit details -
Never hit real Garmin API in tests (#208)
* Never hit real Garmin API in tests VCR now defaults to playback-only (record_mode="none"). Tests will never fall through to the real API, even if env vars leak. Recording requires explicitly setting GARTH_RECORD_CASSETTES=true. - Replace GARTH_HOME-based VCR mode with GARTH_RECORD_CASSETTES - Autouse _clean_env fixture clears GARTH_HOME, GARTH_TOKEN, and disables telemetry for all tests - Use GARTH_RECORD_CASSETTES_HOME for authed_client token loading - Document recording workflow in CLAUDE.md Closes #202 Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]> * Only load real tokens when recording cassettes Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]> * Add pragma no cover to recording-only branch in conftest Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]> --------- Co-authored-by: Claude Opus 4.6 (1M context) <[email protected]>
Configuration menu - View commit details
-
Copy full SHA for 51d821f - Browse repository at this point
Copy the full SHA 51d821fView commit details -
Add /portal/sso/embed step to fix intermittent 401s (#209)
* Add /portal/sso/embed step to SSO login flow The iOS app visits /portal/sso/embed after login (and MFA if applicable) before calling preauthorized. This sets the Cloudflare load balancer cookie (__cflb) that pins subsequent requests to the same backend. Without it, preauthorized can hit a different backend that doesn't have the session, causing intermittent 401 errors. Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]> * Bump version to 0.7.3 Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]> * Disable telemetry before importing garth in tests The module-level Client() in http.py runs at import time and configures logfire when telemetry is enabled (the new default). Logfire's background token verification requests interfere with VCR cassette matching. Setting the env var before import prevents this. Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]> * Copy cookies from parent session to OAuth1 session The /portal/sso/embed step sets the Cloudflare LB cookie on client.sess, but GarminOAuth1Session wasn't copying cookies from the parent session. The preauthorized call would hit a different backend without the session context. Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]> --------- Co-authored-by: Claude Opus 4.6 (1M context) <[email protected]>
Configuration menu - View commit details
-
Copy full SHA for 868af84 - Browse repository at this point
Copy the full SHA 868af84View commit details
Loading
This comparison is taking too long to generate.
Unfortunately it looks like we can’t render this comparison for you right now. It might be too big, or there might be something weird with your repository.
You can try running this command locally to see the comparison on your machine:
git diff 0.7.2...0.7.3