Repository navigation
chore(deps): raise aiohttp minimum to 3.14.4 - #573
Merged
Merged
Conversation
aiohttp>=3.8.1 still allows releases with published security advisories. 3.14.4 is the oldest release with none listed on PyPI, and it matches what Home Assistant already ships (3.14.5). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CxGYP1MF5XktdJeS1hyNaf
webdjoe
force-pushed
the
claude/aiohttp-floor
branch
from
November 5, 2026 03:28
af9ceda to
4b42c46
Compare
5 of 13 tasks
webdjoe
added a commit
that referenced
this pull request
Nov 5, 2026
## Description Releases pyvesync 3.5.0 from `dev` to `master`. Merging publishes to PyPI and deploys the docs. **Main changes:** air fryer support is rewritten around a single `VeSyncFryer` interface, with new Cosori models added. New devices and fixes for outlets, humidifiers and the thermostat are also included. **CS137/CS158 air fryer users have breaking changes, listed below.** ### New features and devices - **Air fryers (#503):** a common interface for cooking, chambers, presets, temperature limits and units. - New models: CAF-DC601S TurboBlaze, CAF-P583S Dual Blaze (KUS and KEU), CAF-TF101S, CAF-TF102S and CAF-DC111S-AEU Turbo Tower Pro. - A failed or unreadable response now leaves the fryer's state unchanged, and a refused command returns `False`. - **WYLDR16A1081 smart plug (#508):** uses `VeSyncBSDOGPlug` without energy history. - This adds `OutletFeatures.ENERGY_HISTORY` and `supports_energy_history`. Weekly, monthly and yearly energy requests now do nothing on outlets without the flag. - **RGB nightlight for LUH-O451S-WEU (#502):** adds `set_rgb_nightlight()` and `supports_rgb_nightlight`. ### Breaking changes For CS137/CS158 air fryers: | 3.4.2 | 3.5.0 | | --- | --- | | `cook(set_temp, set_time)` (minutes) | `set_mode(cook_time, cook_temp)` (seconds) | | `set_preheat(target_temp, cook_time)` | `set_mode(cook_time, cook_temp, preheat_time=...)` | | `pause()` | `stop()` | | `check_status()` | `update()` | | `state.is_resumable` | `state.can_resume` | | `state.remaining_time` | `state.total_time_remaining` | | `state.is_heating` | `state.is_preheating` | | `state.cook_status` as a string | `AirFryerCookStatus` | - `AirFryer158138State` is removed; use `FryerState`. - The device map `setup_entry` changes from `CS137-AF/CS158-AF` to `CS158-AF`. - `toggle_switch()` on air fryers is deprecated and sends no request, because they have no on/off command. Other changes that may affect you: - The minimum `aiohttp` version rises from 3.8.1 to 3.14.4 (#573), because older releases have published security advisories. - `VeSync.save_credentials(None)` now saves to the configured token file, or to `.vesync_auth` in the working directory if none is set. It used to do nothing (#503). ### Fixes - **Sprout Humidifier LEH-B381S:** `set_nightlight_brightness()` and `toggle_nightlight()` now call the API instead of the base-class stub, and toggling no longer sends a null brightness (#528). - **Aura thermostat:** details processing read `supportMode` from the dataclass instead of the response instance (#555). - **Unknown API error codes:** `last_response` and logs now keep the API's code and message (#582). - **Device discovery:** a device whose class raises `VeSyncError` during setup is skipped with a warning, so it no longer stops discovery of the others (#503). - **`update_all_devices()`:** errors other than `VeSyncError` are now logged with a traceback instead of being dropped (#503). - **Test suite:** the event loop is closed in teardown, preventing a file descriptor leak (#514). ### Docs, tooling and CI - **Contribution docs (#572):** - Adds `AGENTS.md`, a PR template and issue forms. - Rewrites the contribution guides. - Refreshes the README and docs. - **Python and mypy (#574):** - CI and tox now test Python 3.14. - mypy targets Python 3.11. - Removes the unused `python-dateutil` from `requirements.txt`. - **Ruff and pre-commit:** - `ruff` is pinned to 0.15.21 in `pyproject.toml` and `requirements-dev.txt`, and `ERA001` is enforced (#503). - The pre-commit hooks move to mypy v2.4.1 and ruff v0.17.3 (#498). - **GitHub Actions:** `actions/checkout` moves to v7 (#527) and `actions/setup-python` to v7 (#534). ### Known issues - **RGB nightlight:** the API can return stale values for several minutes after a change, and the timeout added to handle this isn't fully reliable. Minimum brightness is 40% (#502). - **`save_credentials()` docstring:** it still says "If None, no action is taken", which is no longer true. - **Ruff versions:** the pre-commit hook (v0.17.3) doesn't match the pinned version (0.15.21). ## Type of change - [ ] Bug fix (`fix:`) - [ ] New feature or device support (`feat:`) - [ ] Documentation (`docs:`) - [x] Refactor / test / chore (no functional change): release PR. The functional changes were reviewed in the PRs linked above. ## Checklist - [ ] This PR is a **single** feature, fix, or edit. This is a release PR, so it combines the PRs above. - [x] The change follows the intended architecture (base class → device + API mixin → device map; state in `DeviceState`; models in `models/`; constants in `pyvesync.const`). - [ ] No API request/response fields were invented. Not checked because some models have no capture: see "Mapped or inferred without a capture" below. - [x] `ruff check`, `pylint`, `mypy`, and `pytest` pass locally: 613 passed, 3 skipped on Python 3.12; pylint 10/10. - [x] Tests added/updated and API fixtures written (`pytest --write_api`) where relevant. - [x] Documentation updated if behavior or public API changed. ## Real-hardware verification - [ ] Tested on the physical device. Partial; status by model: | Model | Status | Firmware | Source | | --- | --- | --- | --- | | CAF-P583S-KUS | Tested: remote start and stop, status polling, 11 presets | v1.0.15 | #517, #503 | | LTM-A401S-WUS | Tested | 1.0.60 | #555 | | LUH-O451S-WEU | Tested | `____` | #502 | | LEH-B381S | Tested by the reporter | `____` | #528 | | WYLDR16A1081 | Not stated in the PR | `____` | #508 | | CS137-AF / CS158-AF | Not recorded | `____` | #503 | | CAF-DC601S | Not recorded | `____` | #503 | | CAF-TF101S | Not recorded | `____` | #503 | | CAF-TF102S | Pending | `____` | #503 | | CAF-DC111S-AEU | Pending | `____` | #503, #581 | | CAF-P583S-KEU | Pending | `____` | #503 | Mapped or inferred without a capture: - **CAF-TF102S:** mapped from the VeSync app; there is no capture. - **CAF-DC111S-AEU:** status captures come from #536. Cook and end requests have not been tested on the device. - **CAF-P583S-KEU:** there is no capture. It is assumed to match the KUS, apart from using Celsius. - **CAF-TF101S:** there is no capture with `readyStart` false, so its `COOKING` status after a cook starts is inferred from the CS158 captures. - [ ] Not applicable (explain why): `____` - [ ] I do not own the device; a packet capture is provided / the device has been shared with a maintainer for verification.
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.
aiohttp>=3.8.1 still allows releases with published security advisories. 3.14.4 is the oldest release with none listed on PyPI, and it matches what Home Assistant already ships (3.14.5).
Claude-Session: https://claude.ai/code/session_01CxGYP1MF5XktdJeS1hyNaf
Description
Type of change
fix:)feat:)docs:)Checklist
DeviceState; models inmodels/; constants inpyvesync.const).ruff check,pylint,mypy, andpytestpass locally.pytest --write_api) where relevant.Real-hardware verification
____________