Stop importing the deprecated CONCENTRATION_MICROGRAMS_PER_CUBIC_METER
HA logs a removal warning (2027.8) every time this name is accessed on releases that carry UnitOfDensity, attributed straight to this integration since it's a plain module-level import. UnitOfDensity is the replacement, but hacs.json's floor (2025.1.0) predates it existing at all -- pytest-homeassistant-custom-component 0.13.316, the newest available, still has no UnitOfDensity either, so this can't be a static import on either branch without breaking support for part of the version range. Resolved with a runtime getattr instead: reads UnitOfDensity off the homeassistant.const module if present and uses its MICROGRAMS_PER_CUBIC_METER member, otherwise falls back to the plain (un-deprecated, on those older releases) constant. The getattr short-circuits before the deprecated name is ever touched on a release new enough to have UnitOfDensity, so the warning stops firing there without dropping support for anything still on the old one. Same feature-detection shape _relabel_particulate_statistics already uses a few lines down for new_unit_class. Verified the resolution logic directly: against the installed HA (2026.2.3, pre-UnitOfDensity) it resolves to the plain constant with no warning; a simulated future homeassistant.const with UnitOfDensity present resolves to it without ever touching the deprecated name (a guard that raises on that access never fires). Full suite (1573 tests), ruff, and `ty check custom_components tests` (CI's exact invocation) all pass.
This commit is contained in:
@@ -7,10 +7,8 @@ import logging
|
|||||||
import re
|
import re
|
||||||
from typing import Any
|
from typing import Any
|
||||||
|
|
||||||
|
from homeassistant import const as ha_const
|
||||||
from homeassistant.config_entries import ConfigEntry
|
from homeassistant.config_entries import ConfigEntry
|
||||||
from homeassistant.const import (
|
|
||||||
CONCENTRATION_MICROGRAMS_PER_CUBIC_METER as PARTICULATE_UNIT,
|
|
||||||
)
|
|
||||||
from homeassistant.const import EVENT_HOMEASSISTANT_STOP
|
from homeassistant.const import EVENT_HOMEASSISTANT_STOP
|
||||||
from homeassistant.core import Event, HomeAssistant, callback
|
from homeassistant.core import Event, HomeAssistant, callback
|
||||||
from homeassistant.exceptions import ConfigEntryNotReady
|
from homeassistant.exceptions import ConfigEntryNotReady
|
||||||
@@ -25,6 +23,22 @@ from .services import async_setup_services
|
|||||||
|
|
||||||
_LOGGER = logging.getLogger(__name__)
|
_LOGGER = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
# UnitOfDensity is the non-deprecated home for this value from whichever HA
|
||||||
|
# release introduces it; CONCENTRATION_MICROGRAMS_PER_CUBIC_METER logs a
|
||||||
|
# removal warning (2027.8) on those releases every time it's accessed.
|
||||||
|
# hacs.json's floor (2025.1.0) predates UnitOfDensity existing at all, so
|
||||||
|
# this is a runtime getattr rather than a static import ty could only ever
|
||||||
|
# resolve against one HA generation -- see _relabel_particulate_statistics'
|
||||||
|
# own new_unit_class feature-detection below for the same pattern. The
|
||||||
|
# getattr short-circuits before the deprecated name is ever touched on a
|
||||||
|
# release new enough to have UnitOfDensity.
|
||||||
|
_unit_of_density = getattr(ha_const, "UnitOfDensity", None)
|
||||||
|
PARTICULATE_UNIT = (
|
||||||
|
_unit_of_density.MICROGRAMS_PER_CUBIC_METER
|
||||||
|
if _unit_of_density is not None
|
||||||
|
else ha_const.CONCENTRATION_MICROGRAMS_PER_CUBIC_METER
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
async def async_setup(hass: HomeAssistant, config: ConfigType) -> bool:
|
async def async_setup(hass: HomeAssistant, config: ConfigType) -> bool:
|
||||||
# Services are process-global, registered once here rather than per
|
# Services are process-global, registered once here rather than per
|
||||||
|
|||||||
Reference in New Issue
Block a user