Use loader.async_suggest_report_issue in vacuum (#101391)

This commit is contained in:
Erik Montnemery 2023-10-05 20:39:24 +02:00 committed by GitHub
parent b7914582db
commit a428bbfc2e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 60 additions and 9 deletions

View File

@ -40,7 +40,11 @@ from homeassistant.helpers.entity_component import EntityComponent
from homeassistant.helpers.entity_platform import EntityPlatform from homeassistant.helpers.entity_platform import EntityPlatform
from homeassistant.helpers.icon import icon_for_battery_level from homeassistant.helpers.icon import icon_for_battery_level
from homeassistant.helpers.typing import ConfigType from homeassistant.helpers.typing import ConfigType
from homeassistant.loader import bind_hass from homeassistant.loader import (
async_get_issue_tracker,
async_suggest_report_issue,
bind_hass,
)
_LOGGER = logging.getLogger(__name__) _LOGGER = logging.getLogger(__name__)
@ -384,6 +388,16 @@ class VacuumEntity(_BaseVacuum, ToggleEntity):
# we don't worry about demo and mqtt has it's own deprecation warnings. # we don't worry about demo and mqtt has it's own deprecation warnings.
if self.platform.platform_name in ("demo", "mqtt"): if self.platform.platform_name in ("demo", "mqtt"):
return return
translation_key = "deprecated_vacuum_base_class"
translation_placeholders = {"platform": self.platform.platform_name}
issue_tracker = async_get_issue_tracker(
hass,
integration_domain=self.platform.platform_name,
module=type(self).__module__,
)
if issue_tracker:
translation_placeholders["issue_tracker"] = issue_tracker
translation_key = "deprecated_vacuum_base_class_url"
ir.async_create_issue( ir.async_create_issue(
hass, hass,
DOMAIN, DOMAIN,
@ -393,21 +407,24 @@ class VacuumEntity(_BaseVacuum, ToggleEntity):
is_persistent=False, is_persistent=False,
issue_domain=self.platform.platform_name, issue_domain=self.platform.platform_name,
severity=ir.IssueSeverity.WARNING, severity=ir.IssueSeverity.WARNING,
translation_key="deprecated_vacuum_base_class", translation_key=translation_key,
translation_placeholders={ translation_placeholders=translation_placeholders,
"platform": self.platform.platform_name, )
},
report_issue = async_suggest_report_issue(
hass,
integration_domain=self.platform.platform_name,
module=type(self).__module__,
) )
_LOGGER.warning( _LOGGER.warning(
( (
"%s::%s is extending the deprecated base class VacuumEntity instead of " "%s::%s is extending the deprecated base class VacuumEntity instead of "
"StateVacuumEntity, this is not valid and will be unsupported " "StateVacuumEntity, this is not valid and will be unsupported "
"from Home Assistant 2024.2. Please report it to the author of the '%s'" "from Home Assistant 2024.2. Please %s"
" custom integration"
), ),
self.platform.platform_name, self.platform.platform_name,
self.__class__.__name__, self.__class__.__name__,
self.platform.platform_name, report_issue,
) )
entity_description: VacuumEntityDescription entity_description: VacuumEntityDescription

View File

@ -33,6 +33,10 @@
"deprecated_vacuum_base_class": { "deprecated_vacuum_base_class": {
"title": "The {platform} custom integration is using deprecated vacuum feature", "title": "The {platform} custom integration is using deprecated vacuum feature",
"description": "The custom integration `{platform}` is extending the deprecated base class `VacuumEntity` instead of `StateVacuumEntity`.\n\nPlease report it to the author of the `{platform}` custom integration.\n\nOnce an updated version of `{platform}` is available, install it and restart Home Assistant to fix this issue." "description": "The custom integration `{platform}` is extending the deprecated base class `VacuumEntity` instead of `StateVacuumEntity`.\n\nPlease report it to the author of the `{platform}` custom integration.\n\nOnce an updated version of `{platform}` is available, install it and restart Home Assistant to fix this issue."
},
"deprecated_vacuum_base_class_url": {
"title": "[%key:component::vacuum::issues::deprecated_vacuum_base_class::title%]",
"description": "The custom integration `{platform}` is extending the deprecated base class `VacuumEntity` instead of `StateVacuumEntity`.\n\nPlease create a bug report at {issue_tracker}.\n\nOnce an updated version of `{platform}` is available, install it and restart Home Assistant to fix this issue."
} }
}, },
"services": { "services": {

View File

@ -36,8 +36,30 @@ def config_flow_fixture(hass: HomeAssistant) -> Generator[None, None, None]:
yield yield
ISSUE_TRACKER = "https://blablabla.com"
@pytest.mark.parametrize(
("manifest_extra", "translation_key", "translation_placeholders_extra"),
[
(
{},
"deprecated_vacuum_base_class",
{},
),
(
{"issue_tracker": ISSUE_TRACKER},
"deprecated_vacuum_base_class_url",
{"issue_tracker": ISSUE_TRACKER},
),
],
)
async def test_deprecated_base_class( async def test_deprecated_base_class(
hass: HomeAssistant, caplog: pytest.LogCaptureFixture hass: HomeAssistant,
caplog: pytest.LogCaptureFixture,
manifest_extra: dict[str, str],
translation_key: str,
translation_placeholders_extra: dict[str, str],
) -> None: ) -> None:
"""Test warnings when adding VacuumEntity to the state machine.""" """Test warnings when adding VacuumEntity to the state machine."""
@ -54,7 +76,9 @@ async def test_deprecated_base_class(
MockModule( MockModule(
TEST_DOMAIN, TEST_DOMAIN,
async_setup_entry=async_setup_entry_init, async_setup_entry=async_setup_entry_init,
partial_manifest=manifest_extra,
), ),
built_in=False,
) )
entity1 = VacuumEntity() entity1 = VacuumEntity()
@ -91,3 +115,9 @@ async def test_deprecated_base_class(
VACUUM_DOMAIN, f"deprecated_vacuum_base_class_{TEST_DOMAIN}" VACUUM_DOMAIN, f"deprecated_vacuum_base_class_{TEST_DOMAIN}"
) )
assert issue.issue_domain == TEST_DOMAIN assert issue.issue_domain == TEST_DOMAIN
assert issue.issue_id == f"deprecated_vacuum_base_class_{TEST_DOMAIN}"
assert issue.translation_key == translation_key
assert (
issue.translation_placeholders
== {"platform": "test"} | translation_placeholders_extra
)