Raise issue for deprecated imperial unit system (#130979)

This commit is contained in:
G Johansson 2024-12-13 10:05:46 +01:00 committed by GitHub
parent 8b579d83ce
commit 8cde404997
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 91 additions and 3 deletions

View File

@ -10,6 +10,10 @@
"title": "The country has not been configured",
"description": "No country has been configured, please update the configuration by clicking on the \"learn more\" button below."
},
"imperial_unit_system": {
"title": "The imperial unit system is deprecated",
"description": "The imperial unit system is deprecated and your system is currently using us customary. Please update your configuration to use the us customary unit system and reload the core configuration to fix this issue."
},
"deprecated_yaml": {
"title": "The {integration_title} YAML configuration is being removed",
"description": "Configuring {integration_title} using YAML is being removed.\n\nYour existing YAML configuration has been imported into the UI automatically.\n\nRemove the `{domain}` configuration from your configuration.yaml file and restart Home Assistant to fix this issue."

View File

@ -68,11 +68,11 @@ from .util.hass_dict import HassKey
from .util.package import is_docker_env
from .util.unit_system import (
_CONF_UNIT_SYSTEM_IMPERIAL,
_CONF_UNIT_SYSTEM_METRIC,
_CONF_UNIT_SYSTEM_US_CUSTOMARY,
METRIC_SYSTEM,
UnitSystem,
get_unit_system,
validate_unit_system,
)
# Typing imports that create a circular dependency
@ -188,6 +188,26 @@ _CUSTOMIZE_CONFIG_SCHEMA = vol.Schema(
)
def _raise_issue_if_imperial_unit_system(
hass: HomeAssistant, config: dict[str, Any]
) -> dict[str, Any]:
if config.get(CONF_UNIT_SYSTEM) == _CONF_UNIT_SYSTEM_IMPERIAL:
ir.async_create_issue(
hass,
HOMEASSISTANT_DOMAIN,
"imperial_unit_system",
is_fixable=False,
learn_more_url="homeassistant://config/general",
severity=ir.IssueSeverity.WARNING,
translation_key="imperial_unit_system",
)
config[CONF_UNIT_SYSTEM] = _CONF_UNIT_SYSTEM_US_CUSTOMARY
else:
ir.async_delete_issue(hass, HOMEASSISTANT_DOMAIN, "imperial_unit_system")
return config
def _raise_issue_if_historic_currency(hass: HomeAssistant, currency: str) -> None:
if currency not in HISTORIC_CURRENCIES:
ir.async_delete_issue(hass, HOMEASSISTANT_DOMAIN, "historic_currency")
@ -249,7 +269,11 @@ CORE_CONFIG_SCHEMA = vol.All(
CONF_ELEVATION: vol.Coerce(int),
CONF_RADIUS: cv.positive_int,
vol.Remove(CONF_TEMPERATURE_UNIT): cv.temperature_unit,
CONF_UNIT_SYSTEM: validate_unit_system,
CONF_UNIT_SYSTEM: vol.Any(
_CONF_UNIT_SYSTEM_METRIC,
_CONF_UNIT_SYSTEM_US_CUSTOMARY,
_CONF_UNIT_SYSTEM_IMPERIAL,
),
CONF_TIME_ZONE: cv.time_zone,
vol.Optional(CONF_INTERNAL_URL): cv.url,
vol.Optional(CONF_EXTERNAL_URL): cv.url,
@ -333,6 +357,9 @@ async def async_process_ha_core_config(hass: HomeAssistant, config: dict) -> Non
# so we need to run it in an executor job.
config = await hass.async_add_executor_job(CORE_CONFIG_SCHEMA, config)
# Check if we need to raise an issue for imperial unit system
config = _raise_issue_if_imperial_unit_system(hass, config)
# Only load auth during startup.
if not hasattr(hass, "auth"):
if (auth_conf := config.get(CONF_AUTH_PROVIDERS)) is None:

View File

@ -233,7 +233,6 @@ def _deprecated_unit_system(value: str) -> str:
"""Convert deprecated unit system."""
if value == _CONF_UNIT_SYSTEM_IMPERIAL:
# need to add warning in 2023.1
return _CONF_UNIT_SYSTEM_US_CUSTOMARY
return value

View File

@ -1080,3 +1080,27 @@ async def test_set_time_zone_deprecated(hass: HomeAssistant) -> None:
),
):
await hass.config.set_time_zone("America/New_York")
async def test_core_config_schema_imperial_unit(
hass: HomeAssistant, issue_registry: ir.IssueRegistry
) -> None:
"""Test core config schema."""
await async_process_ha_core_config(
hass,
{
"latitude": 60,
"longitude": 50,
"elevation": 25,
"name": "Home",
"unit_system": "imperial",
"time_zone": "America/New_York",
"currency": "USD",
"country": "US",
"language": "en",
"radius": 150,
},
)
issue = issue_registry.async_get_issue("homeassistant", "imperial_unit_system")
assert issue

View File

@ -24,6 +24,8 @@ from homeassistant.const import (
UnitOfVolume,
UnitOfVolumetricFlux,
)
from homeassistant.core import HomeAssistant
from homeassistant.core_config import async_process_ha_core_config
from homeassistant.exceptions import HomeAssistantError
from homeassistant.util.unit_system import ( # pylint: disable=hass-deprecated-import
_CONF_UNIT_SYSTEM_IMPERIAL,
@ -877,3 +879,35 @@ def test_imperial_converted_units(device_class: SensorDeviceClass) -> None:
assert (device_class, unit) not in unit_system._conversions
continue
assert (device_class, unit) in unit_system._conversions
async def test_imperial_deprecated_log_warning(
hass: HomeAssistant, caplog: pytest.LogCaptureFixture
) -> None:
"""Test deprecated imperial unit system logs warning."""
await async_process_ha_core_config(
hass,
{
"latitude": 60,
"longitude": 50,
"elevation": 25,
"name": "Home",
"unit_system": "imperial",
"time_zone": "America/New_York",
"currency": "USD",
"country": "US",
"language": "en",
"radius": 150,
},
)
assert hass.config.latitude == 60
assert hass.config.longitude == 50
assert hass.config.elevation == 25
assert hass.config.location_name == "Home"
assert hass.config.units is US_CUSTOMARY_SYSTEM
assert hass.config.time_zone == "America/New_York"
assert hass.config.currency == "USD"
assert hass.config.country == "US"
assert hass.config.language == "en"
assert hass.config.radius == 150