From 0a3aab935a594824c1dd5755e28b870572206eab Mon Sep 17 00:00:00 2001 From: Milan Meulemans Date: Mon, 12 Jul 2021 20:40:16 +0200 Subject: [PATCH] Use properties instead of raw data in the rituals integration (#52587) --- .../rituals_perfume_genie/__init__.py | 9 ++++--- .../rituals_perfume_genie/config_flow.py | 6 ++--- .../components/rituals_perfume_genie/const.py | 6 ++--- .../rituals_perfume_genie/entity.py | 17 ++++--------- .../rituals_perfume_genie/manifest.json | 2 +- .../rituals_perfume_genie/sensor.py | 24 ++++++------------- requirements_all.txt | 2 +- requirements_test_all.txt | 2 +- .../rituals_perfume_genie/test_config_flow.py | 3 ++- 9 files changed, 26 insertions(+), 45 deletions(-) diff --git a/homeassistant/components/rituals_perfume_genie/__init__.py b/homeassistant/components/rituals_perfume_genie/__init__.py index 84fc5ed2cf5..26dbfca08d9 100644 --- a/homeassistant/components/rituals_perfume_genie/__init__.py +++ b/homeassistant/components/rituals_perfume_genie/__init__.py @@ -11,7 +11,7 @@ from homeassistant.exceptions import ConfigEntryNotReady from homeassistant.helpers.aiohttp_client import async_get_clientsession from homeassistant.helpers.update_coordinator import DataUpdateCoordinator -from .const import ACCOUNT_HASH, COORDINATORS, DEVICES, DOMAIN, HUBLOT +from .const import ACCOUNT_HASH, COORDINATORS, DEVICES, DOMAIN PLATFORMS = ["binary_sensor", "number", "select", "sensor", "switch"] @@ -23,8 +23,7 @@ UPDATE_INTERVAL = timedelta(seconds=30) async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: """Set up Rituals Perfume Genie from a config entry.""" session = async_get_clientsession(hass) - account = Account(session=session) - account.data = {ACCOUNT_HASH: entry.data.get(ACCOUNT_HASH)} + account = Account(session=session, account_hash=entry.data[ACCOUNT_HASH]) try: account_devices = await account.get_devices() @@ -37,7 +36,7 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: } for device in account_devices: - hublot = device.hub_data[HUBLOT] + hublot = device.hublot coordinator = RitualsDataUpdateCoordinator(hass, device) await coordinator.async_refresh() @@ -68,7 +67,7 @@ class RitualsDataUpdateCoordinator(DataUpdateCoordinator): super().__init__( hass, _LOGGER, - name=f"{DOMAIN}-{device.hub_data[HUBLOT]}", + name=f"{DOMAIN}-{device.hublot}", update_interval=UPDATE_INTERVAL, ) diff --git a/homeassistant/components/rituals_perfume_genie/config_flow.py b/homeassistant/components/rituals_perfume_genie/config_flow.py index f1f037941b3..294dced4217 100644 --- a/homeassistant/components/rituals_perfume_genie/config_flow.py +++ b/homeassistant/components/rituals_perfume_genie/config_flow.py @@ -47,12 +47,12 @@ class ConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): _LOGGER.exception("Unexpected exception") errors["base"] = "unknown" else: - await self.async_set_unique_id(account.data[CONF_EMAIL]) + await self.async_set_unique_id(account.email) self._abort_if_unique_id_configured() return self.async_create_entry( - title=account.data[CONF_EMAIL], - data={ACCOUNT_HASH: account.data[ACCOUNT_HASH]}, + title=account.email, + data={ACCOUNT_HASH: account.account_hash}, ) return self.async_show_form( diff --git a/homeassistant/components/rituals_perfume_genie/const.py b/homeassistant/components/rituals_perfume_genie/const.py index bafdef9140c..21c570ffb93 100644 --- a/homeassistant/components/rituals_perfume_genie/const.py +++ b/homeassistant/components/rituals_perfume_genie/const.py @@ -1,9 +1,7 @@ """Constants for the Rituals Perfume Genie integration.""" DOMAIN = "rituals_perfume_genie" +ACCOUNT_HASH = "account_hash" + COORDINATORS = "coordinators" DEVICES = "devices" - -ACCOUNT_HASH = "account_hash" -HUBLOT = "hublot" -SENSORS = "sensors" diff --git a/homeassistant/components/rituals_perfume_genie/entity.py b/homeassistant/components/rituals_perfume_genie/entity.py index 19c3f3cd424..16c4e76686c 100644 --- a/homeassistant/components/rituals_perfume_genie/entity.py +++ b/homeassistant/components/rituals_perfume_genie/entity.py @@ -6,19 +6,12 @@ from pyrituals import Diffuser from homeassistant.helpers.update_coordinator import CoordinatorEntity from . import RitualsDataUpdateCoordinator -from .const import DOMAIN, HUBLOT, SENSORS +from .const import DOMAIN MANUFACTURER = "Rituals Cosmetics" MODEL = "The Perfume Genie" MODEL2 = "The Perfume Genie 2.0" -ATTRIBUTES = "attributes" -ROOMNAME = "roomnamec" -STATUS = "status" -VERSION = "versionc" - -AVAILABLE_STATE = 1 - class DiffuserEntity(CoordinatorEntity): """Representation of a diffuser entity.""" @@ -35,8 +28,8 @@ class DiffuserEntity(CoordinatorEntity): super().__init__(coordinator) self._diffuser = diffuser - hublot = self._diffuser.hub_data[HUBLOT] - hubname = self._diffuser.hub_data[ATTRIBUTES][ROOMNAME] + hublot = self._diffuser.hublot + hubname = self._diffuser.name self._attr_name = f"{hubname}{entity_suffix}" self._attr_unique_id = f"{hublot}{entity_suffix}" @@ -45,10 +38,10 @@ class DiffuserEntity(CoordinatorEntity): "identifiers": {(DOMAIN, hublot)}, "manufacturer": MANUFACTURER, "model": MODEL if diffuser.has_battery else MODEL2, - "sw_version": diffuser.hub_data[SENSORS][VERSION], + "sw_version": diffuser.version, } @property def available(self) -> bool: """Return if the entity is available.""" - return super().available and self._diffuser.hub_data[STATUS] == AVAILABLE_STATE + return super().available and self._diffuser.is_online diff --git a/homeassistant/components/rituals_perfume_genie/manifest.json b/homeassistant/components/rituals_perfume_genie/manifest.json index 2736b960751..6c46649f688 100644 --- a/homeassistant/components/rituals_perfume_genie/manifest.json +++ b/homeassistant/components/rituals_perfume_genie/manifest.json @@ -3,7 +3,7 @@ "name": "Rituals Perfume Genie", "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/rituals_perfume_genie", - "requirements": ["pyrituals==0.0.4"], + "requirements": ["pyrituals==0.0.5"], "codeowners": ["@milanmeu"], "iot_class": "cloud_polling" } diff --git a/homeassistant/components/rituals_perfume_genie/sensor.py b/homeassistant/components/rituals_perfume_genie/sensor.py index 2965371733b..d4e10ba141b 100644 --- a/homeassistant/components/rituals_perfume_genie/sensor.py +++ b/homeassistant/components/rituals_perfume_genie/sensor.py @@ -13,16 +13,9 @@ from homeassistant.core import HomeAssistant from homeassistant.helpers.entity_platform import AddEntitiesCallback from . import RitualsDataUpdateCoordinator -from .const import COORDINATORS, DEVICES, DOMAIN, SENSORS +from .const import COORDINATORS, DEVICES, DOMAIN from .entity import DiffuserEntity -ID = "id" -PERFUME = "rfidc" -FILL = "fillc" - -PERFUME_NO_CARTRIDGE_ID = 19 -FILL_NO_CARTRIDGE_ID = 12 - BATTERY_SUFFIX = " Battery" PERFUME_SUFFIX = " Perfume" FILL_SUFFIX = " Fill" @@ -58,9 +51,9 @@ class DiffuserPerfumeSensor(DiffuserEntity): """Initialize the perfume sensor.""" super().__init__(diffuser, coordinator, PERFUME_SUFFIX) - self._attr_icon = "mdi:tag-text" - if diffuser.hub_data[SENSORS][PERFUME][ID] == PERFUME_NO_CARTRIDGE_ID: - self._attr_icon = "mdi:tag-remove" + self._attr_icon = "mdi:tag-remove" + if diffuser.has_cartridge: + self._attr_icon = "mdi:tag-text" @property def state(self) -> str: @@ -77,12 +70,9 @@ class DiffuserFillSensor(DiffuserEntity): """Initialize the fill sensor.""" super().__init__(diffuser, coordinator, FILL_SUFFIX) - @property - def icon(self) -> str: - """Return the fill sensor icon.""" - if self._diffuser.hub_data[SENSORS][FILL][ID] == FILL_NO_CARTRIDGE_ID: - return "mdi:beaker-question" - return "mdi:beaker" + self._attr_icon = "mdi:beaker-question" + if diffuser.has_cartridge: + self.attr_icon = "mdi:beaker" @property def state(self) -> str: diff --git a/requirements_all.txt b/requirements_all.txt index 08baeb59c3f..2149b72b22e 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -1706,7 +1706,7 @@ pyrepetier==3.0.5 pyrisco==0.3.1 # homeassistant.components.rituals_perfume_genie -pyrituals==0.0.4 +pyrituals==0.0.5 # homeassistant.components.ruckus_unleashed pyruckus==0.12 diff --git a/requirements_test_all.txt b/requirements_test_all.txt index e5aeac43f33..c5afe5edbcf 100644 --- a/requirements_test_all.txt +++ b/requirements_test_all.txt @@ -969,7 +969,7 @@ pyqwikswitch==0.93 pyrisco==0.3.1 # homeassistant.components.rituals_perfume_genie -pyrituals==0.0.4 +pyrituals==0.0.5 # homeassistant.components.ruckus_unleashed pyruckus==0.12 diff --git a/tests/components/rituals_perfume_genie/test_config_flow.py b/tests/components/rituals_perfume_genie/test_config_flow.py index e5c64dd54c9..df40405a56b 100644 --- a/tests/components/rituals_perfume_genie/test_config_flow.py +++ b/tests/components/rituals_perfume_genie/test_config_flow.py @@ -16,7 +16,8 @@ WRONG_PASSWORD = "wrong-passw0rd" def _mock_account(*_): account = MagicMock() account.authenticate = AsyncMock() - account.data = {CONF_EMAIL: TEST_EMAIL, ACCOUNT_HASH: "any"} + account.account_hash = "any" + account.email = TEST_EMAIL return account