Tweak typing of Entity.platform (#88321)

* Tweak typing of Entity.platform

* Fix mypy errors

* Fix update test

* Improve comments
This commit is contained in:
Erik Montnemery 2023-06-09 10:56:04 +02:00 committed by GitHub
parent 41022fdce4
commit 4085c4f6d8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 11 additions and 16 deletions

View File

@ -323,7 +323,6 @@ class RflinkDevice(Entity):
Contains the common logic for Rflink entities. Contains the common logic for Rflink entities.
""" """
platform = None
_state: bool | None = None _state: bool | None = None
_available = True _available = True
_attr_should_poll = False _attr_should_poll = False

View File

@ -236,9 +236,6 @@ class UpdateEntity(RestoreEntity):
Update entities return the brand icon based on the integration Update entities return the brand icon based on the integration
domain by default. domain by default.
""" """
if self.platform is None:
return None
return ( return (
f"https://brands.home-assistant.io/_/{self.platform.platform_name}/icon.png" f"https://brands.home-assistant.io/_/{self.platform.platform_name}/icon.png"
) )

View File

@ -235,13 +235,15 @@ class Entity(ABC):
# this class. These may be used to customize the behavior of the entity. # this class. These may be used to customize the behavior of the entity.
entity_id: str = None # type: ignore[assignment] entity_id: str = None # type: ignore[assignment]
# Owning hass instance. Will be set by EntityPlatform # Owning hass instance. Set by EntityPlatform by calling add_to_platform_start
# While not purely typed, it makes typehinting more useful for us # While not purely typed, it makes typehinting more useful for us
# and removes the need for constant None checks or asserts. # and removes the need for constant None checks or asserts.
hass: HomeAssistant = None # type: ignore[assignment] hass: HomeAssistant = None # type: ignore[assignment]
# Owning platform instance. Will be set by EntityPlatform # Owning platform instance. Set by EntityPlatform by calling add_to_platform_start
platform: EntityPlatform | None = None # While not purely typed, it makes typehinting more useful for us
# and removes the need for constant None checks or asserts.
platform: EntityPlatform = None # type: ignore[assignment]
# Entity description instance for this Entity # Entity description instance for this Entity
entity_description: EntityDescription entity_description: EntityDescription
@ -840,7 +842,7 @@ class Entity(ABC):
self._call_on_remove_callbacks() self._call_on_remove_callbacks()
self.hass = None # type: ignore[assignment] self.hass = None # type: ignore[assignment]
self.platform = None self.platform = None # type: ignore[assignment]
self.parallel_updates = None self.parallel_updates = None
async def add_to_platform_finish(self) -> None: async def add_to_platform_finish(self) -> None:

View File

@ -49,6 +49,7 @@ async def test_update(hass: HomeAssistant) -> None:
"""Test getting data from the mocked update entity.""" """Test getting data from the mocked update entity."""
update = MockUpdateEntity() update = MockUpdateEntity()
update.hass = hass update.hass = hass
update.platform = MockEntityPlatform(hass)
update._attr_installed_version = "1.0.0" update._attr_installed_version = "1.0.0"
update._attr_latest_version = "1.0.1" update._attr_latest_version = "1.0.1"
@ -57,7 +58,10 @@ async def test_update(hass: HomeAssistant) -> None:
update._attr_title = "Title" update._attr_title = "Title"
assert update.entity_category is EntityCategory.DIAGNOSTIC assert update.entity_category is EntityCategory.DIAGNOSTIC
assert update.entity_picture is None assert (
update.entity_picture
== "https://brands.home-assistant.io/_/test_platform/icon.png"
)
assert update.installed_version == "1.0.0" assert update.installed_version == "1.0.0"
assert update.latest_version == "1.0.1" assert update.latest_version == "1.0.1"
assert update.release_summary == "Summary" assert update.release_summary == "Summary"
@ -76,13 +80,6 @@ async def test_update(hass: HomeAssistant) -> None:
ATTR_TITLE: "Title", ATTR_TITLE: "Title",
} }
# Test with platform
update.platform = MockEntityPlatform(hass)
assert (
update.entity_picture
== "https://brands.home-assistant.io/_/test_platform/icon.png"
)
# Test no update available # Test no update available
update._attr_installed_version = "1.0.0" update._attr_installed_version = "1.0.0"
update._attr_latest_version = "1.0.0" update._attr_latest_version = "1.0.0"