Fix and enable type checks in Rituals Perfume Genie (#49947)

This commit is contained in:
Milan Meulemans 2021-05-04 14:47:17 +02:00 committed by GitHub
parent c063f14c24
commit a0feee083c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 35 additions and 20 deletions

View File

@ -41,7 +41,7 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry):
for device in account_devices: for device in account_devices:
hublot = device.hub_data[HUBLOT] hublot = device.hub_data[HUBLOT]
coordinator = RitualsPerufmeGenieDataUpdateCoordinator(hass, device) coordinator = RitualsDataUpdateCoordinator(hass, device)
await coordinator.async_refresh() await coordinator.async_refresh()
hass.data[DOMAIN][entry.entry_id][DEVICES][hublot] = device hass.data[DOMAIN][entry.entry_id][DEVICES][hublot] = device
@ -61,7 +61,7 @@ async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry):
return unload_ok return unload_ok
class RitualsPerufmeGenieDataUpdateCoordinator(DataUpdateCoordinator): class RitualsDataUpdateCoordinator(DataUpdateCoordinator):
"""Class to manage fetching Rituals Perufme Genie device data from single endpoint.""" """Class to manage fetching Rituals Perufme Genie device data from single endpoint."""
def __init__(self, hass: HomeAssistant, device: Diffuser): def __init__(self, hass: HomeAssistant, device: Diffuser):

View File

@ -11,8 +11,8 @@ from homeassistant.components.binary_sensor import (
) )
from homeassistant.config_entries import ConfigEntry from homeassistant.config_entries import ConfigEntry
from homeassistant.core import HomeAssistant from homeassistant.core import HomeAssistant
from homeassistant.helpers.update_coordinator import CoordinatorEntity
from . import RitualsDataUpdateCoordinator
from .const import COORDINATORS, DEVICES, DOMAIN from .const import COORDINATORS, DEVICES, DOMAIN
from .entity import DiffuserEntity from .entity import DiffuserEntity
@ -38,7 +38,9 @@ async def async_setup_entry(
class DiffuserBatteryChargingBinarySensor(DiffuserEntity, BinarySensorEntity): class DiffuserBatteryChargingBinarySensor(DiffuserEntity, BinarySensorEntity):
"""Representation of a diffuser battery charging binary sensor.""" """Representation of a diffuser battery charging binary sensor."""
def __init__(self, diffuser: Diffuser, coordinator: CoordinatorEntity) -> None: def __init__(
self, diffuser: Diffuser, coordinator: RitualsDataUpdateCoordinator
) -> None:
"""Initialize the battery charging binary sensor.""" """Initialize the battery charging binary sensor."""
super().__init__(diffuser, coordinator, CHARGING_SUFFIX) super().__init__(diffuser, coordinator, CHARGING_SUFFIX)

View File

@ -1,12 +1,12 @@
"""Base class for Rituals Perfume Genie diffuser entity.""" """Base class for Rituals Perfume Genie diffuser entity."""
from __future__ import annotations from __future__ import annotations
from typing import Any
from pyrituals import Diffuser from pyrituals import Diffuser
from homeassistant.helpers.entity import DeviceInfo
from homeassistant.helpers.update_coordinator import CoordinatorEntity from homeassistant.helpers.update_coordinator import CoordinatorEntity
from . import RitualsDataUpdateCoordinator
from .const import ATTRIBUTES, DOMAIN, HUBLOT, SENSORS from .const import ATTRIBUTES, DOMAIN, HUBLOT, SENSORS
MANUFACTURER = "Rituals Cosmetics" MANUFACTURER = "Rituals Cosmetics"
@ -23,8 +23,13 @@ AVAILABLE_STATE = 1
class DiffuserEntity(CoordinatorEntity): class DiffuserEntity(CoordinatorEntity):
"""Representation of a diffuser entity.""" """Representation of a diffuser entity."""
coordinator: RitualsDataUpdateCoordinator
def __init__( def __init__(
self, diffuser: Diffuser, coordinator: CoordinatorEntity, entity_suffix: str self,
diffuser: Diffuser,
coordinator: RitualsDataUpdateCoordinator,
entity_suffix: str,
) -> None: ) -> None:
"""Init from config, hookup diffuser and coordinator.""" """Init from config, hookup diffuser and coordinator."""
super().__init__(coordinator) super().__init__(coordinator)
@ -49,7 +54,7 @@ class DiffuserEntity(CoordinatorEntity):
return super().available and self._diffuser.hub_data[STATUS] == AVAILABLE_STATE return super().available and self._diffuser.hub_data[STATUS] == AVAILABLE_STATE
@property @property
def device_info(self) -> dict[str, Any]: def device_info(self) -> DeviceInfo:
"""Return information about the device.""" """Return information about the device."""
return { return {
"name": self._hubname, "name": self._hubname,

View File

@ -1,4 +1,6 @@
"""Support for Rituals Perfume Genie sensors.""" """Support for Rituals Perfume Genie sensors."""
from __future__ import annotations
from typing import Callable from typing import Callable
from pyrituals import Diffuser from pyrituals import Diffuser
@ -10,8 +12,8 @@ from homeassistant.const import (
PERCENTAGE, PERCENTAGE,
) )
from homeassistant.core import HomeAssistant from homeassistant.core import HomeAssistant
from homeassistant.helpers.update_coordinator import CoordinatorEntity
from . import RitualsDataUpdateCoordinator
from .const import COORDINATORS, DEVICES, DOMAIN, ID, SENSORS from .const import COORDINATORS, DEVICES, DOMAIN, ID, SENSORS
from .entity import DiffuserEntity from .entity import DiffuserEntity
@ -38,7 +40,7 @@ async def async_setup_entry(
"""Set up the diffuser sensors.""" """Set up the diffuser sensors."""
diffusers = hass.data[DOMAIN][config_entry.entry_id][DEVICES] diffusers = hass.data[DOMAIN][config_entry.entry_id][DEVICES]
coordinators = hass.data[DOMAIN][config_entry.entry_id][COORDINATORS] coordinators = hass.data[DOMAIN][config_entry.entry_id][COORDINATORS]
entities = [] entities: list[DiffuserEntity] = []
for hublot, diffuser in diffusers.items(): for hublot, diffuser in diffusers.items():
coordinator = coordinators[hublot] coordinator = coordinators[hublot]
entities.append(DiffuserPerfumeSensor(diffuser, coordinator)) entities.append(DiffuserPerfumeSensor(diffuser, coordinator))
@ -53,7 +55,9 @@ async def async_setup_entry(
class DiffuserPerfumeSensor(DiffuserEntity): class DiffuserPerfumeSensor(DiffuserEntity):
"""Representation of a diffuser perfume sensor.""" """Representation of a diffuser perfume sensor."""
def __init__(self, diffuser: Diffuser, coordinator: CoordinatorEntity) -> None: def __init__(
self, diffuser: Diffuser, coordinator: RitualsDataUpdateCoordinator
) -> None:
"""Initialize the perfume sensor.""" """Initialize the perfume sensor."""
super().__init__(diffuser, coordinator, PERFUME_SUFFIX) super().__init__(diffuser, coordinator, PERFUME_SUFFIX)
@ -73,7 +77,9 @@ class DiffuserPerfumeSensor(DiffuserEntity):
class DiffuserFillSensor(DiffuserEntity): class DiffuserFillSensor(DiffuserEntity):
"""Representation of a diffuser fill sensor.""" """Representation of a diffuser fill sensor."""
def __init__(self, diffuser: Diffuser, coordinator: CoordinatorEntity) -> None: def __init__(
self, diffuser: Diffuser, coordinator: RitualsDataUpdateCoordinator
) -> None:
"""Initialize the fill sensor.""" """Initialize the fill sensor."""
super().__init__(diffuser, coordinator, FILL_SUFFIX) super().__init__(diffuser, coordinator, FILL_SUFFIX)
@ -93,7 +99,9 @@ class DiffuserFillSensor(DiffuserEntity):
class DiffuserBatterySensor(DiffuserEntity): class DiffuserBatterySensor(DiffuserEntity):
"""Representation of a diffuser battery sensor.""" """Representation of a diffuser battery sensor."""
def __init__(self, diffuser: Diffuser, coordinator: CoordinatorEntity) -> None: def __init__(
self, diffuser: Diffuser, coordinator: RitualsDataUpdateCoordinator
) -> None:
"""Initialize the battery sensor.""" """Initialize the battery sensor."""
super().__init__(diffuser, coordinator, BATTERY_SUFFIX) super().__init__(diffuser, coordinator, BATTERY_SUFFIX)
@ -116,7 +124,9 @@ class DiffuserBatterySensor(DiffuserEntity):
class DiffuserWifiSensor(DiffuserEntity): class DiffuserWifiSensor(DiffuserEntity):
"""Representation of a diffuser wifi sensor.""" """Representation of a diffuser wifi sensor."""
def __init__(self, diffuser: Diffuser, coordinator: CoordinatorEntity) -> None: def __init__(
self, diffuser: Diffuser, coordinator: RitualsDataUpdateCoordinator
) -> None:
"""Initialize the wifi sensor.""" """Initialize the wifi sensor."""
super().__init__(diffuser, coordinator, WIFI_SUFFIX) super().__init__(diffuser, coordinator, WIFI_SUFFIX)

View File

@ -8,8 +8,8 @@ from pyrituals import Diffuser
from homeassistant.components.switch import SwitchEntity from homeassistant.components.switch import SwitchEntity
from homeassistant.config_entries import ConfigEntry from homeassistant.config_entries import ConfigEntry
from homeassistant.core import HomeAssistant, callback from homeassistant.core import HomeAssistant, callback
from homeassistant.helpers.update_coordinator import CoordinatorEntity
from . import RitualsDataUpdateCoordinator
from .const import ATTRIBUTES, COORDINATORS, DEVICES, DOMAIN from .const import ATTRIBUTES, COORDINATORS, DEVICES, DOMAIN
from .entity import DiffuserEntity from .entity import DiffuserEntity
@ -37,7 +37,9 @@ async def async_setup_entry(
class DiffuserSwitch(SwitchEntity, DiffuserEntity): class DiffuserSwitch(SwitchEntity, DiffuserEntity):
"""Representation of a diffuser switch.""" """Representation of a diffuser switch."""
def __init__(self, diffuser: Diffuser, coordinator: CoordinatorEntity) -> None: def __init__(
self, diffuser: Diffuser, coordinator: RitualsDataUpdateCoordinator
) -> None:
"""Initialize the diffuser switch.""" """Initialize the diffuser switch."""
super().__init__(diffuser, coordinator, "") super().__init__(diffuser, coordinator, "")
self._is_on = self._diffuser.is_on self._is_on = self._diffuser.is_on

View File

@ -1125,9 +1125,6 @@ ignore_errors = true
[mypy-homeassistant.components.ring.*] [mypy-homeassistant.components.ring.*]
ignore_errors = true ignore_errors = true
[mypy-homeassistant.components.rituals_perfume_genie.*]
ignore_errors = true
[mypy-homeassistant.components.roku.*] [mypy-homeassistant.components.roku.*]
ignore_errors = true ignore_errors = true

View File

@ -178,7 +178,6 @@ IGNORED_MODULES: Final[list[str]] = [
"homeassistant.components.recorder.*", "homeassistant.components.recorder.*",
"homeassistant.components.reddit.*", "homeassistant.components.reddit.*",
"homeassistant.components.ring.*", "homeassistant.components.ring.*",
"homeassistant.components.rituals_perfume_genie.*",
"homeassistant.components.roku.*", "homeassistant.components.roku.*",
"homeassistant.components.rpi_power.*", "homeassistant.components.rpi_power.*",
"homeassistant.components.ruckus_unleashed.*", "homeassistant.components.ruckus_unleashed.*",