Update demetriek to v1.0.0 (#132765)

This commit is contained in:
Franck Nijhof 2024-12-09 23:11:30 +01:00 committed by GitHub
parent 1929b368fe
commit 1256a7ea96
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
10 changed files with 33 additions and 16 deletions

View File

@ -26,5 +26,5 @@ async def async_get_config_entry_diagnostics(
"""Return diagnostics for a config entry.""" """Return diagnostics for a config entry."""
coordinator: LaMetricDataUpdateCoordinator = hass.data[DOMAIN][entry.entry_id] coordinator: LaMetricDataUpdateCoordinator = hass.data[DOMAIN][entry.entry_id]
# Round-trip via JSON to trigger serialization # Round-trip via JSON to trigger serialization
data = json.loads(coordinator.data.json()) data = json.loads(coordinator.data.to_json())
return async_redact_data(data, TO_REDACT) return async_redact_data(data, TO_REDACT)

View File

@ -13,7 +13,7 @@
"integration_type": "device", "integration_type": "device",
"iot_class": "local_polling", "iot_class": "local_polling",
"loggers": ["demetriek"], "loggers": ["demetriek"],
"requirements": ["demetriek==0.4.0"], "requirements": ["demetriek==1.0.0"],
"ssdp": [ "ssdp": [
{ {
"deviceType": "urn:schemas-upnp-org:device:LaMetric:1" "deviceType": "urn:schemas-upnp-org:device:LaMetric:1"

View File

@ -5,12 +5,14 @@ from __future__ import annotations
from typing import Any from typing import Any
from demetriek import ( from demetriek import (
AlarmSound,
LaMetricDevice, LaMetricDevice,
LaMetricError, LaMetricError,
Model, Model,
Notification, Notification,
NotificationIconType, NotificationIconType,
NotificationPriority, NotificationPriority,
NotificationSound,
Simple, Simple,
Sound, Sound,
) )
@ -18,8 +20,9 @@ from demetriek import (
from homeassistant.components.notify import ATTR_DATA, BaseNotificationService from homeassistant.components.notify import ATTR_DATA, BaseNotificationService
from homeassistant.const import CONF_ICON from homeassistant.const import CONF_ICON
from homeassistant.core import HomeAssistant from homeassistant.core import HomeAssistant
from homeassistant.exceptions import HomeAssistantError from homeassistant.exceptions import HomeAssistantError, ServiceValidationError
from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType
from homeassistant.util.enum import try_parse_enum
from .const import CONF_CYCLES, CONF_ICON_TYPE, CONF_PRIORITY, CONF_SOUND, DOMAIN from .const import CONF_CYCLES, CONF_ICON_TYPE, CONF_PRIORITY, CONF_SOUND, DOMAIN
from .coordinator import LaMetricDataUpdateCoordinator from .coordinator import LaMetricDataUpdateCoordinator
@ -53,7 +56,12 @@ class LaMetricNotificationService(BaseNotificationService):
sound = None sound = None
if CONF_SOUND in data: if CONF_SOUND in data:
sound = Sound(sound=data[CONF_SOUND], category=None) snd: AlarmSound | NotificationSound | None
if (snd := try_parse_enum(AlarmSound, data[CONF_SOUND])) is None and (
snd := try_parse_enum(NotificationSound, data[CONF_SOUND])
) is None:
raise ServiceValidationError("Unknown sound provided")
sound = Sound(sound=snd, category=None)
notification = Notification( notification = Notification(
icon_type=NotificationIconType(data.get(CONF_ICON_TYPE, "none")), icon_type=NotificationIconType(data.get(CONF_ICON_TYPE, "none")),

View File

@ -19,8 +19,9 @@ import voluptuous as vol
from homeassistant.const import CONF_DEVICE_ID, CONF_ICON from homeassistant.const import CONF_DEVICE_ID, CONF_ICON
from homeassistant.core import HomeAssistant, ServiceCall, callback from homeassistant.core import HomeAssistant, ServiceCall, callback
from homeassistant.exceptions import HomeAssistantError from homeassistant.exceptions import HomeAssistantError, ServiceValidationError
from homeassistant.helpers import config_validation as cv from homeassistant.helpers import config_validation as cv
from homeassistant.util.enum import try_parse_enum
from .const import ( from .const import (
CONF_CYCLES, CONF_CYCLES,
@ -118,7 +119,12 @@ async def async_send_notification(
"""Send a notification to an LaMetric device.""" """Send a notification to an LaMetric device."""
sound = None sound = None
if CONF_SOUND in call.data: if CONF_SOUND in call.data:
sound = Sound(sound=call.data[CONF_SOUND], category=None) snd: AlarmSound | NotificationSound | None
if (snd := try_parse_enum(AlarmSound, call.data[CONF_SOUND])) is None and (
snd := try_parse_enum(NotificationSound, call.data[CONF_SOUND])
) is None:
raise ServiceValidationError("Unknown sound provided")
sound = Sound(sound=snd, category=None)
notification = Notification( notification = Notification(
icon_type=NotificationIconType(call.data[CONF_ICON_TYPE]), icon_type=NotificationIconType(call.data[CONF_ICON_TYPE]),

View File

@ -746,7 +746,7 @@ defusedxml==0.7.1
deluge-client==1.10.2 deluge-client==1.10.2
# homeassistant.components.lametric # homeassistant.components.lametric
demetriek==0.4.0 demetriek==1.0.0
# homeassistant.components.denonavr # homeassistant.components.denonavr
denonavr==1.0.1 denonavr==1.0.1

View File

@ -636,7 +636,7 @@ defusedxml==0.7.1
deluge-client==1.10.2 deluge-client==1.10.2
# homeassistant.components.lametric # homeassistant.components.lametric
demetriek==0.4.0 demetriek==1.0.0
# homeassistant.components.denonavr # homeassistant.components.denonavr
denonavr==1.0.1 denonavr==1.0.1

View File

@ -6,7 +6,6 @@ from collections.abc import Generator
from unittest.mock import AsyncMock, MagicMock, patch from unittest.mock import AsyncMock, MagicMock, patch
from demetriek import CloudDevice, Device from demetriek import CloudDevice, Device
from pydantic import parse_raw_as # pylint: disable=no-name-in-module
import pytest import pytest
from homeassistant.components.application_credentials import ( from homeassistant.components.application_credentials import (
@ -18,7 +17,7 @@ from homeassistant.const import CONF_API_KEY, CONF_HOST, CONF_MAC
from homeassistant.core import HomeAssistant from homeassistant.core import HomeAssistant
from homeassistant.setup import async_setup_component from homeassistant.setup import async_setup_component
from tests.common import MockConfigEntry, load_fixture from tests.common import MockConfigEntry, load_fixture, load_json_array_fixture
@pytest.fixture(autouse=True) @pytest.fixture(autouse=True)
@ -61,9 +60,10 @@ def mock_lametric_cloud() -> Generator[MagicMock]:
"homeassistant.components.lametric.config_flow.LaMetricCloud", autospec=True "homeassistant.components.lametric.config_flow.LaMetricCloud", autospec=True
) as lametric_mock: ) as lametric_mock:
lametric = lametric_mock.return_value lametric = lametric_mock.return_value
lametric.devices.return_value = parse_raw_as( lametric.devices.return_value = [
list[CloudDevice], load_fixture("cloud_devices.json", DOMAIN) CloudDevice.from_dict(cloud_device)
) for cloud_device in load_json_array_fixture("cloud_devices.json", DOMAIN)
]
yield lametric yield lametric
@ -89,7 +89,7 @@ def mock_lametric(device_fixture: str) -> Generator[MagicMock]:
lametric = lametric_mock.return_value lametric = lametric_mock.return_value
lametric.api_key = "mock-api-key" lametric.api_key = "mock-api-key"
lametric.host = "127.0.0.1" lametric.host = "127.0.0.1"
lametric.device.return_value = Device.parse_raw( lametric.device.return_value = Device.from_json(
load_fixture(f"{device_fixture}.json", DOMAIN) load_fixture(f"{device_fixture}.json", DOMAIN)
) )
yield lametric yield lametric

View File

@ -26,6 +26,9 @@
'brightness_mode': 'auto', 'brightness_mode': 'auto',
'display_type': 'mixed', 'display_type': 'mixed',
'height': 8, 'height': 8,
'screensaver': dict({
'enabled': False,
}),
'width': 37, 'width': 37,
}), }),
'mode': 'auto', 'mode': 'auto',

View File

@ -100,7 +100,7 @@ async def test_notification_options(
assert len(notification.model.frames) == 1 assert len(notification.model.frames) == 1
frame = notification.model.frames[0] frame = notification.model.frames[0]
assert type(frame) is Simple assert type(frame) is Simple
assert frame.icon == 1234 assert frame.icon == "1234"
assert frame.text == "The secret of getting ahead is getting started" assert frame.text == "The secret of getting ahead is getting started"

View File

@ -190,7 +190,7 @@ async def test_service_message(
assert len(notification.model.frames) == 1 assert len(notification.model.frames) == 1
frame = notification.model.frames[0] frame = notification.model.frames[0]
assert type(frame) is Simple assert type(frame) is Simple
assert frame.icon == 6916 assert frame.icon == "6916"
assert frame.text == "Meow!" assert frame.text == "Meow!"
mock_lametric.notify.side_effect = LaMetricError mock_lametric.notify.side_effect = LaMetricError