Skip to content

Require curl_cffi 0.17 for macOS 27 and add Python 3.15; 1.15.1 - #78

Merged
sturimcode merged 1 commit into
mainfrom
release/1.15.1
Oct 29, 2026
Merged

sturimcode merged 1 commit into
mainfrom
release/1.15.1

Conversation

@sturimcode

Copy link
Copy Markdown
Owner

macOS 27 compatibility, a recoverable updater and Python 3.15 support.

  • Raised the curl_cffi floor from 0.15.0 to 0.17.0. On macOS 27 arm64, 0.15.0 and 0.16.3 fail to import because their wheels do not link CoreFoundation and SystemConfiguration (macOS 27: import curl_cffi fails with "symbol not found in flat namespace '_CFArrayAppendValue'" — wheel does not link CoreFoundation / SystemConfiguration lexiforest/curl_cffi#885), breaking Garmin login. Version 0.17.0 fixes the links, bundles Brotli 1.2.1 and removes a compromised eMudhra certificate from certifi.
  • eufy-sync --update no longer imports garminconnect or curl_cffi, so either package can be broken without blocking the command that installs the fix. GarminAuth now loads on first use and doctor loads only for --doctor. A fresh-interpreter test verifies the upgrade runs without attempting either import.
  • Added Python 3.15 to the classifiers and the Ubuntu, macOS and Windows CI matrix, bringing it to 12 test legs. curl_cffi 0.17.0 provides Python 3.15 wheels.
  • Checked the Cloudflare-block fallback against 0.17.0 on a local server. GET requests, multipart FIT uploads and block-page detection behave as before, so no code change was needed. Multipart part failures now raise an error instead of sending a short body; the fallback already closes the body and passes the error through.
  • Updated the version to 1.15.1 in pyproject.toml and eufy_sync/__init__.py.

766 tests pass locally with curl_cffi 0.17.0; ruff is clean.

On macOS 27, import curl_cffi fails on 0.15.0 and 0.16.3: the wheel never
linked CoreFoundation or SystemConfiguration (lexiforest/curl_cffi#885), and
python-garminconnect logs in through it. 0.17.0 links both frameworks.

--update no longer imports garminconnect or curl_cffi, so a broken copy of
either cannot stop the command that installs the fix. GarminAuth loads on
first use and the doctor module only for --doctor. A test runs --update in a
fresh interpreter where both packages refuse to import.

Python 3.15 joins the CI matrix and the classifiers.
@sturimcode
sturimcode merged commit 4146fd2 into main Oct 29, 2026
14 checks passed
@sturimcode
sturimcode deleted the release/1.15.1 branch October 29, 2026 14:22
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant