Index config entry discovery_keys by discovery domain (#126563)
* Index config entry discovery_keys by discovery domain * Add new signal * Update tests * Update homeassistant/config_entries.py Co-authored-by: J. Nick Koston <nick@koston.org> * Fix imports --------- Co-authored-by: J. Nick Koston <nick@koston.org>
This commit is contained in:
parent
9b96bc32eb
commit
d82bff1bc2
94 changed files with 378 additions and 325 deletions
|
@ -383,8 +383,8 @@ class ZeroconfDiscovery:
|
||||||
|
|
||||||
async_dispatcher_connect(
|
async_dispatcher_connect(
|
||||||
self.hass,
|
self.hass,
|
||||||
config_entries.SIGNAL_CONFIG_ENTRY_CHANGED,
|
config_entries.signal_discovered_config_entry_removed(DOMAIN),
|
||||||
self._handle_config_entry_changed,
|
self._handle_config_entry_removed,
|
||||||
)
|
)
|
||||||
|
|
||||||
async def async_stop(self) -> None:
|
async def async_stop(self) -> None:
|
||||||
|
@ -393,20 +393,16 @@ class ZeroconfDiscovery:
|
||||||
await self.async_service_browser.async_cancel()
|
await self.async_service_browser.async_cancel()
|
||||||
|
|
||||||
@callback
|
@callback
|
||||||
def _handle_config_entry_changed(
|
def _handle_config_entry_removed(
|
||||||
self,
|
self,
|
||||||
change: config_entries.ConfigEntryChange,
|
change: config_entries.ConfigEntryChange,
|
||||||
entry: config_entries.ConfigEntry,
|
entry: config_entries.ConfigEntry,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Handle config entry changes."""
|
"""Handle config entry changes."""
|
||||||
if (
|
if entry.source != config_entries.SOURCE_IGNORE:
|
||||||
change != config_entries.ConfigEntryChange.REMOVED
|
|
||||||
or entry.source != config_entries.SOURCE_IGNORE
|
|
||||||
or not (discovery_keys := entry.discovery_keys)
|
|
||||||
):
|
|
||||||
return
|
return
|
||||||
for discovery_key in discovery_keys:
|
for discovery_key in entry.discovery_keys[DOMAIN]:
|
||||||
if discovery_key.domain != DOMAIN or discovery_key.version != 1:
|
if discovery_key.version != 1:
|
||||||
continue
|
continue
|
||||||
_type = discovery_key.key[0]
|
_type = discovery_key.key[0]
|
||||||
name = discovery_key.key[1]
|
name = discovery_key.key[1]
|
||||||
|
|
|
@ -18,7 +18,7 @@ from copy import deepcopy
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from enum import Enum, StrEnum
|
from enum import Enum, StrEnum
|
||||||
import functools
|
import functools
|
||||||
from functools import cached_property
|
from functools import cache, cached_property
|
||||||
import logging
|
import logging
|
||||||
from random import randint
|
from random import randint
|
||||||
from types import MappingProxyType
|
from types import MappingProxyType
|
||||||
|
@ -192,6 +192,15 @@ SIGNAL_CONFIG_ENTRY_CHANGED = SignalType["ConfigEntryChange", "ConfigEntry"](
|
||||||
"config_entry_changed"
|
"config_entry_changed"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@cache
|
||||||
|
def signal_discovered_config_entry_removed(
|
||||||
|
discovery_domain: str,
|
||||||
|
) -> SignalType[ConfigEntryChange, ConfigEntry]:
|
||||||
|
"""Format signal."""
|
||||||
|
return SignalType(f"{discovery_domain}_discovered_config_entry_removed")
|
||||||
|
|
||||||
|
|
||||||
NO_RESET_TRIES_STATES = {
|
NO_RESET_TRIES_STATES = {
|
||||||
ConfigEntryState.SETUP_RETRY,
|
ConfigEntryState.SETUP_RETRY,
|
||||||
ConfigEntryState.SETUP_IN_PROGRESS,
|
ConfigEntryState.SETUP_IN_PROGRESS,
|
||||||
|
@ -318,7 +327,7 @@ class ConfigEntry(Generic[_DataT]):
|
||||||
_tries: int
|
_tries: int
|
||||||
created_at: datetime
|
created_at: datetime
|
||||||
modified_at: datetime
|
modified_at: datetime
|
||||||
discovery_keys: tuple[DiscoveryKey, ...]
|
discovery_keys: MappingProxyType[str, tuple[DiscoveryKey, ...]]
|
||||||
|
|
||||||
def __init__(
|
def __init__(
|
||||||
self,
|
self,
|
||||||
|
@ -326,7 +335,7 @@ class ConfigEntry(Generic[_DataT]):
|
||||||
created_at: datetime | None = None,
|
created_at: datetime | None = None,
|
||||||
data: Mapping[str, Any],
|
data: Mapping[str, Any],
|
||||||
disabled_by: ConfigEntryDisabler | None = None,
|
disabled_by: ConfigEntryDisabler | None = None,
|
||||||
discovery_keys: tuple[DiscoveryKey, ...],
|
discovery_keys: MappingProxyType[str, tuple[DiscoveryKey, ...]],
|
||||||
domain: str,
|
domain: str,
|
||||||
entry_id: str | None = None,
|
entry_id: str | None = None,
|
||||||
minor_version: int,
|
minor_version: int,
|
||||||
|
@ -955,7 +964,7 @@ class ConfigEntry(Generic[_DataT]):
|
||||||
return {
|
return {
|
||||||
"created_at": self.created_at.isoformat(),
|
"created_at": self.created_at.isoformat(),
|
||||||
"data": dict(self.data),
|
"data": dict(self.data),
|
||||||
"discovery_keys": self.discovery_keys,
|
"discovery_keys": dict(self.discovery_keys),
|
||||||
"disabled_by": self.disabled_by,
|
"disabled_by": self.disabled_by,
|
||||||
"domain": self.domain,
|
"domain": self.domain,
|
||||||
"entry_id": self.entry_id,
|
"entry_id": self.entry_id,
|
||||||
|
@ -1380,14 +1389,26 @@ class ConfigEntriesFlowManager(data_entry_flow.FlowManager[ConfigFlowResult]):
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
and entry.source == SOURCE_IGNORE
|
and entry.source == SOURCE_IGNORE
|
||||||
and discovery_key not in (known_discovery_keys := entry.discovery_keys)
|
and discovery_key
|
||||||
|
not in (
|
||||||
|
known_discovery_keys := entry.discovery_keys.get(
|
||||||
|
discovery_key.domain, ()
|
||||||
|
)
|
||||||
|
)
|
||||||
):
|
):
|
||||||
new_discovery_keys = tuple([*known_discovery_keys, discovery_key][-10:])
|
new_discovery_keys = MappingProxyType(
|
||||||
|
entry.discovery_keys
|
||||||
|
| {
|
||||||
|
discovery_key.domain: tuple(
|
||||||
|
[*known_discovery_keys, discovery_key][-10:]
|
||||||
|
)
|
||||||
|
}
|
||||||
|
)
|
||||||
_LOGGER.debug(
|
_LOGGER.debug(
|
||||||
"Updating discovery keys for %s entry %s %s -> %s",
|
"Updating discovery keys for %s entry %s %s -> %s",
|
||||||
entry.domain,
|
entry.domain,
|
||||||
unique_id,
|
unique_id,
|
||||||
known_discovery_keys,
|
entry.discovery_keys,
|
||||||
new_discovery_keys,
|
new_discovery_keys,
|
||||||
)
|
)
|
||||||
self.config_entries.async_update_entry(
|
self.config_entries.async_update_entry(
|
||||||
|
@ -1450,7 +1471,11 @@ class ConfigEntriesFlowManager(data_entry_flow.FlowManager[ConfigFlowResult]):
|
||||||
await self.config_entries.async_unload(existing_entry.entry_id)
|
await self.config_entries.async_unload(existing_entry.entry_id)
|
||||||
|
|
||||||
discovery_key = flow.context.get("discovery_key")
|
discovery_key = flow.context.get("discovery_key")
|
||||||
discovery_keys = (discovery_key,) if discovery_key else ()
|
discovery_keys = (
|
||||||
|
MappingProxyType({discovery_key.domain: (discovery_key,)})
|
||||||
|
if discovery_key
|
||||||
|
else MappingProxyType({})
|
||||||
|
)
|
||||||
entry = ConfigEntry(
|
entry = ConfigEntry(
|
||||||
data=result["data"],
|
data=result["data"],
|
||||||
discovery_keys=discovery_keys,
|
discovery_keys=discovery_keys,
|
||||||
|
@ -1684,7 +1709,7 @@ class ConfigEntryStore(storage.Store[dict[str, list[dict[str, Any]]]]):
|
||||||
if old_minor_version < 4:
|
if old_minor_version < 4:
|
||||||
# Version 1.4 adds discovery_keys
|
# Version 1.4 adds discovery_keys
|
||||||
for entry in data["entries"]:
|
for entry in data["entries"]:
|
||||||
entry["discovery_keys"] = []
|
entry["discovery_keys"] = {}
|
||||||
|
|
||||||
if old_major_version > 1:
|
if old_major_version > 1:
|
||||||
raise NotImplementedError
|
raise NotImplementedError
|
||||||
|
@ -1846,6 +1871,13 @@ class ConfigEntries:
|
||||||
)
|
)
|
||||||
|
|
||||||
self._async_dispatch(ConfigEntryChange.REMOVED, entry)
|
self._async_dispatch(ConfigEntryChange.REMOVED, entry)
|
||||||
|
for discovery_domain in entry.discovery_keys:
|
||||||
|
async_dispatcher_send_internal(
|
||||||
|
self.hass,
|
||||||
|
signal_discovered_config_entry_removed(discovery_domain),
|
||||||
|
ConfigEntryChange.REMOVED,
|
||||||
|
entry,
|
||||||
|
)
|
||||||
return {"require_restart": not unload_success}
|
return {"require_restart": not unload_success}
|
||||||
|
|
||||||
@callback
|
@callback
|
||||||
|
@ -1873,8 +1905,11 @@ class ConfigEntries:
|
||||||
created_at=datetime.fromisoformat(entry["created_at"]),
|
created_at=datetime.fromisoformat(entry["created_at"]),
|
||||||
data=entry["data"],
|
data=entry["data"],
|
||||||
disabled_by=try_parse_enum(ConfigEntryDisabler, entry["disabled_by"]),
|
disabled_by=try_parse_enum(ConfigEntryDisabler, entry["disabled_by"]),
|
||||||
discovery_keys=tuple(
|
discovery_keys=MappingProxyType(
|
||||||
DiscoveryKey.from_json_dict(key) for key in entry["discovery_keys"]
|
{
|
||||||
|
domain: tuple(DiscoveryKey.from_json_dict(key) for key in keys)
|
||||||
|
for domain, keys in entry["discovery_keys"].items()
|
||||||
|
}
|
||||||
),
|
),
|
||||||
domain=entry["domain"],
|
domain=entry["domain"],
|
||||||
entry_id=entry_id,
|
entry_id=entry_id,
|
||||||
|
@ -2032,7 +2067,8 @@ class ConfigEntries:
|
||||||
entry: ConfigEntry,
|
entry: ConfigEntry,
|
||||||
*,
|
*,
|
||||||
data: Mapping[str, Any] | UndefinedType = UNDEFINED,
|
data: Mapping[str, Any] | UndefinedType = UNDEFINED,
|
||||||
discovery_keys: tuple[DiscoveryKey, ...] | UndefinedType = UNDEFINED,
|
discovery_keys: MappingProxyType[str, tuple[DiscoveryKey, ...]]
|
||||||
|
| UndefinedType = UNDEFINED,
|
||||||
minor_version: int | UndefinedType = UNDEFINED,
|
minor_version: int | UndefinedType = UNDEFINED,
|
||||||
options: Mapping[str, Any] | UndefinedType = UNDEFINED,
|
options: Mapping[str, Any] | UndefinedType = UNDEFINED,
|
||||||
pref_disable_new_entities: bool | UndefinedType = UNDEFINED,
|
pref_disable_new_entities: bool | UndefinedType = UNDEFINED,
|
||||||
|
|
|
@ -990,7 +990,7 @@ class MockConfigEntry(config_entries.ConfigEntry):
|
||||||
*,
|
*,
|
||||||
data=None,
|
data=None,
|
||||||
disabled_by=None,
|
disabled_by=None,
|
||||||
discovery_keys=(),
|
discovery_keys=None,
|
||||||
domain="test",
|
domain="test",
|
||||||
entry_id=None,
|
entry_id=None,
|
||||||
minor_version=1,
|
minor_version=1,
|
||||||
|
@ -1005,6 +1005,7 @@ class MockConfigEntry(config_entries.ConfigEntry):
|
||||||
version=1,
|
version=1,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Initialize a mock config entry."""
|
"""Initialize a mock config entry."""
|
||||||
|
discovery_keys = discovery_keys or {}
|
||||||
kwargs = {
|
kwargs = {
|
||||||
"data": data or {},
|
"data": data or {},
|
||||||
"disabled_by": disabled_by,
|
"disabled_by": disabled_by,
|
||||||
|
|
|
@ -11,8 +11,8 @@
|
||||||
'name': 'AEMET',
|
'name': 'AEMET',
|
||||||
}),
|
}),
|
||||||
'disabled_by': None,
|
'disabled_by': None,
|
||||||
'discovery_keys': list([
|
'discovery_keys': dict({
|
||||||
]),
|
}),
|
||||||
'domain': 'aemet',
|
'domain': 'aemet',
|
||||||
'entry_id': '7442b231f139e813fc1939281123f220',
|
'entry_id': '7442b231f139e813fc1939281123f220',
|
||||||
'minor_version': 1,
|
'minor_version': 1,
|
||||||
|
|
|
@ -9,8 +9,8 @@
|
||||||
'name': 'Home',
|
'name': 'Home',
|
||||||
}),
|
}),
|
||||||
'disabled_by': None,
|
'disabled_by': None,
|
||||||
'discovery_keys': list([
|
'discovery_keys': dict({
|
||||||
]),
|
}),
|
||||||
'domain': 'airly',
|
'domain': 'airly',
|
||||||
'entry_id': '3bd2acb0e4f0476d40865546d0d91921',
|
'entry_id': '3bd2acb0e4f0476d40865546d0d91921',
|
||||||
'minor_version': 1,
|
'minor_version': 1,
|
||||||
|
|
|
@ -24,8 +24,8 @@
|
||||||
'longitude': '**REDACTED**',
|
'longitude': '**REDACTED**',
|
||||||
}),
|
}),
|
||||||
'disabled_by': None,
|
'disabled_by': None,
|
||||||
'discovery_keys': list([
|
'discovery_keys': dict({
|
||||||
]),
|
}),
|
||||||
'domain': 'airnow',
|
'domain': 'airnow',
|
||||||
'entry_id': '3bd2acb0e4f0476d40865546d0d91921',
|
'entry_id': '3bd2acb0e4f0476d40865546d0d91921',
|
||||||
'minor_version': 1,
|
'minor_version': 1,
|
||||||
|
|
|
@ -36,8 +36,8 @@
|
||||||
'longitude': '**REDACTED**',
|
'longitude': '**REDACTED**',
|
||||||
}),
|
}),
|
||||||
'disabled_by': None,
|
'disabled_by': None,
|
||||||
'discovery_keys': list([
|
'discovery_keys': dict({
|
||||||
]),
|
}),
|
||||||
'domain': 'airvisual',
|
'domain': 'airvisual',
|
||||||
'entry_id': '3bd2acb0e4f0476d40865546d0d91921',
|
'entry_id': '3bd2acb0e4f0476d40865546d0d91921',
|
||||||
'minor_version': 1,
|
'minor_version': 1,
|
||||||
|
|
|
@ -91,8 +91,8 @@
|
||||||
'password': '**REDACTED**',
|
'password': '**REDACTED**',
|
||||||
}),
|
}),
|
||||||
'disabled_by': None,
|
'disabled_by': None,
|
||||||
'discovery_keys': list([
|
'discovery_keys': dict({
|
||||||
]),
|
}),
|
||||||
'domain': 'airvisual_pro',
|
'domain': 'airvisual_pro',
|
||||||
'entry_id': '6a2b3770e53c28dc1eeb2515e906b0ce',
|
'entry_id': '6a2b3770e53c28dc1eeb2515e906b0ce',
|
||||||
'minor_version': 1,
|
'minor_version': 1,
|
||||||
|
|
|
@ -238,8 +238,8 @@
|
||||||
'port': 3000,
|
'port': 3000,
|
||||||
}),
|
}),
|
||||||
'disabled_by': None,
|
'disabled_by': None,
|
||||||
'discovery_keys': list([
|
'discovery_keys': dict({
|
||||||
]),
|
}),
|
||||||
'domain': 'airzone',
|
'domain': 'airzone',
|
||||||
'entry_id': '6e7a0798c1734ba81d26ced0e690eaec',
|
'entry_id': '6e7a0798c1734ba81d26ced0e690eaec',
|
||||||
'minor_version': 1,
|
'minor_version': 1,
|
||||||
|
|
|
@ -91,8 +91,8 @@
|
||||||
'username': '**REDACTED**',
|
'username': '**REDACTED**',
|
||||||
}),
|
}),
|
||||||
'disabled_by': None,
|
'disabled_by': None,
|
||||||
'discovery_keys': list([
|
'discovery_keys': dict({
|
||||||
]),
|
}),
|
||||||
'domain': 'airzone_cloud',
|
'domain': 'airzone_cloud',
|
||||||
'entry_id': 'd186e31edb46d64d14b9b2f11f1ebd9f',
|
'entry_id': 'd186e31edb46d64d14b9b2f11f1ebd9f',
|
||||||
'minor_version': 1,
|
'minor_version': 1,
|
||||||
|
|
|
@ -7,8 +7,8 @@
|
||||||
'app_key': '**REDACTED**',
|
'app_key': '**REDACTED**',
|
||||||
}),
|
}),
|
||||||
'disabled_by': None,
|
'disabled_by': None,
|
||||||
'discovery_keys': list([
|
'discovery_keys': dict({
|
||||||
]),
|
}),
|
||||||
'domain': 'ambient_station',
|
'domain': 'ambient_station',
|
||||||
'entry_id': '382cf7643f016fd48b3fe52163fe8877',
|
'entry_id': '382cf7643f016fd48b3fe52163fe8877',
|
||||||
'minor_version': 1,
|
'minor_version': 1,
|
||||||
|
|
|
@ -36,4 +36,4 @@ async def test_diagnostics(
|
||||||
hass, hass_client, mock_config_entry
|
hass, hass_client, mock_config_entry
|
||||||
)
|
)
|
||||||
|
|
||||||
assert result["entry"] == entry_dict | {"discovery_keys": []}
|
assert result["entry"] == entry_dict | {"discovery_keys": {}}
|
||||||
|
|
|
@ -38,4 +38,4 @@ async def test_diagnostics(
|
||||||
hass, hass_client, mock_config_entry
|
hass, hass_client, mock_config_entry
|
||||||
)
|
)
|
||||||
|
|
||||||
assert result["entry"] == entry_dict | {"discovery_keys": []}
|
assert result["entry"] == entry_dict | {"discovery_keys": {}}
|
||||||
|
|
|
@ -37,8 +37,8 @@
|
||||||
'username': '**REDACTED**',
|
'username': '**REDACTED**',
|
||||||
}),
|
}),
|
||||||
'disabled_by': None,
|
'disabled_by': None,
|
||||||
'discovery_keys': list([
|
'discovery_keys': dict({
|
||||||
]),
|
}),
|
||||||
'domain': 'axis',
|
'domain': 'axis',
|
||||||
'entry_id': '676abe5b73621446e6550a2e86ffe3dd',
|
'entry_id': '676abe5b73621446e6550a2e86ffe3dd',
|
||||||
'minor_version': 1,
|
'minor_version': 1,
|
||||||
|
|
|
@ -38,8 +38,8 @@
|
||||||
'username': '**REDACTED**',
|
'username': '**REDACTED**',
|
||||||
}),
|
}),
|
||||||
'disabled_by': None,
|
'disabled_by': None,
|
||||||
'discovery_keys': list([
|
'discovery_keys': dict({
|
||||||
]),
|
}),
|
||||||
'domain': 'blink',
|
'domain': 'blink',
|
||||||
'minor_version': 1,
|
'minor_version': 1,
|
||||||
'options': dict({
|
'options': dict({
|
||||||
|
|
|
@ -9,8 +9,8 @@
|
||||||
'use_psk': True,
|
'use_psk': True,
|
||||||
}),
|
}),
|
||||||
'disabled_by': None,
|
'disabled_by': None,
|
||||||
'discovery_keys': list([
|
'discovery_keys': dict({
|
||||||
]),
|
}),
|
||||||
'domain': 'braviatv',
|
'domain': 'braviatv',
|
||||||
'entry_id': '3bd2acb0e4f0476d40865546d0d91921',
|
'entry_id': '3bd2acb0e4f0476d40865546d0d91921',
|
||||||
'minor_version': 1,
|
'minor_version': 1,
|
||||||
|
|
|
@ -7,8 +7,8 @@
|
||||||
'location': '',
|
'location': '',
|
||||||
}),
|
}),
|
||||||
'disabled_by': None,
|
'disabled_by': None,
|
||||||
'discovery_keys': list([
|
'discovery_keys': dict({
|
||||||
]),
|
}),
|
||||||
'domain': 'co2signal',
|
'domain': 'co2signal',
|
||||||
'entry_id': '904a74160aa6f335526706bee85dfb83',
|
'entry_id': '904a74160aa6f335526706bee85dfb83',
|
||||||
'minor_version': 1,
|
'minor_version': 1,
|
||||||
|
|
|
@ -30,8 +30,8 @@
|
||||||
'api_token': '**REDACTED**',
|
'api_token': '**REDACTED**',
|
||||||
}),
|
}),
|
||||||
'disabled_by': None,
|
'disabled_by': None,
|
||||||
'discovery_keys': list([
|
'discovery_keys': dict({
|
||||||
]),
|
}),
|
||||||
'domain': 'coinbase',
|
'domain': 'coinbase',
|
||||||
'entry_id': '080272b77a4f80c41b94d7cdc86fd826',
|
'entry_id': '080272b77a4f80c41b94d7cdc86fd826',
|
||||||
'minor_version': 1,
|
'minor_version': 1,
|
||||||
|
|
|
@ -1326,11 +1326,11 @@ async def test_disable_entry_nonexisting(
|
||||||
[
|
[
|
||||||
(
|
(
|
||||||
{},
|
{},
|
||||||
(),
|
{},
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
{"discovery_key": DiscoveryKey(domain="test", key="blah", version=1)},
|
{"discovery_key": DiscoveryKey(domain="test", key="blah", version=1)},
|
||||||
(DiscoveryKey(domain="test", key="blah", version=1),),
|
{"test": (DiscoveryKey(domain="test", key="blah", version=1),)},
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
|
|
@ -10,8 +10,8 @@
|
||||||
'port': 80,
|
'port': 80,
|
||||||
}),
|
}),
|
||||||
'disabled_by': None,
|
'disabled_by': None,
|
||||||
'discovery_keys': list([
|
'discovery_keys': dict({
|
||||||
]),
|
}),
|
||||||
'domain': 'deconz',
|
'domain': 'deconz',
|
||||||
'entry_id': '1',
|
'entry_id': '1',
|
||||||
'minor_version': 1,
|
'minor_version': 1,
|
||||||
|
|
|
@ -38,8 +38,8 @@
|
||||||
'username': '**REDACTED**',
|
'username': '**REDACTED**',
|
||||||
}),
|
}),
|
||||||
'disabled_by': None,
|
'disabled_by': None,
|
||||||
'discovery_keys': list([
|
'discovery_keys': dict({
|
||||||
]),
|
}),
|
||||||
'domain': 'devolo_home_control',
|
'domain': 'devolo_home_control',
|
||||||
'entry_id': '123456',
|
'entry_id': '123456',
|
||||||
'minor_version': 1,
|
'minor_version': 1,
|
||||||
|
|
|
@ -22,8 +22,8 @@
|
||||||
'password': '**REDACTED**',
|
'password': '**REDACTED**',
|
||||||
}),
|
}),
|
||||||
'disabled_by': None,
|
'disabled_by': None,
|
||||||
'discovery_keys': list([
|
'discovery_keys': dict({
|
||||||
]),
|
}),
|
||||||
'domain': 'devolo_home_network',
|
'domain': 'devolo_home_network',
|
||||||
'entry_id': '123456',
|
'entry_id': '123456',
|
||||||
'minor_version': 1,
|
'minor_version': 1,
|
||||||
|
|
|
@ -7,8 +7,8 @@
|
||||||
'data': dict({
|
'data': dict({
|
||||||
}),
|
}),
|
||||||
'disabled_by': None,
|
'disabled_by': None,
|
||||||
'discovery_keys': list([
|
'discovery_keys': dict({
|
||||||
]),
|
}),
|
||||||
'domain': 'dsmr_reader',
|
'domain': 'dsmr_reader',
|
||||||
'entry_id': 'TEST_ENTRY_ID',
|
'entry_id': 'TEST_ENTRY_ID',
|
||||||
'minor_version': 1,
|
'minor_version': 1,
|
||||||
|
|
|
@ -8,8 +8,8 @@
|
||||||
'username': '**REDACTED**',
|
'username': '**REDACTED**',
|
||||||
}),
|
}),
|
||||||
'disabled_by': None,
|
'disabled_by': None,
|
||||||
'discovery_keys': list([
|
'discovery_keys': dict({
|
||||||
]),
|
}),
|
||||||
'domain': 'ecovacs',
|
'domain': 'ecovacs',
|
||||||
'minor_version': 1,
|
'minor_version': 1,
|
||||||
'options': dict({
|
'options': dict({
|
||||||
|
@ -61,8 +61,8 @@
|
||||||
'username': '**REDACTED**',
|
'username': '**REDACTED**',
|
||||||
}),
|
}),
|
||||||
'disabled_by': None,
|
'disabled_by': None,
|
||||||
'discovery_keys': list([
|
'discovery_keys': dict({
|
||||||
]),
|
}),
|
||||||
'domain': 'ecovacs',
|
'domain': 'ecovacs',
|
||||||
'minor_version': 1,
|
'minor_version': 1,
|
||||||
'options': dict({
|
'options': dict({
|
||||||
|
|
|
@ -24,8 +24,8 @@
|
||||||
'port': 9123,
|
'port': 9123,
|
||||||
}),
|
}),
|
||||||
'disabled_by': None,
|
'disabled_by': None,
|
||||||
'discovery_keys': tuple(
|
'discovery_keys': dict({
|
||||||
),
|
}),
|
||||||
'domain': 'elgato',
|
'domain': 'elgato',
|
||||||
'entry_id': <ANY>,
|
'entry_id': <ANY>,
|
||||||
'minor_version': 1,
|
'minor_version': 1,
|
||||||
|
@ -69,8 +69,8 @@
|
||||||
'port': 9123,
|
'port': 9123,
|
||||||
}),
|
}),
|
||||||
'disabled_by': None,
|
'disabled_by': None,
|
||||||
'discovery_keys': tuple(
|
'discovery_keys': dict({
|
||||||
),
|
}),
|
||||||
'domain': 'elgato',
|
'domain': 'elgato',
|
||||||
'entry_id': <ANY>,
|
'entry_id': <ANY>,
|
||||||
'minor_version': 1,
|
'minor_version': 1,
|
||||||
|
@ -113,8 +113,8 @@
|
||||||
'port': 9123,
|
'port': 9123,
|
||||||
}),
|
}),
|
||||||
'disabled_by': None,
|
'disabled_by': None,
|
||||||
'discovery_keys': tuple(
|
'discovery_keys': dict({
|
||||||
),
|
}),
|
||||||
'domain': 'elgato',
|
'domain': 'elgato',
|
||||||
'entry_id': <ANY>,
|
'entry_id': <ANY>,
|
||||||
'minor_version': 1,
|
'minor_version': 1,
|
||||||
|
|
|
@ -18,8 +18,8 @@
|
||||||
'data': dict({
|
'data': dict({
|
||||||
}),
|
}),
|
||||||
'disabled_by': None,
|
'disabled_by': None,
|
||||||
'discovery_keys': tuple(
|
'discovery_keys': dict({
|
||||||
),
|
}),
|
||||||
'domain': 'energyzero',
|
'domain': 'energyzero',
|
||||||
'entry_id': <ANY>,
|
'entry_id': <ANY>,
|
||||||
'minor_version': 1,
|
'minor_version': 1,
|
||||||
|
|
|
@ -10,8 +10,8 @@
|
||||||
'username': '**REDACTED**',
|
'username': '**REDACTED**',
|
||||||
}),
|
}),
|
||||||
'disabled_by': None,
|
'disabled_by': None,
|
||||||
'discovery_keys': list([
|
'discovery_keys': dict({
|
||||||
]),
|
}),
|
||||||
'domain': 'enphase_envoy',
|
'domain': 'enphase_envoy',
|
||||||
'entry_id': '45a36e55aaddb2007c5f6602e0c38e72',
|
'entry_id': '45a36e55aaddb2007c5f6602e0c38e72',
|
||||||
'minor_version': 1,
|
'minor_version': 1,
|
||||||
|
@ -443,8 +443,8 @@
|
||||||
'username': '**REDACTED**',
|
'username': '**REDACTED**',
|
||||||
}),
|
}),
|
||||||
'disabled_by': None,
|
'disabled_by': None,
|
||||||
'discovery_keys': list([
|
'discovery_keys': dict({
|
||||||
]),
|
}),
|
||||||
'domain': 'enphase_envoy',
|
'domain': 'enphase_envoy',
|
||||||
'entry_id': '45a36e55aaddb2007c5f6602e0c38e72',
|
'entry_id': '45a36e55aaddb2007c5f6602e0c38e72',
|
||||||
'minor_version': 1,
|
'minor_version': 1,
|
||||||
|
@ -917,8 +917,8 @@
|
||||||
'username': '**REDACTED**',
|
'username': '**REDACTED**',
|
||||||
}),
|
}),
|
||||||
'disabled_by': None,
|
'disabled_by': None,
|
||||||
'discovery_keys': list([
|
'discovery_keys': dict({
|
||||||
]),
|
}),
|
||||||
'domain': 'enphase_envoy',
|
'domain': 'enphase_envoy',
|
||||||
'entry_id': '45a36e55aaddb2007c5f6602e0c38e72',
|
'entry_id': '45a36e55aaddb2007c5f6602e0c38e72',
|
||||||
'minor_version': 1,
|
'minor_version': 1,
|
||||||
|
|
|
@ -10,8 +10,8 @@
|
||||||
'port': 6053,
|
'port': 6053,
|
||||||
}),
|
}),
|
||||||
'disabled_by': None,
|
'disabled_by': None,
|
||||||
'discovery_keys': list([
|
'discovery_keys': dict({
|
||||||
]),
|
}),
|
||||||
'domain': 'esphome',
|
'domain': 'esphome',
|
||||||
'entry_id': '08d821dc059cf4f645cb024d32c8e708',
|
'entry_id': '08d821dc059cf4f645cb024d32c8e708',
|
||||||
'minor_version': 1,
|
'minor_version': 1,
|
||||||
|
|
|
@ -70,7 +70,7 @@ async def test_diagnostics_with_bluetooth(
|
||||||
"port": 6053,
|
"port": 6053,
|
||||||
},
|
},
|
||||||
"disabled_by": None,
|
"disabled_by": None,
|
||||||
"discovery_keys": [],
|
"discovery_keys": {},
|
||||||
"domain": "esphome",
|
"domain": "esphome",
|
||||||
"entry_id": ANY,
|
"entry_id": ANY,
|
||||||
"minor_version": 1,
|
"minor_version": 1,
|
||||||
|
|
|
@ -6,8 +6,8 @@
|
||||||
'longitude': 4.42,
|
'longitude': 4.42,
|
||||||
}),
|
}),
|
||||||
'disabled_by': None,
|
'disabled_by': None,
|
||||||
'discovery_keys': tuple(
|
'discovery_keys': dict({
|
||||||
),
|
}),
|
||||||
'domain': 'forecast_solar',
|
'domain': 'forecast_solar',
|
||||||
'entry_id': <ANY>,
|
'entry_id': <ANY>,
|
||||||
'minor_version': 1,
|
'minor_version': 1,
|
||||||
|
|
|
@ -52,8 +52,8 @@
|
||||||
'username': '**REDACTED**',
|
'username': '**REDACTED**',
|
||||||
}),
|
}),
|
||||||
'disabled_by': None,
|
'disabled_by': None,
|
||||||
'discovery_keys': list([
|
'discovery_keys': dict({
|
||||||
]),
|
}),
|
||||||
'domain': 'fritz',
|
'domain': 'fritz',
|
||||||
'minor_version': 1,
|
'minor_version': 1,
|
||||||
'options': dict({
|
'options': dict({
|
||||||
|
|
|
@ -30,4 +30,4 @@ async def test_entry_diagnostics(
|
||||||
|
|
||||||
result = await get_diagnostics_for_config_entry(hass, hass_client, entries[0])
|
result = await get_diagnostics_for_config_entry(hass, hass_client, entries[0])
|
||||||
|
|
||||||
assert result == {"entry": entry_dict | {"discovery_keys": []}, "data": {}}
|
assert result == {"entry": entry_dict | {"discovery_keys": {}}, "data": {}}
|
||||||
|
|
|
@ -7,8 +7,8 @@
|
||||||
'is_logger': True,
|
'is_logger': True,
|
||||||
}),
|
}),
|
||||||
'disabled_by': None,
|
'disabled_by': None,
|
||||||
'discovery_keys': list([
|
'discovery_keys': dict({
|
||||||
]),
|
}),
|
||||||
'domain': 'fronius',
|
'domain': 'fronius',
|
||||||
'entry_id': 'f1e2b9837e8adaed6fa682acaa216fd8',
|
'entry_id': 'f1e2b9837e8adaed6fa682acaa216fd8',
|
||||||
'minor_version': 1,
|
'minor_version': 1,
|
||||||
|
|
|
@ -9,8 +9,8 @@
|
||||||
'username': '**REDACTED**',
|
'username': '**REDACTED**',
|
||||||
}),
|
}),
|
||||||
'disabled_by': None,
|
'disabled_by': None,
|
||||||
'discovery_keys': list([
|
'discovery_keys': dict({
|
||||||
]),
|
}),
|
||||||
'domain': 'fyta',
|
'domain': 'fyta',
|
||||||
'entry_id': 'ce5f5431554d101905d31797e1232da8',
|
'entry_id': 'ce5f5431554d101905d31797e1232da8',
|
||||||
'minor_version': 2,
|
'minor_version': 2,
|
||||||
|
|
|
@ -39,8 +39,8 @@
|
||||||
'address': '00000000-0000-0000-0000-000000000001',
|
'address': '00000000-0000-0000-0000-000000000001',
|
||||||
}),
|
}),
|
||||||
'disabled_by': None,
|
'disabled_by': None,
|
||||||
'discovery_keys': tuple(
|
'discovery_keys': dict({
|
||||||
),
|
}),
|
||||||
'domain': 'gardena_bluetooth',
|
'domain': 'gardena_bluetooth',
|
||||||
'entry_id': <ANY>,
|
'entry_id': <ANY>,
|
||||||
'minor_version': 1,
|
'minor_version': 1,
|
||||||
|
@ -250,8 +250,8 @@
|
||||||
'address': '00000000-0000-0000-0000-000000000001',
|
'address': '00000000-0000-0000-0000-000000000001',
|
||||||
}),
|
}),
|
||||||
'disabled_by': None,
|
'disabled_by': None,
|
||||||
'discovery_keys': tuple(
|
'discovery_keys': dict({
|
||||||
),
|
}),
|
||||||
'domain': 'gardena_bluetooth',
|
'domain': 'gardena_bluetooth',
|
||||||
'entry_id': <ANY>,
|
'entry_id': <ANY>,
|
||||||
'minor_version': 1,
|
'minor_version': 1,
|
||||||
|
|
|
@ -7,8 +7,8 @@
|
||||||
'station_id': 123,
|
'station_id': 123,
|
||||||
}),
|
}),
|
||||||
'disabled_by': None,
|
'disabled_by': None,
|
||||||
'discovery_keys': list([
|
'discovery_keys': dict({
|
||||||
]),
|
}),
|
||||||
'domain': 'gios',
|
'domain': 'gios',
|
||||||
'entry_id': '86129426118ae32020417a53712d6eef',
|
'entry_id': '86129426118ae32020417a53712d6eef',
|
||||||
'minor_version': 1,
|
'minor_version': 1,
|
||||||
|
|
|
@ -7,8 +7,8 @@
|
||||||
'model_family': 'ET',
|
'model_family': 'ET',
|
||||||
}),
|
}),
|
||||||
'disabled_by': None,
|
'disabled_by': None,
|
||||||
'discovery_keys': list([
|
'discovery_keys': dict({
|
||||||
]),
|
}),
|
||||||
'domain': 'goodwe',
|
'domain': 'goodwe',
|
||||||
'entry_id': '3bd2acb0e4f0476d40865546d0d91921',
|
'entry_id': '3bd2acb0e4f0476d40865546d0d91921',
|
||||||
'minor_version': 1,
|
'minor_version': 1,
|
||||||
|
|
|
@ -6,8 +6,8 @@
|
||||||
'project_id': '1234',
|
'project_id': '1234',
|
||||||
}),
|
}),
|
||||||
'disabled_by': None,
|
'disabled_by': None,
|
||||||
'discovery_keys': list([
|
'discovery_keys': dict({
|
||||||
]),
|
}),
|
||||||
'domain': 'google_assistant',
|
'domain': 'google_assistant',
|
||||||
'minor_version': 1,
|
'minor_version': 1,
|
||||||
'options': dict({
|
'options': dict({
|
||||||
|
|
|
@ -41,7 +41,7 @@ async def test_entry_diagnostics(
|
||||||
"disabled_by": None,
|
"disabled_by": None,
|
||||||
"created_at": ANY,
|
"created_at": ANY,
|
||||||
"modified_at": ANY,
|
"modified_at": ANY,
|
||||||
"discovery_keys": [],
|
"discovery_keys": {},
|
||||||
},
|
},
|
||||||
"data": {
|
"data": {
|
||||||
"valve_controller": {
|
"valve_controller": {
|
||||||
|
|
|
@ -20,8 +20,8 @@
|
||||||
'ip_address': '127.0.0.1',
|
'ip_address': '127.0.0.1',
|
||||||
}),
|
}),
|
||||||
'disabled_by': None,
|
'disabled_by': None,
|
||||||
'discovery_keys': tuple(
|
'discovery_keys': dict({
|
||||||
),
|
}),
|
||||||
'domain': 'homewizard',
|
'domain': 'homewizard',
|
||||||
'entry_id': <ANY>,
|
'entry_id': <ANY>,
|
||||||
'minor_version': 1,
|
'minor_version': 1,
|
||||||
|
@ -64,8 +64,8 @@
|
||||||
'ip_address': '127.0.0.1',
|
'ip_address': '127.0.0.1',
|
||||||
}),
|
}),
|
||||||
'disabled_by': None,
|
'disabled_by': None,
|
||||||
'discovery_keys': tuple(
|
'discovery_keys': dict({
|
||||||
),
|
}),
|
||||||
'domain': 'homewizard',
|
'domain': 'homewizard',
|
||||||
'entry_id': <ANY>,
|
'entry_id': <ANY>,
|
||||||
'minor_version': 1,
|
'minor_version': 1,
|
||||||
|
@ -108,8 +108,8 @@
|
||||||
'ip_address': '127.0.0.1',
|
'ip_address': '127.0.0.1',
|
||||||
}),
|
}),
|
||||||
'disabled_by': None,
|
'disabled_by': None,
|
||||||
'discovery_keys': tuple(
|
'discovery_keys': dict({
|
||||||
),
|
}),
|
||||||
'domain': 'homewizard',
|
'domain': 'homewizard',
|
||||||
'entry_id': <ANY>,
|
'entry_id': <ANY>,
|
||||||
'minor_version': 1,
|
'minor_version': 1,
|
||||||
|
@ -148,8 +148,8 @@
|
||||||
'ip_address': '2.2.2.2',
|
'ip_address': '2.2.2.2',
|
||||||
}),
|
}),
|
||||||
'disabled_by': None,
|
'disabled_by': None,
|
||||||
'discovery_keys': tuple(
|
'discovery_keys': dict({
|
||||||
),
|
}),
|
||||||
'domain': 'homewizard',
|
'domain': 'homewizard',
|
||||||
'entry_id': <ANY>,
|
'entry_id': <ANY>,
|
||||||
'minor_version': 1,
|
'minor_version': 1,
|
||||||
|
|
|
@ -175,8 +175,8 @@
|
||||||
}),
|
}),
|
||||||
}),
|
}),
|
||||||
'disabled_by': None,
|
'disabled_by': None,
|
||||||
'discovery_keys': list([
|
'discovery_keys': dict({
|
||||||
]),
|
}),
|
||||||
'domain': 'husqvarna_automower',
|
'domain': 'husqvarna_automower',
|
||||||
'entry_id': 'automower_test',
|
'entry_id': 'automower_test',
|
||||||
'minor_version': 1,
|
'minor_version': 1,
|
||||||
|
|
|
@ -6,8 +6,8 @@
|
||||||
'station_id': '123',
|
'station_id': '123',
|
||||||
}),
|
}),
|
||||||
'disabled_by': None,
|
'disabled_by': None,
|
||||||
'discovery_keys': list([
|
'discovery_keys': dict({
|
||||||
]),
|
}),
|
||||||
'domain': 'imgw_pib',
|
'domain': 'imgw_pib',
|
||||||
'minor_version': 1,
|
'minor_version': 1,
|
||||||
'options': dict({
|
'options': dict({
|
||||||
|
|
|
@ -348,8 +348,8 @@
|
||||||
'zip_code': '**REDACTED**',
|
'zip_code': '**REDACTED**',
|
||||||
}),
|
}),
|
||||||
'disabled_by': None,
|
'disabled_by': None,
|
||||||
'discovery_keys': list([
|
'discovery_keys': dict({
|
||||||
]),
|
}),
|
||||||
'domain': 'iqvia',
|
'domain': 'iqvia',
|
||||||
'entry_id': '690ac4b7e99855fc5ee7b987a758d5cb',
|
'entry_id': '690ac4b7e99855fc5ee7b987a758d5cb',
|
||||||
'minor_version': 1,
|
'minor_version': 1,
|
||||||
|
|
|
@ -56,7 +56,7 @@ async def test_entry_diagnostics(
|
||||||
"disabled_by": None,
|
"disabled_by": None,
|
||||||
"created_at": ANY,
|
"created_at": ANY,
|
||||||
"modified_at": ANY,
|
"modified_at": ANY,
|
||||||
"discovery_keys": [],
|
"discovery_keys": {},
|
||||||
},
|
},
|
||||||
"client": {
|
"client": {
|
||||||
"version": "api_version='0.2.0' hostname='scb' name='PUCK RESTful API' sw_version='01.16.05025'",
|
"version": "api_version='0.2.0' hostname='scb' name='PUCK RESTful API' sw_version='01.16.05025'",
|
||||||
|
|
|
@ -15,8 +15,8 @@
|
||||||
'username': '**REDACTED**',
|
'username': '**REDACTED**',
|
||||||
}),
|
}),
|
||||||
'disabled_by': None,
|
'disabled_by': None,
|
||||||
'discovery_keys': list([
|
'discovery_keys': dict({
|
||||||
]),
|
}),
|
||||||
'domain': 'lacrosse_view',
|
'domain': 'lacrosse_view',
|
||||||
'entry_id': 'lacrosse_view_test_entry_id',
|
'entry_id': 'lacrosse_view_test_entry_id',
|
||||||
'minor_version': 1,
|
'minor_version': 1,
|
||||||
|
|
|
@ -63,8 +63,8 @@
|
||||||
'site_id': 'test-site-id',
|
'site_id': 'test-site-id',
|
||||||
}),
|
}),
|
||||||
'disabled_by': None,
|
'disabled_by': None,
|
||||||
'discovery_keys': list([
|
'discovery_keys': dict({
|
||||||
]),
|
}),
|
||||||
'domain': 'linear_garage_door',
|
'domain': 'linear_garage_door',
|
||||||
'entry_id': 'acefdd4b3a4a0911067d1cf51414201e',
|
'entry_id': 'acefdd4b3a4a0911067d1cf51414201e',
|
||||||
'minor_version': 1,
|
'minor_version': 1,
|
||||||
|
|
|
@ -7,8 +7,8 @@
|
||||||
'port': 44077,
|
'port': 44077,
|
||||||
}),
|
}),
|
||||||
'disabled_by': None,
|
'disabled_by': None,
|
||||||
'discovery_keys': list([
|
'discovery_keys': dict({
|
||||||
]),
|
}),
|
||||||
'domain': 'madvr',
|
'domain': 'madvr',
|
||||||
'entry_id': '3bd2acb0e4f0476d40865546d0d91132',
|
'entry_id': '3bd2acb0e4f0476d40865546d0d91132',
|
||||||
'minor_version': 1,
|
'minor_version': 1,
|
||||||
|
|
|
@ -7,8 +7,8 @@
|
||||||
'data': dict({
|
'data': dict({
|
||||||
}),
|
}),
|
||||||
'disabled_by': None,
|
'disabled_by': None,
|
||||||
'discovery_keys': list([
|
'discovery_keys': dict({
|
||||||
]),
|
}),
|
||||||
'domain': 'melcloud',
|
'domain': 'melcloud',
|
||||||
'entry_id': 'TEST_ENTRY_ID',
|
'entry_id': 'TEST_ENTRY_ID',
|
||||||
'minor_version': 1,
|
'minor_version': 1,
|
||||||
|
|
|
@ -7,8 +7,8 @@
|
||||||
'mac': '**REDACTED**',
|
'mac': '**REDACTED**',
|
||||||
}),
|
}),
|
||||||
'disabled_by': None,
|
'disabled_by': None,
|
||||||
'discovery_keys': list([
|
'discovery_keys': dict({
|
||||||
]),
|
}),
|
||||||
'domain': 'modern_forms',
|
'domain': 'modern_forms',
|
||||||
'minor_version': 1,
|
'minor_version': 1,
|
||||||
'options': dict({
|
'options': dict({
|
||||||
|
|
|
@ -18,8 +18,8 @@
|
||||||
'mac_code': 'CCCC',
|
'mac_code': 'CCCC',
|
||||||
}),
|
}),
|
||||||
'disabled_by': None,
|
'disabled_by': None,
|
||||||
'discovery_keys': list([
|
'discovery_keys': dict({
|
||||||
]),
|
}),
|
||||||
'domain': 'motionblinds_ble',
|
'domain': 'motionblinds_ble',
|
||||||
'entry_id': 'mock_entry_id',
|
'entry_id': 'mock_entry_id',
|
||||||
'minor_version': 1,
|
'minor_version': 1,
|
||||||
|
|
|
@ -608,8 +608,8 @@
|
||||||
'webhook_id': '**REDACTED**',
|
'webhook_id': '**REDACTED**',
|
||||||
}),
|
}),
|
||||||
'disabled_by': None,
|
'disabled_by': None,
|
||||||
'discovery_keys': list([
|
'discovery_keys': dict({
|
||||||
]),
|
}),
|
||||||
'domain': 'netatmo',
|
'domain': 'netatmo',
|
||||||
'minor_version': 1,
|
'minor_version': 1,
|
||||||
'options': dict({
|
'options': dict({
|
||||||
|
|
|
@ -7,8 +7,8 @@
|
||||||
'profile_id': '**REDACTED**',
|
'profile_id': '**REDACTED**',
|
||||||
}),
|
}),
|
||||||
'disabled_by': None,
|
'disabled_by': None,
|
||||||
'discovery_keys': list([
|
'discovery_keys': dict({
|
||||||
]),
|
}),
|
||||||
'domain': 'nextdns',
|
'domain': 'nextdns',
|
||||||
'entry_id': 'd9aa37407ddac7b964a99e86312288d6',
|
'entry_id': 'd9aa37407ddac7b964a99e86312288d6',
|
||||||
'minor_version': 1,
|
'minor_version': 1,
|
||||||
|
|
|
@ -37,8 +37,8 @@
|
||||||
'refresh_token': '**REDACTED**',
|
'refresh_token': '**REDACTED**',
|
||||||
}),
|
}),
|
||||||
'disabled_by': None,
|
'disabled_by': None,
|
||||||
'discovery_keys': list([
|
'discovery_keys': dict({
|
||||||
]),
|
}),
|
||||||
'domain': 'nice_go',
|
'domain': 'nice_go',
|
||||||
'entry_id': 'acefdd4b3a4a0911067d1cf51414201e',
|
'entry_id': 'acefdd4b3a4a0911067d1cf51414201e',
|
||||||
'minor_version': 1,
|
'minor_version': 1,
|
||||||
|
|
|
@ -36,7 +36,7 @@ async def test_entry_diagnostics(
|
||||||
"disabled_by": None,
|
"disabled_by": None,
|
||||||
"created_at": ANY,
|
"created_at": ANY,
|
||||||
"modified_at": ANY,
|
"modified_at": ANY,
|
||||||
"discovery_keys": [],
|
"discovery_keys": {},
|
||||||
},
|
},
|
||||||
"data": {
|
"data": {
|
||||||
"bridges": [
|
"bridges": [
|
||||||
|
|
|
@ -39,5 +39,5 @@ async def test_diagnostics(
|
||||||
result = await get_diagnostics_for_config_entry(
|
result = await get_diagnostics_for_config_entry(
|
||||||
hass, hass_client, mock_config_entry
|
hass, hass_client, mock_config_entry
|
||||||
)
|
)
|
||||||
assert result["entry"] == entry_dict | {"discovery_keys": []}
|
assert result["entry"] == entry_dict | {"discovery_keys": {}}
|
||||||
assert result["nut_data"] == nut_data_dict
|
assert result["nut_data"] == nut_data_dict
|
||||||
|
|
|
@ -11,8 +11,8 @@
|
||||||
'username': '**REDACTED**',
|
'username': '**REDACTED**',
|
||||||
}),
|
}),
|
||||||
'disabled_by': None,
|
'disabled_by': None,
|
||||||
'discovery_keys': list([
|
'discovery_keys': dict({
|
||||||
]),
|
}),
|
||||||
'domain': 'onvif',
|
'domain': 'onvif',
|
||||||
'entry_id': '1',
|
'entry_id': '1',
|
||||||
'minor_version': 1,
|
'minor_version': 1,
|
||||||
|
|
|
@ -38,7 +38,7 @@ async def test_entry_diagnostics(
|
||||||
"disabled_by": None,
|
"disabled_by": None,
|
||||||
"created_at": ANY,
|
"created_at": ANY,
|
||||||
"modified_at": ANY,
|
"modified_at": ANY,
|
||||||
"discovery_keys": [],
|
"discovery_keys": {},
|
||||||
},
|
},
|
||||||
"data": {
|
"data": {
|
||||||
"protection_window": {
|
"protection_window": {
|
||||||
|
|
|
@ -85,8 +85,8 @@
|
||||||
}),
|
}),
|
||||||
}),
|
}),
|
||||||
'disabled_by': None,
|
'disabled_by': None,
|
||||||
'discovery_keys': list([
|
'discovery_keys': dict({
|
||||||
]),
|
}),
|
||||||
'domain': 'philips_js',
|
'domain': 'philips_js',
|
||||||
'minor_version': 1,
|
'minor_version': 1,
|
||||||
'options': dict({
|
'options': dict({
|
||||||
|
|
|
@ -23,8 +23,8 @@
|
||||||
'verify_ssl': True,
|
'verify_ssl': True,
|
||||||
}),
|
}),
|
||||||
'disabled_by': None,
|
'disabled_by': None,
|
||||||
'discovery_keys': list([
|
'discovery_keys': dict({
|
||||||
]),
|
}),
|
||||||
'domain': 'pi_hole',
|
'domain': 'pi_hole',
|
||||||
'entry_id': 'pi_hole_mock_entry',
|
'entry_id': 'pi_hole_mock_entry',
|
||||||
'minor_version': 1,
|
'minor_version': 1,
|
||||||
|
|
|
@ -93,8 +93,8 @@
|
||||||
'zone': 'zone.home',
|
'zone': 'zone.home',
|
||||||
}),
|
}),
|
||||||
'disabled_by': None,
|
'disabled_by': None,
|
||||||
'discovery_keys': list([
|
'discovery_keys': dict({
|
||||||
]),
|
}),
|
||||||
'domain': 'proximity',
|
'domain': 'proximity',
|
||||||
'minor_version': 1,
|
'minor_version': 1,
|
||||||
'options': dict({
|
'options': dict({
|
||||||
|
|
|
@ -37,7 +37,7 @@ async def test_entry_diagnostics(
|
||||||
"disabled_by": None,
|
"disabled_by": None,
|
||||||
"created_at": ANY,
|
"created_at": ANY,
|
||||||
"modified_at": ANY,
|
"modified_at": ANY,
|
||||||
"discovery_keys": [],
|
"discovery_keys": {},
|
||||||
},
|
},
|
||||||
"data": {
|
"data": {
|
||||||
"fields": [
|
"fields": [
|
||||||
|
|
|
@ -27,7 +27,7 @@ async def test_entry_diagnostics(
|
||||||
config_entry_dict["data"][CONF_CLOUD_ID] = REDACTED
|
config_entry_dict["data"][CONF_CLOUD_ID] = REDACTED
|
||||||
|
|
||||||
assert result == {
|
assert result == {
|
||||||
"config_entry": config_entry_dict | {"discovery_keys": []},
|
"config_entry": config_entry_dict | {"discovery_keys": {}},
|
||||||
"data": {
|
"data": {
|
||||||
var["Name"]: var["Value"]
|
var["Name"]: var["Value"]
|
||||||
for var in MOCK_200_RESPONSE_WITHOUT_PRICE.values()
|
for var in MOCK_200_RESPONSE_WITHOUT_PRICE.values()
|
||||||
|
|
|
@ -40,7 +40,7 @@ async def test_entry_diagnostics_no_meters(
|
||||||
config_entry_dict["data"][CONF_MAC] = REDACTED
|
config_entry_dict["data"][CONF_MAC] = REDACTED
|
||||||
|
|
||||||
assert result == {
|
assert result == {
|
||||||
"config_entry": config_entry_dict | {"discovery_keys": []},
|
"config_entry": config_entry_dict | {"discovery_keys": {}},
|
||||||
"data": {
|
"data": {
|
||||||
"Meters": {},
|
"Meters": {},
|
||||||
"NetworkInfo": {**asdict(NETWORK_INFO), "device_mac_id": REDACTED},
|
"NetworkInfo": {**asdict(NETWORK_INFO), "device_mac_id": REDACTED},
|
||||||
|
@ -58,7 +58,7 @@ async def test_entry_diagnostics(
|
||||||
config_entry_dict["data"][CONF_MAC] = REDACTED
|
config_entry_dict["data"][CONF_MAC] = REDACTED
|
||||||
|
|
||||||
assert result == {
|
assert result == {
|
||||||
"config_entry": config_entry_dict | {"discovery_keys": []},
|
"config_entry": config_entry_dict | {"discovery_keys": {}},
|
||||||
"data": {
|
"data": {
|
||||||
"Meters": {
|
"Meters": {
|
||||||
"**REDACTED0**": {
|
"**REDACTED0**": {
|
||||||
|
|
|
@ -1131,8 +1131,8 @@
|
||||||
'ssl': True,
|
'ssl': True,
|
||||||
}),
|
}),
|
||||||
'disabled_by': None,
|
'disabled_by': None,
|
||||||
'discovery_keys': list([
|
'discovery_keys': dict({
|
||||||
]),
|
}),
|
||||||
'domain': 'rainmachine',
|
'domain': 'rainmachine',
|
||||||
'entry_id': '81bd010ed0a63b705f6da8407cb26d4b',
|
'entry_id': '81bd010ed0a63b705f6da8407cb26d4b',
|
||||||
'minor_version': 1,
|
'minor_version': 1,
|
||||||
|
@ -2262,8 +2262,8 @@
|
||||||
'ssl': True,
|
'ssl': True,
|
||||||
}),
|
}),
|
||||||
'disabled_by': None,
|
'disabled_by': None,
|
||||||
'discovery_keys': list([
|
'discovery_keys': dict({
|
||||||
]),
|
}),
|
||||||
'domain': 'rainmachine',
|
'domain': 'rainmachine',
|
||||||
'entry_id': '81bd010ed0a63b705f6da8407cb26d4b',
|
'entry_id': '81bd010ed0a63b705f6da8407cb26d4b',
|
||||||
'minor_version': 1,
|
'minor_version': 1,
|
||||||
|
|
|
@ -33,7 +33,7 @@ async def test_entry_diagnostics(
|
||||||
"disabled_by": None,
|
"disabled_by": None,
|
||||||
"created_at": ANY,
|
"created_at": ANY,
|
||||||
"modified_at": ANY,
|
"modified_at": ANY,
|
||||||
"discovery_keys": [],
|
"discovery_keys": {},
|
||||||
},
|
},
|
||||||
"data": [
|
"data": [
|
||||||
{
|
{
|
||||||
|
|
|
@ -34,8 +34,8 @@
|
||||||
'username': '**REDACTED**',
|
'username': '**REDACTED**',
|
||||||
}),
|
}),
|
||||||
'disabled_by': None,
|
'disabled_by': None,
|
||||||
'discovery_keys': list([
|
'discovery_keys': dict({
|
||||||
]),
|
}),
|
||||||
'domain': 'ridwell',
|
'domain': 'ridwell',
|
||||||
'entry_id': '11554ec901379b9cc8f5a6c1d11ce978',
|
'entry_id': '11554ec901379b9cc8f5a6c1d11ce978',
|
||||||
'minor_version': 1,
|
'minor_version': 1,
|
||||||
|
|
|
@ -42,7 +42,7 @@ async def test_entry_diagnostics(
|
||||||
"token": REDACTED,
|
"token": REDACTED,
|
||||||
},
|
},
|
||||||
"disabled_by": None,
|
"disabled_by": None,
|
||||||
"discovery_keys": [],
|
"discovery_keys": {},
|
||||||
"domain": "samsungtv",
|
"domain": "samsungtv",
|
||||||
"entry_id": "123456",
|
"entry_id": "123456",
|
||||||
"minor_version": 2,
|
"minor_version": 2,
|
||||||
|
@ -82,7 +82,7 @@ async def test_entry_diagnostics_encrypted(
|
||||||
"session_id": REDACTED,
|
"session_id": REDACTED,
|
||||||
},
|
},
|
||||||
"disabled_by": None,
|
"disabled_by": None,
|
||||||
"discovery_keys": [],
|
"discovery_keys": {},
|
||||||
"domain": "samsungtv",
|
"domain": "samsungtv",
|
||||||
"entry_id": "123456",
|
"entry_id": "123456",
|
||||||
"minor_version": 2,
|
"minor_version": 2,
|
||||||
|
@ -121,7 +121,7 @@ async def test_entry_diagnostics_encrypte_offline(
|
||||||
"session_id": REDACTED,
|
"session_id": REDACTED,
|
||||||
},
|
},
|
||||||
"disabled_by": None,
|
"disabled_by": None,
|
||||||
"discovery_keys": [],
|
"discovery_keys": {},
|
||||||
"domain": "samsungtv",
|
"domain": "samsungtv",
|
||||||
"entry_id": "123456",
|
"entry_id": "123456",
|
||||||
"minor_version": 2,
|
"minor_version": 2,
|
||||||
|
|
|
@ -7,8 +7,8 @@
|
||||||
'port': 80,
|
'port': 80,
|
||||||
}),
|
}),
|
||||||
'disabled_by': None,
|
'disabled_by': None,
|
||||||
'discovery_keys': list([
|
'discovery_keys': dict({
|
||||||
]),
|
}),
|
||||||
'domain': 'screenlogic',
|
'domain': 'screenlogic',
|
||||||
'entry_id': 'screenlogictest',
|
'entry_id': 'screenlogictest',
|
||||||
'minor_version': 1,
|
'minor_version': 1,
|
||||||
|
|
|
@ -45,7 +45,7 @@ async def test_block_config_entry_diagnostics(
|
||||||
result = await get_diagnostics_for_config_entry(hass, hass_client, entry)
|
result = await get_diagnostics_for_config_entry(hass, hass_client, entry)
|
||||||
|
|
||||||
assert result == {
|
assert result == {
|
||||||
"entry": entry_dict | {"discovery_keys": []},
|
"entry": entry_dict | {"discovery_keys": {}},
|
||||||
"bluetooth": "not initialized",
|
"bluetooth": "not initialized",
|
||||||
"device_info": {
|
"device_info": {
|
||||||
"name": "Test name",
|
"name": "Test name",
|
||||||
|
@ -105,7 +105,7 @@ async def test_rpc_config_entry_diagnostics(
|
||||||
result = await get_diagnostics_for_config_entry(hass, hass_client, entry)
|
result = await get_diagnostics_for_config_entry(hass, hass_client, entry)
|
||||||
|
|
||||||
assert result == {
|
assert result == {
|
||||||
"entry": entry_dict | {"discovery_keys": []},
|
"entry": entry_dict | {"discovery_keys": {}},
|
||||||
"bluetooth": {
|
"bluetooth": {
|
||||||
"scanner": {
|
"scanner": {
|
||||||
"connectable": False,
|
"connectable": False,
|
||||||
|
|
|
@ -31,7 +31,7 @@ async def test_entry_diagnostics(
|
||||||
"disabled_by": None,
|
"disabled_by": None,
|
||||||
"created_at": ANY,
|
"created_at": ANY,
|
||||||
"modified_at": ANY,
|
"modified_at": ANY,
|
||||||
"discovery_keys": [],
|
"discovery_keys": {},
|
||||||
},
|
},
|
||||||
"subscription_data": {
|
"subscription_data": {
|
||||||
"12345": {
|
"12345": {
|
||||||
|
|
|
@ -9,8 +9,8 @@
|
||||||
'password': 'pwd',
|
'password': 'pwd',
|
||||||
}),
|
}),
|
||||||
'disabled_by': None,
|
'disabled_by': None,
|
||||||
'discovery_keys': list([
|
'discovery_keys': dict({
|
||||||
]),
|
}),
|
||||||
'domain': 'solarlog',
|
'domain': 'solarlog',
|
||||||
'entry_id': 'ce5f5431554d101905d31797e1232da8',
|
'entry_id': 'ce5f5431554d101905d31797e1232da8',
|
||||||
'minor_version': 3,
|
'minor_version': 3,
|
||||||
|
|
|
@ -68,6 +68,6 @@ async def test_diagnostics(
|
||||||
"disabled_by": None,
|
"disabled_by": None,
|
||||||
"created_at": ANY,
|
"created_at": ANY,
|
||||||
"modified_at": ANY,
|
"modified_at": ANY,
|
||||||
"discovery_keys": [],
|
"discovery_keys": {},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
|
@ -34,8 +34,8 @@
|
||||||
'data': dict({
|
'data': dict({
|
||||||
}),
|
}),
|
||||||
'disabled_by': None,
|
'disabled_by': None,
|
||||||
'discovery_keys': list([
|
'discovery_keys': dict({
|
||||||
]),
|
}),
|
||||||
'domain': 'systemmonitor',
|
'domain': 'systemmonitor',
|
||||||
'minor_version': 3,
|
'minor_version': 3,
|
||||||
'options': dict({
|
'options': dict({
|
||||||
|
|
|
@ -22,8 +22,8 @@
|
||||||
'token': '987654',
|
'token': '987654',
|
||||||
}),
|
}),
|
||||||
'disabled_by': None,
|
'disabled_by': None,
|
||||||
'discovery_keys': tuple(
|
'discovery_keys': dict({
|
||||||
),
|
}),
|
||||||
'domain': 'tailwind',
|
'domain': 'tailwind',
|
||||||
'entry_id': <ANY>,
|
'entry_id': <ANY>,
|
||||||
'minor_version': 1,
|
'minor_version': 1,
|
||||||
|
@ -68,8 +68,8 @@
|
||||||
'token': '987654',
|
'token': '987654',
|
||||||
}),
|
}),
|
||||||
'disabled_by': None,
|
'disabled_by': None,
|
||||||
'discovery_keys': tuple(
|
'discovery_keys': dict({
|
||||||
),
|
}),
|
||||||
'domain': 'tailwind',
|
'domain': 'tailwind',
|
||||||
'entry_id': <ANY>,
|
'entry_id': <ANY>,
|
||||||
'minor_version': 1,
|
'minor_version': 1,
|
||||||
|
|
|
@ -26,8 +26,8 @@
|
||||||
]),
|
]),
|
||||||
}),
|
}),
|
||||||
'disabled_by': None,
|
'disabled_by': None,
|
||||||
'discovery_keys': list([
|
'discovery_keys': dict({
|
||||||
]),
|
}),
|
||||||
'domain': 'tankerkoenig',
|
'domain': 'tankerkoenig',
|
||||||
'entry_id': '8036b4412f2fae6bb9dbab7fe8e37f87',
|
'entry_id': '8036b4412f2fae6bb9dbab7fe8e37f87',
|
||||||
'minor_version': 1,
|
'minor_version': 1,
|
||||||
|
|
|
@ -7,8 +7,8 @@
|
||||||
'password': '**REDACTED**',
|
'password': '**REDACTED**',
|
||||||
}),
|
}),
|
||||||
'disabled_by': None,
|
'disabled_by': None,
|
||||||
'discovery_keys': list([
|
'discovery_keys': dict({
|
||||||
]),
|
}),
|
||||||
'domain': 'tractive',
|
'domain': 'tractive',
|
||||||
'entry_id': '3bd2acb0e4f0476d40865546d0d91921',
|
'entry_id': '3bd2acb0e4f0476d40865546d0d91921',
|
||||||
'minor_version': 1,
|
'minor_version': 1,
|
||||||
|
|
|
@ -14,8 +14,8 @@
|
||||||
'user_code': '12345',
|
'user_code': '12345',
|
||||||
}),
|
}),
|
||||||
'disabled_by': None,
|
'disabled_by': None,
|
||||||
'discovery_keys': tuple(
|
'discovery_keys': dict({
|
||||||
),
|
}),
|
||||||
'domain': 'tuya',
|
'domain': 'tuya',
|
||||||
'entry_id': <ANY>,
|
'entry_id': <ANY>,
|
||||||
'minor_version': 1,
|
'minor_version': 1,
|
||||||
|
@ -44,8 +44,8 @@
|
||||||
'user_code': '12345',
|
'user_code': '12345',
|
||||||
}),
|
}),
|
||||||
'disabled_by': None,
|
'disabled_by': None,
|
||||||
'discovery_keys': tuple(
|
'discovery_keys': dict({
|
||||||
),
|
}),
|
||||||
'domain': 'tuya',
|
'domain': 'tuya',
|
||||||
'entry_id': <ANY>,
|
'entry_id': <ANY>,
|
||||||
'minor_version': 1,
|
'minor_version': 1,
|
||||||
|
@ -97,8 +97,8 @@
|
||||||
'user_code': '12345',
|
'user_code': '12345',
|
||||||
}),
|
}),
|
||||||
'disabled_by': None,
|
'disabled_by': None,
|
||||||
'discovery_keys': tuple(
|
'discovery_keys': dict({
|
||||||
),
|
}),
|
||||||
'domain': 'tuya',
|
'domain': 'tuya',
|
||||||
'entry_id': <ANY>,
|
'entry_id': <ANY>,
|
||||||
'minor_version': 1,
|
'minor_version': 1,
|
||||||
|
|
|
@ -26,8 +26,8 @@
|
||||||
'post_code': '1234AB',
|
'post_code': '1234AB',
|
||||||
}),
|
}),
|
||||||
'disabled_by': None,
|
'disabled_by': None,
|
||||||
'discovery_keys': tuple(
|
'discovery_keys': dict({
|
||||||
),
|
}),
|
||||||
'domain': 'twentemilieu',
|
'domain': 'twentemilieu',
|
||||||
'entry_id': <ANY>,
|
'entry_id': <ANY>,
|
||||||
'minor_version': 1,
|
'minor_version': 1,
|
||||||
|
@ -72,8 +72,8 @@
|
||||||
'post_code': '1234AB',
|
'post_code': '1234AB',
|
||||||
}),
|
}),
|
||||||
'disabled_by': None,
|
'disabled_by': None,
|
||||||
'discovery_keys': tuple(
|
'discovery_keys': dict({
|
||||||
),
|
}),
|
||||||
'domain': 'twentemilieu',
|
'domain': 'twentemilieu',
|
||||||
'entry_id': <ANY>,
|
'entry_id': <ANY>,
|
||||||
'minor_version': 1,
|
'minor_version': 1,
|
||||||
|
|
|
@ -27,8 +27,8 @@
|
||||||
'name': 'twinkly_test_device_name',
|
'name': 'twinkly_test_device_name',
|
||||||
}),
|
}),
|
||||||
'disabled_by': None,
|
'disabled_by': None,
|
||||||
'discovery_keys': list([
|
'discovery_keys': dict({
|
||||||
]),
|
}),
|
||||||
'domain': 'twinkly',
|
'domain': 'twinkly',
|
||||||
'entry_id': '4c8fccf5-e08a-4173-92d5-49bf479252a2',
|
'entry_id': '4c8fccf5-e08a-4173-92d5-49bf479252a2',
|
||||||
'minor_version': 1,
|
'minor_version': 1,
|
||||||
|
|
|
@ -27,8 +27,8 @@
|
||||||
'verify_ssl': False,
|
'verify_ssl': False,
|
||||||
}),
|
}),
|
||||||
'disabled_by': None,
|
'disabled_by': None,
|
||||||
'discovery_keys': list([
|
'discovery_keys': dict({
|
||||||
]),
|
}),
|
||||||
'domain': 'unifi',
|
'domain': 'unifi',
|
||||||
'entry_id': '1',
|
'entry_id': '1',
|
||||||
'minor_version': 1,
|
'minor_version': 1,
|
||||||
|
|
|
@ -17,8 +17,8 @@
|
||||||
'data': dict({
|
'data': dict({
|
||||||
}),
|
}),
|
||||||
'disabled_by': None,
|
'disabled_by': None,
|
||||||
'discovery_keys': tuple(
|
'discovery_keys': dict({
|
||||||
),
|
}),
|
||||||
'domain': 'uptime',
|
'domain': 'uptime',
|
||||||
'entry_id': <ANY>,
|
'entry_id': <ANY>,
|
||||||
'minor_version': 1,
|
'minor_version': 1,
|
||||||
|
|
|
@ -5,8 +5,8 @@
|
||||||
'data': dict({
|
'data': dict({
|
||||||
}),
|
}),
|
||||||
'disabled_by': None,
|
'disabled_by': None,
|
||||||
'discovery_keys': list([
|
'discovery_keys': dict({
|
||||||
]),
|
}),
|
||||||
'domain': 'utility_meter',
|
'domain': 'utility_meter',
|
||||||
'minor_version': 1,
|
'minor_version': 1,
|
||||||
'options': dict({
|
'options': dict({
|
||||||
|
|
|
@ -6,8 +6,8 @@
|
||||||
'host': '**REDACTED**',
|
'host': '**REDACTED**',
|
||||||
}),
|
}),
|
||||||
'disabled_by': None,
|
'disabled_by': None,
|
||||||
'discovery_keys': list([
|
'discovery_keys': dict({
|
||||||
]),
|
}),
|
||||||
'domain': 'v2c',
|
'domain': 'v2c',
|
||||||
'entry_id': 'da58ee91f38c2406c2a36d0a1a7f8569',
|
'entry_id': 'da58ee91f38c2406c2a36d0a1a7f8569',
|
||||||
'minor_version': 1,
|
'minor_version': 1,
|
||||||
|
|
|
@ -4721,8 +4721,8 @@
|
||||||
'username': '**REDACTED**',
|
'username': '**REDACTED**',
|
||||||
}),
|
}),
|
||||||
'disabled_by': None,
|
'disabled_by': None,
|
||||||
'discovery_keys': list([
|
'discovery_keys': dict({
|
||||||
]),
|
}),
|
||||||
'domain': 'vicare',
|
'domain': 'vicare',
|
||||||
'entry_id': '1234',
|
'entry_id': '1234',
|
||||||
'minor_version': 1,
|
'minor_version': 1,
|
||||||
|
|
|
@ -18,8 +18,8 @@
|
||||||
'username': '**REDACTED**',
|
'username': '**REDACTED**',
|
||||||
}),
|
}),
|
||||||
'disabled_by': None,
|
'disabled_by': None,
|
||||||
'discovery_keys': list([
|
'discovery_keys': dict({
|
||||||
]),
|
}),
|
||||||
'domain': 'watttime',
|
'domain': 'watttime',
|
||||||
'minor_version': 1,
|
'minor_version': 1,
|
||||||
'options': dict({
|
'options': dict({
|
||||||
|
|
|
@ -237,8 +237,8 @@
|
||||||
'data': dict({
|
'data': dict({
|
||||||
}),
|
}),
|
||||||
'disabled_by': None,
|
'disabled_by': None,
|
||||||
'discovery_keys': list([
|
'discovery_keys': dict({
|
||||||
]),
|
}),
|
||||||
'domain': 'webmin',
|
'domain': 'webmin',
|
||||||
'entry_id': '**REDACTED**',
|
'entry_id': '**REDACTED**',
|
||||||
'minor_version': 1,
|
'minor_version': 1,
|
||||||
|
|
|
@ -60,6 +60,6 @@ async def test_diagnostics(
|
||||||
"disabled_by": None,
|
"disabled_by": None,
|
||||||
"created_at": entry.created_at.isoformat(),
|
"created_at": entry.created_at.isoformat(),
|
||||||
"modified_at": entry.modified_at.isoformat(),
|
"modified_at": entry.modified_at.isoformat(),
|
||||||
"discovery_keys": [],
|
"discovery_keys": {},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
|
@ -29,8 +29,8 @@
|
||||||
'username': '**REDACTED**',
|
'username': '**REDACTED**',
|
||||||
}),
|
}),
|
||||||
'disabled_by': None,
|
'disabled_by': None,
|
||||||
'discovery_keys': list([
|
'discovery_keys': dict({
|
||||||
]),
|
}),
|
||||||
'domain': 'whirlpool',
|
'domain': 'whirlpool',
|
||||||
'minor_version': 1,
|
'minor_version': 1,
|
||||||
'options': dict({
|
'options': dict({
|
||||||
|
|
|
@ -20,8 +20,8 @@
|
||||||
'domain': 'example.com',
|
'domain': 'example.com',
|
||||||
}),
|
}),
|
||||||
'disabled_by': None,
|
'disabled_by': None,
|
||||||
'discovery_keys': tuple(
|
'discovery_keys': dict({
|
||||||
),
|
}),
|
||||||
'domain': 'whois',
|
'domain': 'whois',
|
||||||
'entry_id': <ANY>,
|
'entry_id': <ANY>,
|
||||||
'minor_version': 1,
|
'minor_version': 1,
|
||||||
|
@ -60,8 +60,8 @@
|
||||||
'domain': 'example.com',
|
'domain': 'example.com',
|
||||||
}),
|
}),
|
||||||
'disabled_by': None,
|
'disabled_by': None,
|
||||||
'discovery_keys': tuple(
|
'discovery_keys': dict({
|
||||||
),
|
}),
|
||||||
'domain': 'whois',
|
'domain': 'whois',
|
||||||
'entry_id': <ANY>,
|
'entry_id': <ANY>,
|
||||||
'minor_version': 1,
|
'minor_version': 1,
|
||||||
|
@ -100,8 +100,8 @@
|
||||||
'domain': 'example.com',
|
'domain': 'example.com',
|
||||||
}),
|
}),
|
||||||
'disabled_by': None,
|
'disabled_by': None,
|
||||||
'discovery_keys': tuple(
|
'discovery_keys': dict({
|
||||||
),
|
}),
|
||||||
'domain': 'whois',
|
'domain': 'whois',
|
||||||
'entry_id': <ANY>,
|
'entry_id': <ANY>,
|
||||||
'minor_version': 1,
|
'minor_version': 1,
|
||||||
|
@ -140,8 +140,8 @@
|
||||||
'domain': 'example.com',
|
'domain': 'example.com',
|
||||||
}),
|
}),
|
||||||
'disabled_by': None,
|
'disabled_by': None,
|
||||||
'discovery_keys': tuple(
|
'discovery_keys': dict({
|
||||||
),
|
}),
|
||||||
'domain': 'whois',
|
'domain': 'whois',
|
||||||
'entry_id': <ANY>,
|
'entry_id': <ANY>,
|
||||||
'minor_version': 1,
|
'minor_version': 1,
|
||||||
|
@ -180,8 +180,8 @@
|
||||||
'domain': 'example.com',
|
'domain': 'example.com',
|
||||||
}),
|
}),
|
||||||
'disabled_by': None,
|
'disabled_by': None,
|
||||||
'discovery_keys': tuple(
|
'discovery_keys': dict({
|
||||||
),
|
}),
|
||||||
'domain': 'whois',
|
'domain': 'whois',
|
||||||
'entry_id': <ANY>,
|
'entry_id': <ANY>,
|
||||||
'minor_version': 1,
|
'minor_version': 1,
|
||||||
|
|
|
@ -26,8 +26,8 @@
|
||||||
'port': 10200,
|
'port': 10200,
|
||||||
}),
|
}),
|
||||||
'disabled_by': None,
|
'disabled_by': None,
|
||||||
'discovery_keys': tuple(
|
'discovery_keys': dict({
|
||||||
),
|
}),
|
||||||
'domain': 'wyoming',
|
'domain': 'wyoming',
|
||||||
'entry_id': <ANY>,
|
'entry_id': <ANY>,
|
||||||
'minor_version': 1,
|
'minor_version': 1,
|
||||||
|
@ -72,8 +72,8 @@
|
||||||
'port': 10200,
|
'port': 10200,
|
||||||
}),
|
}),
|
||||||
'disabled_by': None,
|
'disabled_by': None,
|
||||||
'discovery_keys': tuple(
|
'discovery_keys': dict({
|
||||||
),
|
}),
|
||||||
'domain': 'wyoming',
|
'domain': 'wyoming',
|
||||||
'entry_id': <ANY>,
|
'entry_id': <ANY>,
|
||||||
'minor_version': 1,
|
'minor_version': 1,
|
||||||
|
@ -118,8 +118,8 @@
|
||||||
'port': 12345,
|
'port': 12345,
|
||||||
}),
|
}),
|
||||||
'disabled_by': None,
|
'disabled_by': None,
|
||||||
'discovery_keys': tuple(
|
'discovery_keys': dict({
|
||||||
),
|
}),
|
||||||
'domain': 'wyoming',
|
'domain': 'wyoming',
|
||||||
'entry_id': <ANY>,
|
'entry_id': <ANY>,
|
||||||
'minor_version': 1,
|
'minor_version': 1,
|
||||||
|
|
|
@ -1409,42 +1409,50 @@ async def test_zeroconf_removed(hass: HomeAssistant) -> None:
|
||||||
# Matching discovery key
|
# Matching discovery key
|
||||||
(
|
(
|
||||||
"shelly",
|
"shelly",
|
||||||
(
|
{
|
||||||
|
"zeroconf": (
|
||||||
DiscoveryKey(
|
DiscoveryKey(
|
||||||
domain="zeroconf",
|
domain="zeroconf",
|
||||||
key=("_http._tcp.local.", "Shelly108._http._tcp.local."),
|
key=("_http._tcp.local.", "Shelly108._http._tcp.local."),
|
||||||
version=1,
|
version=1,
|
||||||
),
|
),
|
||||||
),
|
)
|
||||||
|
},
|
||||||
),
|
),
|
||||||
# Matching discovery key
|
# Matching discovery key
|
||||||
(
|
(
|
||||||
"shelly",
|
"shelly",
|
||||||
(
|
{
|
||||||
|
"zeroconf": (
|
||||||
DiscoveryKey(
|
DiscoveryKey(
|
||||||
domain="zeroconf",
|
domain="zeroconf",
|
||||||
key=("_http._tcp.local.", "Shelly108._http._tcp.local."),
|
key=("_http._tcp.local.", "Shelly108._http._tcp.local."),
|
||||||
version=1,
|
version=1,
|
||||||
),
|
),
|
||||||
|
),
|
||||||
|
"other": (
|
||||||
DiscoveryKey(
|
DiscoveryKey(
|
||||||
domain="other",
|
domain="other",
|
||||||
key="blah",
|
key="blah",
|
||||||
version=1,
|
version=1,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
},
|
||||||
),
|
),
|
||||||
# Matching discovery key, other domain
|
# Matching discovery key, other domain
|
||||||
# Note: Rediscovery is not currently restricted to the domain of the removed
|
# Note: Rediscovery is not currently restricted to the domain of the removed
|
||||||
# entry. Such a check can be added if needed.
|
# entry. Such a check can be added if needed.
|
||||||
(
|
(
|
||||||
"comp",
|
"comp",
|
||||||
(
|
{
|
||||||
|
"zeroconf": (
|
||||||
DiscoveryKey(
|
DiscoveryKey(
|
||||||
domain="zeroconf",
|
domain="zeroconf",
|
||||||
key=("_http._tcp.local.", "Shelly108._http._tcp.local."),
|
key=("_http._tcp.local.", "Shelly108._http._tcp.local."),
|
||||||
version=1,
|
version=1,
|
||||||
),
|
),
|
||||||
),
|
)
|
||||||
|
},
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
@ -1538,26 +1546,30 @@ async def test_zeroconf_rediscover(
|
||||||
# Discovery key from other domain
|
# Discovery key from other domain
|
||||||
(
|
(
|
||||||
"shelly",
|
"shelly",
|
||||||
(
|
{
|
||||||
|
"bluetooth": (
|
||||||
DiscoveryKey(
|
DiscoveryKey(
|
||||||
domain="bluetooth",
|
domain="bluetooth",
|
||||||
key=("_http._tcp.local.", "Shelly108._http._tcp.local."),
|
key=("_http._tcp.local.", "Shelly108._http._tcp.local."),
|
||||||
version=1,
|
version=1,
|
||||||
),
|
),
|
||||||
),
|
)
|
||||||
|
},
|
||||||
config_entries.SOURCE_IGNORE,
|
config_entries.SOURCE_IGNORE,
|
||||||
"mock-unique-id",
|
"mock-unique-id",
|
||||||
),
|
),
|
||||||
# Discovery key from the future
|
# Discovery key from the future
|
||||||
(
|
(
|
||||||
"shelly",
|
"shelly",
|
||||||
(
|
{
|
||||||
|
"zeroconf": (
|
||||||
DiscoveryKey(
|
DiscoveryKey(
|
||||||
domain="zeroconf",
|
domain="zeroconf",
|
||||||
key=("_http._tcp.local.", "Shelly108._http._tcp.local."),
|
key=("_http._tcp.local.", "Shelly108._http._tcp.local."),
|
||||||
version=2,
|
version=2,
|
||||||
),
|
),
|
||||||
),
|
)
|
||||||
|
},
|
||||||
config_entries.SOURCE_IGNORE,
|
config_entries.SOURCE_IGNORE,
|
||||||
"mock-unique-id",
|
"mock-unique-id",
|
||||||
),
|
),
|
||||||
|
@ -1656,13 +1668,15 @@ async def test_zeroconf_rediscover_no_match(
|
||||||
# Source not SOURCE_IGNORE
|
# Source not SOURCE_IGNORE
|
||||||
(
|
(
|
||||||
"shelly",
|
"shelly",
|
||||||
(
|
{
|
||||||
|
"bluetooth": (
|
||||||
DiscoveryKey(
|
DiscoveryKey(
|
||||||
domain="zeroconf",
|
domain="zeroconf",
|
||||||
key=("_http._tcp.local.", "Shelly108._http._tcp.local."),
|
key=("_http._tcp.local.", "Shelly108._http._tcp.local."),
|
||||||
version=1,
|
version=1,
|
||||||
),
|
),
|
||||||
),
|
)
|
||||||
|
},
|
||||||
config_entries.SOURCE_ZEROCONF,
|
config_entries.SOURCE_ZEROCONF,
|
||||||
"mock-unique-id",
|
"mock-unique-id",
|
||||||
),
|
),
|
||||||
|
|
|
@ -93,8 +93,8 @@
|
||||||
'radio_type': 'ezsp',
|
'radio_type': 'ezsp',
|
||||||
}),
|
}),
|
||||||
'disabled_by': None,
|
'disabled_by': None,
|
||||||
'discovery_keys': list([
|
'discovery_keys': dict({
|
||||||
]),
|
}),
|
||||||
'domain': 'zha',
|
'domain': 'zha',
|
||||||
'minor_version': 1,
|
'minor_version': 1,
|
||||||
'options': dict({
|
'options': dict({
|
||||||
|
|
|
@ -5,8 +5,8 @@
|
||||||
'data': dict({
|
'data': dict({
|
||||||
}),
|
}),
|
||||||
'disabled_by': None,
|
'disabled_by': None,
|
||||||
'discovery_keys': tuple(
|
'discovery_keys': dict({
|
||||||
),
|
}),
|
||||||
'domain': 'test',
|
'domain': 'test',
|
||||||
'entry_id': 'mock-entry',
|
'entry_id': 'mock-entry',
|
||||||
'minor_version': 1,
|
'minor_version': 1,
|
||||||
|
|
|
@ -2756,11 +2756,11 @@ async def test_finish_flow_aborts_progress(
|
||||||
[
|
[
|
||||||
(
|
(
|
||||||
{},
|
{},
|
||||||
(),
|
{},
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
{"discovery_key": DiscoveryKey(domain="test", key="blah", version=1)},
|
{"discovery_key": DiscoveryKey(domain="test", key="blah", version=1)},
|
||||||
(DiscoveryKey(domain="test", key="blah", version=1),),
|
{"test": (DiscoveryKey(domain="test", key="blah", version=1),)},
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
@ -2921,108 +2921,114 @@ async def test_manual_add_overrides_ignored_entry_singleton(
|
||||||
[
|
[
|
||||||
# No discovery key
|
# No discovery key
|
||||||
(
|
(
|
||||||
(),
|
{},
|
||||||
config_entries.SOURCE_IGNORE,
|
config_entries.SOURCE_IGNORE,
|
||||||
"mock-unique-id",
|
"mock-unique-id",
|
||||||
{},
|
{},
|
||||||
config_entries.SOURCE_ZEROCONF,
|
config_entries.SOURCE_ZEROCONF,
|
||||||
data_entry_flow.FlowResultType.ABORT,
|
data_entry_flow.FlowResultType.ABORT,
|
||||||
(),
|
{},
|
||||||
),
|
),
|
||||||
# Discovery key added to ignored entry data
|
# Discovery key added to ignored entry data
|
||||||
(
|
(
|
||||||
(),
|
{},
|
||||||
config_entries.SOURCE_IGNORE,
|
config_entries.SOURCE_IGNORE,
|
||||||
"mock-unique-id",
|
"mock-unique-id",
|
||||||
{"discovery_key": {"domain": "test", "key": "blah", "version": 1}},
|
{"discovery_key": DiscoveryKey(domain="test", key="blah", version=1)},
|
||||||
config_entries.SOURCE_ZEROCONF,
|
config_entries.SOURCE_ZEROCONF,
|
||||||
data_entry_flow.FlowResultType.ABORT,
|
data_entry_flow.FlowResultType.ABORT,
|
||||||
({"domain": "test", "key": "blah", "version": 1},),
|
{"test": (DiscoveryKey(domain="test", key="blah", version=1),)},
|
||||||
),
|
),
|
||||||
# Discovery key added to ignored entry data
|
# Discovery key added to ignored entry data
|
||||||
(
|
(
|
||||||
({"domain": "test", "key": "bleh", "version": 1},),
|
{"test": (DiscoveryKey(domain="test", key="bleh", version=1),)},
|
||||||
config_entries.SOURCE_IGNORE,
|
config_entries.SOURCE_IGNORE,
|
||||||
"mock-unique-id",
|
"mock-unique-id",
|
||||||
{"discovery_key": {"domain": "test", "key": "blah", "version": 1}},
|
{"discovery_key": DiscoveryKey(domain="test", key="blah", version=1)},
|
||||||
config_entries.SOURCE_ZEROCONF,
|
config_entries.SOURCE_ZEROCONF,
|
||||||
data_entry_flow.FlowResultType.ABORT,
|
data_entry_flow.FlowResultType.ABORT,
|
||||||
(
|
{
|
||||||
{"domain": "test", "key": "bleh", "version": 1},
|
"test": (
|
||||||
{"domain": "test", "key": "blah", "version": 1},
|
DiscoveryKey(domain="test", key="bleh", version=1),
|
||||||
),
|
DiscoveryKey(domain="test", key="blah", version=1),
|
||||||
|
)
|
||||||
|
},
|
||||||
),
|
),
|
||||||
# Discovery key added to ignored entry data
|
# Discovery key added to ignored entry data
|
||||||
(
|
(
|
||||||
(
|
{
|
||||||
{"domain": "test", "key": "1", "version": 1},
|
"test": (
|
||||||
{"domain": "test", "key": "2", "version": 1},
|
DiscoveryKey(domain="test", key="1", version=1),
|
||||||
{"domain": "test", "key": "3", "version": 1},
|
DiscoveryKey(domain="test", key="2", version=1),
|
||||||
{"domain": "test", "key": "4", "version": 1},
|
DiscoveryKey(domain="test", key="3", version=1),
|
||||||
{"domain": "test", "key": "5", "version": 1},
|
DiscoveryKey(domain="test", key="4", version=1),
|
||||||
{"domain": "test", "key": "6", "version": 1},
|
DiscoveryKey(domain="test", key="5", version=1),
|
||||||
{"domain": "test", "key": "7", "version": 1},
|
DiscoveryKey(domain="test", key="6", version=1),
|
||||||
{"domain": "test", "key": "8", "version": 1},
|
DiscoveryKey(domain="test", key="7", version=1),
|
||||||
{"domain": "test", "key": "9", "version": 1},
|
DiscoveryKey(domain="test", key="8", version=1),
|
||||||
{"domain": "test", "key": "10", "version": 1},
|
DiscoveryKey(domain="test", key="9", version=1),
|
||||||
),
|
DiscoveryKey(domain="test", key="10", version=1),
|
||||||
|
)
|
||||||
|
},
|
||||||
config_entries.SOURCE_IGNORE,
|
config_entries.SOURCE_IGNORE,
|
||||||
"mock-unique-id",
|
"mock-unique-id",
|
||||||
{"discovery_key": {"domain": "test", "key": "11", "version": 1}},
|
{"discovery_key": DiscoveryKey(domain="test", key="11", version=1)},
|
||||||
config_entries.SOURCE_ZEROCONF,
|
config_entries.SOURCE_ZEROCONF,
|
||||||
data_entry_flow.FlowResultType.ABORT,
|
data_entry_flow.FlowResultType.ABORT,
|
||||||
(
|
{
|
||||||
{"domain": "test", "key": "2", "version": 1},
|
"test": (
|
||||||
{"domain": "test", "key": "3", "version": 1},
|
DiscoveryKey(domain="test", key="2", version=1),
|
||||||
{"domain": "test", "key": "4", "version": 1},
|
DiscoveryKey(domain="test", key="3", version=1),
|
||||||
{"domain": "test", "key": "5", "version": 1},
|
DiscoveryKey(domain="test", key="4", version=1),
|
||||||
{"domain": "test", "key": "6", "version": 1},
|
DiscoveryKey(domain="test", key="5", version=1),
|
||||||
{"domain": "test", "key": "7", "version": 1},
|
DiscoveryKey(domain="test", key="6", version=1),
|
||||||
{"domain": "test", "key": "8", "version": 1},
|
DiscoveryKey(domain="test", key="7", version=1),
|
||||||
{"domain": "test", "key": "9", "version": 1},
|
DiscoveryKey(domain="test", key="8", version=1),
|
||||||
{"domain": "test", "key": "10", "version": 1},
|
DiscoveryKey(domain="test", key="9", version=1),
|
||||||
{"domain": "test", "key": "11", "version": 1},
|
DiscoveryKey(domain="test", key="10", version=1),
|
||||||
),
|
DiscoveryKey(domain="test", key="11", version=1),
|
||||||
|
)
|
||||||
|
},
|
||||||
),
|
),
|
||||||
# Discovery key already in ignored entry data
|
# Discovery key already in ignored entry data
|
||||||
(
|
(
|
||||||
({"domain": "test", "key": "blah", "version": 1},),
|
{"test": (DiscoveryKey(domain="test", key="blah", version=1),)},
|
||||||
config_entries.SOURCE_IGNORE,
|
config_entries.SOURCE_IGNORE,
|
||||||
"mock-unique-id",
|
"mock-unique-id",
|
||||||
{"discovery_key": {"domain": "test", "key": "blah", "version": 1}},
|
{"discovery_key": DiscoveryKey(domain="test", key="blah", version=1)},
|
||||||
config_entries.SOURCE_ZEROCONF,
|
config_entries.SOURCE_ZEROCONF,
|
||||||
data_entry_flow.FlowResultType.ABORT,
|
data_entry_flow.FlowResultType.ABORT,
|
||||||
({"domain": "test", "key": "blah", "version": 1},),
|
{"test": (DiscoveryKey(domain="test", key="blah", version=1),)},
|
||||||
),
|
),
|
||||||
# Discovery key not added to user entry data
|
# Discovery key not added to user entry data
|
||||||
(
|
(
|
||||||
(),
|
{},
|
||||||
config_entries.SOURCE_USER,
|
config_entries.SOURCE_USER,
|
||||||
"mock-unique-id",
|
"mock-unique-id",
|
||||||
{"discovery_key": {"domain": "test", "key": "blah", "version": 1}},
|
{"discovery_key": DiscoveryKey(domain="test", key="blah", version=1)},
|
||||||
config_entries.SOURCE_ZEROCONF,
|
config_entries.SOURCE_ZEROCONF,
|
||||||
data_entry_flow.FlowResultType.ABORT,
|
data_entry_flow.FlowResultType.ABORT,
|
||||||
(),
|
{},
|
||||||
),
|
),
|
||||||
# Flow not aborted when unique id is not matching
|
# Flow not aborted when unique id is not matching
|
||||||
(
|
(
|
||||||
(),
|
{},
|
||||||
config_entries.SOURCE_IGNORE,
|
config_entries.SOURCE_IGNORE,
|
||||||
"mock-unique-id-2",
|
"mock-unique-id-2",
|
||||||
{"discovery_key": {"domain": "test", "key": "blah", "version": 1}},
|
{"discovery_key": DiscoveryKey(domain="test", key="blah", version=1)},
|
||||||
config_entries.SOURCE_ZEROCONF,
|
config_entries.SOURCE_ZEROCONF,
|
||||||
data_entry_flow.FlowResultType.FORM,
|
data_entry_flow.FlowResultType.FORM,
|
||||||
(),
|
{},
|
||||||
),
|
),
|
||||||
# Flow not aborted when user initiated flow
|
# Flow not aborted when user initiated flow
|
||||||
(
|
(
|
||||||
(),
|
{},
|
||||||
config_entries.SOURCE_IGNORE,
|
config_entries.SOURCE_IGNORE,
|
||||||
"mock-unique-id-2",
|
"mock-unique-id-2",
|
||||||
{"discovery_key": {"domain": "test", "key": "blah", "version": 1}},
|
{"discovery_key": DiscoveryKey(domain="test", key="blah", version=1)},
|
||||||
config_entries.SOURCE_USER,
|
config_entries.SOURCE_USER,
|
||||||
data_entry_flow.FlowResultType.FORM,
|
data_entry_flow.FlowResultType.FORM,
|
||||||
(),
|
{},
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
@ -5251,7 +5257,7 @@ async def test_unhashable_unique_id(
|
||||||
entries = config_entries.ConfigEntryItems(hass)
|
entries = config_entries.ConfigEntryItems(hass)
|
||||||
entry = config_entries.ConfigEntry(
|
entry = config_entries.ConfigEntry(
|
||||||
data={},
|
data={},
|
||||||
discovery_keys=(),
|
discovery_keys={},
|
||||||
domain="test",
|
domain="test",
|
||||||
entry_id="mock_id",
|
entry_id="mock_id",
|
||||||
minor_version=1,
|
minor_version=1,
|
||||||
|
@ -5284,7 +5290,7 @@ async def test_hashable_non_string_unique_id(
|
||||||
entries = config_entries.ConfigEntryItems(hass)
|
entries = config_entries.ConfigEntryItems(hass)
|
||||||
entry = config_entries.ConfigEntry(
|
entry = config_entries.ConfigEntry(
|
||||||
data={},
|
data={},
|
||||||
discovery_keys=(),
|
discovery_keys={},
|
||||||
domain="test",
|
domain="test",
|
||||||
entry_id="mock_id",
|
entry_id="mock_id",
|
||||||
minor_version=1,
|
minor_version=1,
|
||||||
|
@ -6186,7 +6192,7 @@ async def test_migration_from_1_2(
|
||||||
"created_at": "1970-01-01T00:00:00+00:00",
|
"created_at": "1970-01-01T00:00:00+00:00",
|
||||||
"data": {},
|
"data": {},
|
||||||
"disabled_by": None,
|
"disabled_by": None,
|
||||||
"discovery_keys": [],
|
"discovery_keys": {},
|
||||||
"domain": "sun",
|
"domain": "sun",
|
||||||
"entry_id": "0a8bd02d0d58c7debf5daf7941c9afe2",
|
"entry_id": "0a8bd02d0d58c7debf5daf7941c9afe2",
|
||||||
"minor_version": 1,
|
"minor_version": 1,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue