Deprecate name property of unit system (#80257)

This commit is contained in:
epenet 2022-10-14 12:06:14 +02:00 committed by GitHub
parent d3840a04b5
commit 4dd0c079d5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 37 additions and 3 deletions

View File

@ -2015,7 +2015,9 @@ class Config:
"latitude": self.latitude, "latitude": self.latitude,
"longitude": self.longitude, "longitude": self.longitude,
"elevation": self.elevation, "elevation": self.elevation,
"unit_system": self.units.name, # We don't want any components to use the name of the unit system
# so we are using the private attribute here
"unit_system": self.units._name, # pylint: disable=protected-access
"location_name": self.location_name, "location_name": self.location_name,
"time_zone": self.time_zone, "time_zone": self.time_zone,
"external_url": self.external_url, "external_url": self.external_url,

View File

@ -31,6 +31,7 @@ from homeassistant.const import (
VOLUME_LITERS, VOLUME_LITERS,
WIND_SPEED, WIND_SPEED,
) )
from homeassistant.helpers.frame import report
from .unit_conversion import ( from .unit_conversion import (
DistanceConverter, DistanceConverter,
@ -107,7 +108,7 @@ class UnitSystem:
if errors: if errors:
raise ValueError(errors) raise ValueError(errors)
self.name = name self._name = name
self.accumulated_precipitation_unit = accumulated_precipitation self.accumulated_precipitation_unit = accumulated_precipitation
self.temperature_unit = temperature self.temperature_unit = temperature
self.length_unit = length self.length_unit = length
@ -116,10 +117,21 @@ class UnitSystem:
self.volume_unit = volume self.volume_unit = volume
self.wind_speed_unit = wind_speed self.wind_speed_unit = wind_speed
@property
def name(self) -> str:
"""Return the name of the unit system."""
report(
"accesses the `name` property of the unit system. "
"This is deprecated and will stop working in Home Assistant 2023.1. "
"Please adjust to use instance check instead.",
error_if_core=False,
)
return self._name
@property @property
def is_metric(self) -> bool: def is_metric(self) -> bool:
"""Determine if this is the metric unit system.""" """Determine if this is the metric unit system."""
return self.name == CONF_UNIT_SYSTEM_METRIC return self._name == CONF_UNIT_SYSTEM_METRIC
def temperature(self, temperature: float, from_unit: str) -> float: def temperature(self, temperature: float, from_unit: str) -> float:
"""Convert the given temperature to this unit system.""" """Convert the given temperature to this unit system."""

View File

@ -3,6 +3,8 @@ import pytest
from homeassistant.const import ( from homeassistant.const import (
ACCUMULATED_PRECIPITATION, ACCUMULATED_PRECIPITATION,
CONF_UNIT_SYSTEM_IMPERIAL,
CONF_UNIT_SYSTEM_METRIC,
LENGTH, LENGTH,
LENGTH_KILOMETERS, LENGTH_KILOMETERS,
LENGTH_METERS, LENGTH_METERS,
@ -298,3 +300,21 @@ def test_is_metric():
"""Test the is metric flag.""" """Test the is metric flag."""
assert METRIC_SYSTEM.is_metric assert METRIC_SYSTEM.is_metric
assert not IMPERIAL_SYSTEM.is_metric assert not IMPERIAL_SYSTEM.is_metric
@pytest.mark.parametrize(
"unit_system, expected_name",
[
(METRIC_SYSTEM, CONF_UNIT_SYSTEM_METRIC),
(IMPERIAL_SYSTEM, CONF_UNIT_SYSTEM_IMPERIAL),
],
)
def test_deprecated_name(
caplog: pytest.LogCaptureFixture, unit_system: UnitSystem, expected_name: str
) -> None:
"""Test the name is deprecated."""
assert unit_system.name == expected_name
assert (
"Detected code that accesses the `name` property of the unit system."
in caplog.text
)