github cyberjunky/python-garminconnect 0.3.16
Release 0.3.16

5 hours ago

What's Changed

Added

  • New menstrual-cycle write methods: update_menstrual_daily_log(), update_menstrual_calendar(), init_menstrual_cycle_setup(), confirm_menstrual_period_start(), and update_menstrual_settings() — previously only reads (dayview/calendar/pregnancy snapshots) were supported; recording a daily log, editing period dates, running first-time cycle setup, or changing tracking settings required going through Garmin Connect's own UI. Payload shapes were checked against live requests where practical; init_menstrual_cycle_setup()/confirm_menstrual_period_start() request shapes come from the frontend and haven't been exercised live on an already-configured account, so treat those two with extra care. Writes are full snapshots, not field-level merges — see each method's docstring for exactly what gets cleared vs. preserved when a field is omitted.
  • New read methods alongside the writes: get_menstrual_last_confirmed(), get_menstrual_cycle_summary(), get_menstrual_reports().
  • demo.py: interactive menu entries for all of the above (Hydration & Wellness category), consistent with every other write in the demo — no extra confirmation step beyond the normal input prompts.

Fixed

  • get_goals() silently returned [] (HTTP 200, no error) for newer goal types — custom accumulation goals with a date range, created via the current Garmin Connect UI. Root cause: goal-service/goal/goals requires a Sec-Fetch-Site: same-origin header for these goal types; browsers always send it on a same-origin request, but this client didn't send any Sec-Fetch-* headers before. (#431, #434)
  • update_menstrual_settings() could clobber fields the caller didn't pass — it now GETs the current profile and merges the caller's keys onto the existing userMenstrualCycleSettings before the PUT, so omitted tracking flags are preserved.
  • Two formatting-only nits from the menstrual-writes change (an unnecessary line wrap in a demo error message and in get_menstrual_reports()'s URL construction).

Docs

  • README method/category counts updated to 154+ across 14 categories (Hydration & Wellness now 20 methods, up from 12).

Thanks

  • @TSHOGX for the menstrual-cycle write methods (#432) — payload shapes checked against live requests, not guessed.
  • @skweeker for reporting the get_goals() regression (#431) and isolating the root cause via curl — narrowing it down to one missing header made the fix straightforward.

Don't miss a new python-garminconnect release

NewReleases is sending notifications on new releases.