1
0
mirror of https://github.com/home-assistant/core.git synced 2025-12-24 21:06:19 +00:00

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:
Erik Montnemery
2024-09-23 21:48:11 +02:00
committed by GitHub
parent 9b96bc32eb
commit d82bff1bc2
94 changed files with 378 additions and 325 deletions

View File

@@ -2756,11 +2756,11 @@ async def test_finish_flow_aborts_progress(
[
(
{},
(),
{},
),
(
{"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
(
(),
{},
config_entries.SOURCE_IGNORE,
"mock-unique-id",
{},
config_entries.SOURCE_ZEROCONF,
data_entry_flow.FlowResultType.ABORT,
(),
{},
),
# Discovery key added to ignored entry data
(
(),
{},
config_entries.SOURCE_IGNORE,
"mock-unique-id",
{"discovery_key": {"domain": "test", "key": "blah", "version": 1}},
{"discovery_key": DiscoveryKey(domain="test", key="blah", version=1)},
config_entries.SOURCE_ZEROCONF,
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
(
({"domain": "test", "key": "bleh", "version": 1},),
{"test": (DiscoveryKey(domain="test", key="bleh", version=1),)},
config_entries.SOURCE_IGNORE,
"mock-unique-id",
{"discovery_key": {"domain": "test", "key": "blah", "version": 1}},
{"discovery_key": DiscoveryKey(domain="test", key="blah", version=1)},
config_entries.SOURCE_ZEROCONF,
data_entry_flow.FlowResultType.ABORT,
(
{"domain": "test", "key": "bleh", "version": 1},
{"domain": "test", "key": "blah", "version": 1},
),
{
"test": (
DiscoveryKey(domain="test", key="bleh", version=1),
DiscoveryKey(domain="test", key="blah", version=1),
)
},
),
# Discovery key added to ignored entry data
(
(
{"domain": "test", "key": "1", "version": 1},
{"domain": "test", "key": "2", "version": 1},
{"domain": "test", "key": "3", "version": 1},
{"domain": "test", "key": "4", "version": 1},
{"domain": "test", "key": "5", "version": 1},
{"domain": "test", "key": "6", "version": 1},
{"domain": "test", "key": "7", "version": 1},
{"domain": "test", "key": "8", "version": 1},
{"domain": "test", "key": "9", "version": 1},
{"domain": "test", "key": "10", "version": 1},
),
{
"test": (
DiscoveryKey(domain="test", key="1", version=1),
DiscoveryKey(domain="test", key="2", version=1),
DiscoveryKey(domain="test", key="3", version=1),
DiscoveryKey(domain="test", key="4", version=1),
DiscoveryKey(domain="test", key="5", version=1),
DiscoveryKey(domain="test", key="6", version=1),
DiscoveryKey(domain="test", key="7", version=1),
DiscoveryKey(domain="test", key="8", version=1),
DiscoveryKey(domain="test", key="9", version=1),
DiscoveryKey(domain="test", key="10", version=1),
)
},
config_entries.SOURCE_IGNORE,
"mock-unique-id",
{"discovery_key": {"domain": "test", "key": "11", "version": 1}},
{"discovery_key": DiscoveryKey(domain="test", key="11", version=1)},
config_entries.SOURCE_ZEROCONF,
data_entry_flow.FlowResultType.ABORT,
(
{"domain": "test", "key": "2", "version": 1},
{"domain": "test", "key": "3", "version": 1},
{"domain": "test", "key": "4", "version": 1},
{"domain": "test", "key": "5", "version": 1},
{"domain": "test", "key": "6", "version": 1},
{"domain": "test", "key": "7", "version": 1},
{"domain": "test", "key": "8", "version": 1},
{"domain": "test", "key": "9", "version": 1},
{"domain": "test", "key": "10", "version": 1},
{"domain": "test", "key": "11", "version": 1},
),
{
"test": (
DiscoveryKey(domain="test", key="2", version=1),
DiscoveryKey(domain="test", key="3", version=1),
DiscoveryKey(domain="test", key="4", version=1),
DiscoveryKey(domain="test", key="5", version=1),
DiscoveryKey(domain="test", key="6", version=1),
DiscoveryKey(domain="test", key="7", version=1),
DiscoveryKey(domain="test", key="8", version=1),
DiscoveryKey(domain="test", key="9", version=1),
DiscoveryKey(domain="test", key="10", version=1),
DiscoveryKey(domain="test", key="11", version=1),
)
},
),
# 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,
"mock-unique-id",
{"discovery_key": {"domain": "test", "key": "blah", "version": 1}},
{"discovery_key": DiscoveryKey(domain="test", key="blah", version=1)},
config_entries.SOURCE_ZEROCONF,
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
(
(),
{},
config_entries.SOURCE_USER,
"mock-unique-id",
{"discovery_key": {"domain": "test", "key": "blah", "version": 1}},
{"discovery_key": DiscoveryKey(domain="test", key="blah", version=1)},
config_entries.SOURCE_ZEROCONF,
data_entry_flow.FlowResultType.ABORT,
(),
{},
),
# Flow not aborted when unique id is not matching
(
(),
{},
config_entries.SOURCE_IGNORE,
"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,
data_entry_flow.FlowResultType.FORM,
(),
{},
),
# Flow not aborted when user initiated flow
(
(),
{},
config_entries.SOURCE_IGNORE,
"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,
data_entry_flow.FlowResultType.FORM,
(),
{},
),
],
)
@@ -5251,7 +5257,7 @@ async def test_unhashable_unique_id(
entries = config_entries.ConfigEntryItems(hass)
entry = config_entries.ConfigEntry(
data={},
discovery_keys=(),
discovery_keys={},
domain="test",
entry_id="mock_id",
minor_version=1,
@@ -5284,7 +5290,7 @@ async def test_hashable_non_string_unique_id(
entries = config_entries.ConfigEntryItems(hass)
entry = config_entries.ConfigEntry(
data={},
discovery_keys=(),
discovery_keys={},
domain="test",
entry_id="mock_id",
minor_version=1,
@@ -6186,7 +6192,7 @@ async def test_migration_from_1_2(
"created_at": "1970-01-01T00:00:00+00:00",
"data": {},
"disabled_by": None,
"discovery_keys": [],
"discovery_keys": {},
"domain": "sun",
"entry_id": "0a8bd02d0d58c7debf5daf7941c9afe2",
"minor_version": 1,