From 4b5368be8e09cc62aac6e8161610d3f44574d2a1 Mon Sep 17 00:00:00 2001 From: Brett Adams Date: Thu, 12 Feb 2026 05:31:30 +1000 Subject: [PATCH] Complete config-entry-unloading quality check in Teslemetry (#161956) Co-authored-by: Claude --- homeassistant/components/teslemetry/__init__.py | 10 ++++++---- homeassistant/components/teslemetry/models.py | 2 -- homeassistant/components/teslemetry/quality_scale.yaml | 8 +------- 3 files changed, 7 insertions(+), 13 deletions(-) diff --git a/homeassistant/components/teslemetry/__init__.py b/homeassistant/components/teslemetry/__init__.py index 319f2a5d156..a750a9262b9 100644 --- a/homeassistant/components/teslemetry/__init__.py +++ b/homeassistant/components/teslemetry/__init__.py @@ -208,9 +208,11 @@ async def async_setup_entry(hass: HomeAssistant, entry: TeslemetryConfigEntry) - manual=True, ) - remove_listener = stream.async_add_listener( - create_handle_vehicle_stream(vin, coordinator), - {"vin": vin}, + entry.async_on_unload( + stream.async_add_listener( + create_handle_vehicle_stream(vin, coordinator), + {"vin": vin}, + ) ) stream_vehicle = stream.get_vehicle(vin) poll = vehicle_metadata[vin].get("polling", False) @@ -226,7 +228,6 @@ async def async_setup_entry(hass: HomeAssistant, entry: TeslemetryConfigEntry) - vin=vin, firmware=firmware, device=device, - remove_listener=remove_listener, ) ) @@ -351,6 +352,7 @@ async def async_setup_entry(hass: HomeAssistant, entry: TeslemetryConfigEntry) - await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS) if stream: + entry.async_on_unload(stream.close) entry.async_create_background_task(hass, stream.listen(), "Teslemetry Stream") return True diff --git a/homeassistant/components/teslemetry/models.py b/homeassistant/components/teslemetry/models.py index 6d12aa56470..3492e9da986 100644 --- a/homeassistant/components/teslemetry/models.py +++ b/homeassistant/components/teslemetry/models.py @@ -3,7 +3,6 @@ from __future__ import annotations import asyncio -from collections.abc import Callable from dataclasses import dataclass from tesla_fleet_api.const import Scope @@ -44,7 +43,6 @@ class TeslemetryVehicleData: vin: str firmware: str device: DeviceInfo - remove_listener: Callable wakelock = asyncio.Lock() diff --git a/homeassistant/components/teslemetry/quality_scale.yaml b/homeassistant/components/teslemetry/quality_scale.yaml index d916b54d0e6..a3e26512cdb 100644 --- a/homeassistant/components/teslemetry/quality_scale.yaml +++ b/homeassistant/components/teslemetry/quality_scale.yaml @@ -20,13 +20,7 @@ rules: unique-config-entry: done # Silver action-exceptions: done - config-entry-unloading: - status: todo - comment: | - async_unload_entry must clean up: (1) close TeslemetryStream websocket via - stream.close(), (2) call remove_listener() for each vehicle to unsubscribe - from stream events, (3) consider using entry.async_on_unload() during setup - to register cleanup callbacks automatically. + config-entry-unloading: done docs-configuration-parameters: done docs-installation-parameters: done entity-unavailable: done