mirror of
https://github.com/home-assistant/core.git
synced 2025-07-09 22:37:11 +00:00
Update demetriek to v1.0.0 (#132765)
This commit is contained in:
parent
1929b368fe
commit
1256a7ea96
@ -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)
|
||||||
|
@ -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"
|
||||||
|
@ -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")),
|
||||||
|
@ -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]),
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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',
|
||||||
|
@ -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"
|
||||||
|
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
Loading…
x
Reference in New Issue
Block a user