Surepetcare, strict typing (#56425)
* Surepetcare, strict typing Signed-off-by: Daniel Hjelseth Høyer <github@dahoiv.net> * Surepetcare, strict typing Signed-off-by: Daniel Hjelseth Høyer <github@dahoiv.net>pull/56433/head
parent
d76163e5be
commit
00f7548fa0
|
@ -98,6 +98,7 @@ homeassistant.components.sonos.media_player
|
|||
homeassistant.components.ssdp.*
|
||||
homeassistant.components.stream.*
|
||||
homeassistant.components.sun.*
|
||||
homeassistant.components.surepetcare.*
|
||||
homeassistant.components.switch.*
|
||||
homeassistant.components.switcher_kis.*
|
||||
homeassistant.components.synology_dsm.*
|
||||
|
|
|
@ -3,8 +3,10 @@ from __future__ import annotations
|
|||
|
||||
from abc import abstractmethod
|
||||
import logging
|
||||
from typing import cast
|
||||
|
||||
from surepy.entities import SurepyEntity
|
||||
from surepy.entities.pet import Pet as SurepyPet
|
||||
from surepy.enums import EntityType, Location
|
||||
|
||||
from homeassistant.components.binary_sensor import (
|
||||
|
@ -12,7 +14,9 @@ from homeassistant.components.binary_sensor import (
|
|||
DEVICE_CLASS_PRESENCE,
|
||||
BinarySensorEntity,
|
||||
)
|
||||
from homeassistant.core import callback
|
||||
from homeassistant.config_entries import ConfigEntry
|
||||
from homeassistant.core import HomeAssistant, callback
|
||||
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
||||
from homeassistant.helpers.update_coordinator import (
|
||||
CoordinatorEntity,
|
||||
DataUpdateCoordinator,
|
||||
|
@ -23,10 +27,12 @@ from .const import DOMAIN
|
|||
_LOGGER = logging.getLogger(__name__)
|
||||
|
||||
|
||||
async def async_setup_entry(hass, entry, async_add_entities) -> None:
|
||||
async def async_setup_entry(
|
||||
hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback
|
||||
) -> None:
|
||||
"""Set up Sure PetCare Flaps binary sensors based on a config entry."""
|
||||
|
||||
entities: list[SurepyEntity | Pet | Hub | DeviceConnectivity] = []
|
||||
entities: list[SurePetcareBinarySensor] = []
|
||||
|
||||
coordinator: DataUpdateCoordinator = hass.data[DOMAIN][entry.entry_id]
|
||||
|
||||
|
@ -75,7 +81,7 @@ class SurePetcareBinarySensor(CoordinatorEntity, BinarySensorEntity):
|
|||
|
||||
@abstractmethod
|
||||
@callback
|
||||
def _update_attr(self, surepy_entity) -> None:
|
||||
def _update_attr(self, surepy_entity: SurepyEntity) -> None:
|
||||
"""Update the state and attributes."""
|
||||
|
||||
@callback
|
||||
|
@ -96,7 +102,7 @@ class Hub(SurePetcareBinarySensor):
|
|||
return super().available and bool(self._attr_is_on)
|
||||
|
||||
@callback
|
||||
def _update_attr(self, surepy_entity) -> None:
|
||||
def _update_attr(self, surepy_entity: SurepyEntity) -> None:
|
||||
"""Get the latest data and update the state."""
|
||||
state = surepy_entity.raw_data()["status"]
|
||||
self._attr_is_on = self._attr_available = bool(state["online"])
|
||||
|
@ -118,8 +124,9 @@ class Pet(SurePetcareBinarySensor):
|
|||
_attr_device_class = DEVICE_CLASS_PRESENCE
|
||||
|
||||
@callback
|
||||
def _update_attr(self, surepy_entity) -> None:
|
||||
def _update_attr(self, surepy_entity: SurepyEntity) -> None:
|
||||
"""Get the latest data and update the state."""
|
||||
surepy_entity = cast(SurepyPet, surepy_entity)
|
||||
state = surepy_entity.location
|
||||
try:
|
||||
self._attr_is_on = bool(Location(state.where) == Location.INSIDE)
|
||||
|
@ -153,7 +160,7 @@ class DeviceConnectivity(SurePetcareBinarySensor):
|
|||
)
|
||||
|
||||
@callback
|
||||
def _update_attr(self, surepy_entity):
|
||||
def _update_attr(self, surepy_entity: SurepyEntity) -> None:
|
||||
state = surepy_entity.raw_data()["status"]
|
||||
self._attr_is_on = bool(state)
|
||||
if state:
|
||||
|
|
|
@ -46,7 +46,7 @@ class ConfigFlow(config_entries.ConfigFlow, domain=DOMAIN):
|
|||
|
||||
VERSION = 1
|
||||
|
||||
async def async_step_import(self, import_info):
|
||||
async def async_step_import(self, import_info: dict[str, Any] | None) -> FlowResult:
|
||||
"""Set the config entry up from yaml."""
|
||||
return await self.async_step_user(import_info)
|
||||
|
||||
|
|
|
@ -7,8 +7,10 @@ from surepy.entities import SurepyEntity
|
|||
from surepy.enums import EntityType
|
||||
|
||||
from homeassistant.components.sensor import SensorEntity
|
||||
from homeassistant.config_entries import ConfigEntry
|
||||
from homeassistant.const import ATTR_VOLTAGE, DEVICE_CLASS_BATTERY, PERCENTAGE
|
||||
from homeassistant.core import callback
|
||||
from homeassistant.core import HomeAssistant, callback
|
||||
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
||||
from homeassistant.helpers.update_coordinator import (
|
||||
CoordinatorEntity,
|
||||
DataUpdateCoordinator,
|
||||
|
@ -19,10 +21,12 @@ from .const import DOMAIN, SURE_BATT_VOLTAGE_DIFF, SURE_BATT_VOLTAGE_LOW
|
|||
_LOGGER = logging.getLogger(__name__)
|
||||
|
||||
|
||||
async def async_setup_entry(hass, entry, async_add_entities):
|
||||
async def async_setup_entry(
|
||||
hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback
|
||||
) -> None:
|
||||
"""Set up Sure PetCare Flaps sensors."""
|
||||
|
||||
entities: list[SurepyEntity] = []
|
||||
entities: list[SureBattery] = []
|
||||
|
||||
coordinator: DataUpdateCoordinator = hass.data[DOMAIN][entry.entry_id]
|
||||
|
||||
|
|
11
mypy.ini
11
mypy.ini
|
@ -1089,6 +1089,17 @@ no_implicit_optional = true
|
|||
warn_return_any = true
|
||||
warn_unreachable = true
|
||||
|
||||
[mypy-homeassistant.components.surepetcare.*]
|
||||
check_untyped_defs = true
|
||||
disallow_incomplete_defs = true
|
||||
disallow_subclassing_any = true
|
||||
disallow_untyped_calls = true
|
||||
disallow_untyped_decorators = true
|
||||
disallow_untyped_defs = true
|
||||
no_implicit_optional = true
|
||||
warn_return_any = true
|
||||
warn_unreachable = true
|
||||
|
||||
[mypy-homeassistant.components.switch.*]
|
||||
check_untyped_defs = true
|
||||
disallow_incomplete_defs = true
|
||||
|
|
Loading…
Reference in New Issue