fix: lift Python <3.13 cap so the package installs on Python 3.13/3.14#220
Merged
Conversation
The uv migration (#177) introduced requires-python = ">=3.10, <3.13", which blocks installation on current Python — notably inside Home Assistant (Python 3.14), where pip refuses to install the package for the FlexMeasures HA integration. Lift the cap, declare 3.13/3.14 support, and extend the CI matrix accordingly (S2 suite now also runs on 3.14, matching the HA runtime). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Signed-off-by: F.N. Claessen <felix@seita.nl>
Coverage Report for CI Build 29181797528Coverage remained the same at 96.359%Details
Uncovered ChangesNo uncovered changes found. Coverage RegressionsNo coverage regressions found. Coverage Stats
💛 - Coveralls |
…sistant Home Assistant pins these packages to exact versions, so the floors introduced by the uv migration made 0.9.x uninstallable there: async-timeout>=5.0.1 conflicts with HA 2026.7 (pins 4.0.3), and aiohttp>=3.13.3, urllib3>=2.7.0 (<2 on older HA) and requests>=2.32.5 conflict with HA up to ~2025. urllib3 is dropped entirely: it is not a direct dependency (only transitive via requests in the s2 extra), and our own dev/test resolution still picks up a patched version via the lockfile. test_get_sensor_data now matches the request by regex and compares query params semantically, since pandas versions differ in how they render ISO 8601 durations and yarl versions differ in requote behavior. Verified: full suite passes against HA 2025.1-era pins (aiohttp 3.11.11, async-timeout 4.0.3, urllib3 1.26, pandas 2.2.3, packaging 23.1) and against the current lock on Python 3.14. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Signed-off-by: F.N. Claessen <felix@seita.nl>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Signed-off-by: F.N. Claessen <felix@seita.nl>
Flix6x
added a commit
that referenced
this pull request
Jul 13, 2026
…on Python 3.13/3.14 (#220) * fix: lift Python <3.13 cap so the package installs on Python 3.13/3.14 The uv migration (#177) introduced requires-python = ">=3.10, <3.13", which blocks installation on current Python — notably inside Home Assistant (Python 3.14), where pip refuses to install the package for the FlexMeasures HA integration. Lift the cap, declare 3.13/3.14 support, and extend the CI matrix accordingly (S2 suite now also runs on 3.14, matching the HA runtime). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * fix: relax dependency floors that blocked installation inside Home Assistant Home Assistant pins these packages to exact versions, so the floors introduced by the uv migration made 0.9.x uninstallable there: async-timeout>=5.0.1 conflicts with HA 2026.7 (pins 4.0.3), and aiohttp>=3.13.3, urllib3>=2.7.0 (<2 on older HA) and requests>=2.32.5 conflict with HA up to ~2025. urllib3 is dropped entirely: it is not a direct dependency (only transitive via requests in the s2 extra), and our own dev/test resolution still picks up a patched version via the lockfile. test_get_sensor_data now matches the request by regex and compares query params semantically, since pandas versions differ in how they render ISO 8601 durations and yarl versions differ in requote behavior. Verified: full suite passes against HA 2025.1-era pins (aiohttp 3.11.11, async-timeout 4.0.3, urllib3 1.26, pandas 2.2.3, packaging 23.1) and against the current lock on Python 3.14. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * style: satisfy black Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> --------- Signed-off-by: F.N. Claessen <felix@seita.nl> (cherry picked from commit 97679c6)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem
The uv migration (#177) made 0.9.x uninstallable inside Home Assistant, in two ways:
requires-python = ">=3.10, <3.13"— pip honorsrequires_python, and HA runs Python 3.14 (as of 2026.7). 0.9.0–0.9.2 cannot be installed on Python 3.13+ at all.homeassistant/package_constraints.txt):async-timeout>=5.0.1vs HA 2026.7'sasync-timeout==4.0.3→ conflict on current HAaiohttp>=3.13.3vs e.g. HA 2025.1'saiohttp==3.11.11urllib3>=2.7.0vs older HA'surllib3<2(and urllib3 is not even a direct dependency — only transitive via requests in the s2 extra)requests>=2.32.5vs e.g. HA 2025.1'srequests==2.32.3This blocks pinning any 0.9.x release in the FlexMeasures HA integration manifest (context: a pilot had to revert the integration's v0.3.7 over a related dependency mismatch).
Changes
requires-python = ">=3.10"(cap dropped), 3.13/3.14 classifiers addedaiohttp>=3.8.1,async-timeout>=4.0.1,packaging>=23.1,requests>=2.31.0,tzdata>=2023.3;urllib3floor removed (transitive-only; our dev/test lockfile still resolves a patched version)uv.lockre-resolved (adds 3.13/3.14 wheels; no version bumps)test_get_sensor_datamade robust to pandas ISO-8601-duration rendering and yarl requote differences (it hardcoded one exact URL encoding)Verification
183 passedon Python 3.14 against the current lock183 passedon Python 3.12 against HA 2025.1-era pins (aiohttp 3.11.11, async-timeout 4.0.3, urllib3 1.26.20, requests 2.32.3, pandas 2.2.3, packaging 23.1), validating the floors are realIntended to ship as v0.9.3 so the HA integration can pin it.
🤖 Generated with Claude Code