You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This commit was created on GitHub.com and signed with GitHub’s verified signature.
What's Changed
Fixed
daily_sleep.avg_respiration_value was aliased to the wrong API field (avgRespirationValue, which never matches a real response) — corrected to averageRespirationValue, so this field now actually populates instead of always being None. lowestRespirationValue/highestRespirationValue were already correct. (#427)
set_blood_pressure()'s pulse parameter is now optional (int | None = None) — Garmin Connect's own UI allows saving a blood-pressure entry without a heart-rate value, but the library required one. When omitted, pulse is left out of the outgoing payload entirely rather than sent as a placeholder. (#426, #428)
demo.py's local blood-pressure range checks (systolic/diastolic/pulse) didn't match set_blood_pressure()'s own validation ranges, so a value the demo accepted could still be rejected by the API, and vice versa. All three ranges now match the library exactly (systolic 70-260, diastolic 40-150, pulse 20-250).
demo.py's category-menu key dispatch checked the pressed key against a hardcoded whitelist string before checking the real menu — any new uppercase option key (most recently [B] for the new "next scheduled workout" option) silently became unreachable, printing "Invalid selection" even though it was a real, listed menu entry. The whitelist is gone; the existing options-dict lookup right below it is now the sole (and already-correct) source of truth, so this class of bug can't recur.
Added
New get_next_scheduled_workout() — returns the earliest upcoming calendar-service workout (today or later), checking the current and next calendar month, since get_scheduled_workouts(year, month) already required callers to fetch and merge two months manually for a sensible "what's next" view. Known limitation: this only sees whatever Garmin's calendar-service endpoint has already committed to the visible calendar — for adaptive/Coach training plans, the Garmin Connect app can show upcoming sessions this endpoint doesn't return at all (confirmed live against a real account with an active Coach plan). That fuller view lives behind a different, session-cookie-authenticated API this client doesn't use. Documented on the method. (#429)
demo.py: new interactive menu option [B] for get_next_scheduled_workout().
Docs
README's "Total API Methods" wording corrected from "unique endpoints" to "methods" — get_next_scheduled_workout() composes two calls to the existing get_scheduled_workouts endpoint rather than adding a new remote endpoint. Method/category counts updated to 146+ across 14 categories.